Version 2.12.0-14.0.dev

Merge commit '6cfd46e177c1d62ed77e598d1468896919d3403f' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9774dfa..abe1134 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,11 @@
   `--enable-assert-initializers` command line options. These options haven't
   been supported in a while and were no-ops.
 
+#### dartfmt
+
+* Don't duplicate comments on chained if elements.
+* Preserve `?` in initializing formal function-typed parameters.
+
 #### Linter
 
 Updated the Linter to `0.1.122`, which includes:
diff --git a/DEPS b/DEPS
index e84535c..519ade5d 100644
--- a/DEPS
+++ b/DEPS
@@ -98,7 +98,7 @@
   #     and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-"dart_style_tag": "1.3.8+1",  # Please see the note above before updating.
+"dart_style_tag": "1.3.9",  # Please see the note above before updating.
 
   "chromedriver_tag": "83.0.4103.39",
   "dartdoc_rev" : "72c69f8659ce8823ce2dde9a4f758b0fa617ab5e",
diff --git a/pkg/dart_internal/CHANGELOG.md b/pkg/dart_internal/CHANGELOG.md
index d84bdda..8b39127 100644
--- a/pkg/dart_internal/CHANGELOG.md
+++ b/pkg/dart_internal/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.12-nullsafety.1
+
+- Support the latest Dart SDK.
+
 ## 0.1.10
 
 - Support the latest Dart SDK.
diff --git a/pkg/dart_internal/pubspec.yaml b/pkg/dart_internal/pubspec.yaml
index 191de63..64adb7f 100644
--- a/pkg/dart_internal/pubspec.yaml
+++ b/pkg/dart_internal/pubspec.yaml
@@ -1,7 +1,5 @@
 name: dart_internal
-version: 0.1.12-nullsafety
-author: "Dart Team <misc@dartlang.org>"
-homepage: http://www.dartlang.org
+version: 0.1.12-nullsafety.1
 repository: https://github.com/dart-lang/sdk/tree/master/pkg/dart_internal
 description: >
   This package is not intended for wide use. It provides a temporary API to
@@ -18,4 +16,4 @@
 environment:
   # Restrict the upper bound so that we can remove support for this in a later
   # version of the SDK without it being a breaking change.
-  sdk: ">=2.10.0-0 <2.11.0"
+  sdk: ">=2.10.0-0 <2.12.0"
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index a10bff9..8a5f5b2 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -581,11 +581,8 @@
 
     var finishGenericTypeTest = _emitClassTypeTests(c, className, body);
 
-    // Attach caches on all canonicalized types not in our runtime.
-    // Types in the runtime will have caches attached in their constructors.
-    if (!isSdkInternalRuntime(_currentLibrary)) {
-      body.add(runtimeStatement('addTypeCaches(#)', [className]));
-    }
+    // Attach caches on all canonicalized types.
+    body.add(runtimeStatement('addTypeCaches(#)', [className]));
 
     _emitVirtualFieldSymbols(c, body);
     _emitClassSignature(c, className, body);
@@ -1082,29 +1079,8 @@
     }
 
     if (c == _coreTypes.deprecatedFutureOrClass) {
-      // These methods are difficult to place in the runtime or patch files.
-      // * They need to be callable from the class but they can't be static
-      //   methods on the FutureOr class in Dart because they reference the
-      //   generic type parameter.
-      // * There isn't an obvious place in dart:_runtime were we could place a
-      //   method that adds these type tests (similar to addTypeTests()) because
-      //   in the bootstrap ordering the Future class hasn't been defined yet.
-      var typeParam =
-          TypeParameterType(c.typeParameters[0], Nullability.undetermined);
-      var typeT = visitTypeParameterType(typeParam);
-      var futureOfT = visitInterfaceType(InterfaceType(
-          _coreTypes.futureClass, currentLibrary.nonNullable, [typeParam]));
-      body.add(js.statement('''
-          #.is = function is_FutureOr(o) {
-            return #.is(o) || #.is(o);
-          }
-          ''', [className, typeT, futureOfT]));
-      body.add(js.statement('''
-          #.as = function as_FutureOr(o) {
-            if (#.is(o) || #.is(o)) return o;
-            return #.as(o, this);
-          }
-          ''', [className, typeT, futureOfT, runtimeModule]));
+      // Custom type tests for FutureOr types are attached when the type is
+      // constructed in the runtime normalizeFutureOr method.
       return null;
     }
 
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index 621a6e8a..c603225 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -495,11 +495,11 @@
     }
   }
 
-  /// Creates a new edit plan that removes [node] from the AST.
+  /// Creates a new edit plan that removes [sourceNode] from the AST.
   ///
-  /// [node] must be one element of a variable length sequence maintained by
-  /// [node]'s parent (for example, a statement in a block, an element in a
-  /// list, a declaration in a class, etc.).  If it is not, an exception is
+  /// [sourceNode] must be one element of a variable length sequence maintained
+  /// by [sourceNode]'s parent (for example, a statement in a block, an element
+  /// in a list, a declaration in a class, etc.).  If it is not, an exception is
   /// thrown.
   ///
   /// Optional argument [info] contains information about why the change was
@@ -674,9 +674,10 @@
   ///
   /// Optional argument [info] contains information about why the change was
   /// made.
-  EditPlan tryRemoveNode(AstNode sourceNode, {AtomicEditInfo info}) {
+  EditPlan tryRemoveNode(AstNode sourceNode,
+      {List<AstNode> sequenceNodes, AtomicEditInfo info}) {
     var parent = sourceNode.parent;
-    var sequenceNodes = _computeSequenceNodes(parent);
+    sequenceNodes ??= _computeSequenceNodes(parent);
     if (sequenceNodes == null) {
       return null;
     }
@@ -809,6 +810,8 @@
       return node.elements;
     } else if (node is ArgumentList) {
       return node.arguments;
+    } else if (node is FormalParameter) {
+      return node.metadata;
     } else if (node is FormalParameterList) {
       return node.parameters;
     } else if (node is VariableDeclarationList) {
@@ -1525,7 +1528,8 @@
       AstNode parent, List<AstNode> childNodes) {
     if (parent is Block ||
         parent is ClassDeclaration ||
-        parent is CompilationUnit) {
+        parent is CompilationUnit ||
+        parent is FormalParameter) {
       // These parent types don't use separators.
       return null;
     } else {
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index b006ba4..2105912 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -666,6 +666,14 @@
   /// contained in the edit.
   AtomicEditInfo addRequiredKeywordInfo;
 
+  /// If non-null, indicates a `@required` annotation which should be removed
+  /// from this node.
+  Annotation annotationToRemove;
+
+  /// If [annotationToRemove] is non-null, the information that should be
+  /// contained in the edit.
+  AtomicEditInfo removeAnnotationInfo;
+
   NodeChangeForDefaultFormalParameter() : super._();
 
   @override
@@ -676,8 +684,17 @@
   EditPlan _apply(DefaultFormalParameter node, FixAggregator aggregator) {
     var innerPlan = aggregator.innerPlanForNode(node);
     if (!addRequiredKeyword) return innerPlan;
-    return aggregator.planner.surround(innerPlan,
-        prefix: [AtomicEdit.insert('required ', info: addRequiredKeywordInfo)]);
+
+    var offset = node.firstTokenAfterCommentAndMetadata.offset;
+    return aggregator.planner.passThrough(node, innerPlans: [
+      aggregator.planner.insertText(node, offset, [
+        AtomicEdit.insert('required ', info: addRequiredKeywordInfo),
+      ]),
+      if (annotationToRemove != null)
+        aggregator.planner
+            .removeNode(annotationToRemove, info: removeAnnotationInfo),
+      ...aggregator.innerPlansForNode(node),
+    ]);
   }
 }
 
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 3699d66..32b2777 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -1145,20 +1145,33 @@
             cls.name, method.name, element.name),
         {FixReasonTarget.root: node});
     var metadata = parameter.metadata;
-    for (var annotation in metadata) {
-      if (annotation.elementAnnotation.isRequired) {
-        // TODO(paulberry): what if `@required` isn't the first annotation?
-        // Will we produce something that isn't grammatical?
-        (_fixBuilder._getChange(annotation) as NodeChangeForAnnotation)
+    if (metadata != null && metadata.isNotEmpty) {
+      // Only the last annotation can be changed into a `required` keyword;
+      // changing an earlier annotation into a keyword would be illegal.
+      var lastAnnotation = metadata.last;
+      if (lastAnnotation.elementAnnotation.isRequired) {
+        (_fixBuilder._getChange(lastAnnotation) as NodeChangeForAnnotation)
           ..changeToRequiredKeyword = true
           ..changeToRequiredKeywordInfo = info;
         return;
       }
     }
     // Otherwise create a new `required` keyword.
-    (_fixBuilder._getChange(parameter) as NodeChangeForDefaultFormalParameter)
+    var nodeChange = (_fixBuilder._getChange(parameter)
+        as NodeChangeForDefaultFormalParameter)
       ..addRequiredKeyword = true
       ..addRequiredKeywordInfo = info;
+    var requiredAnnotation = metadata?.firstWhere(
+        (annotation) => annotation.elementAnnotation.isRequired,
+        orElse: () => null);
+    if (requiredAnnotation != null) {
+      // If the parameter was annotated with `@required`, but it was not the
+      // last annotation, we remove the annotation in addition to adding the
+      // `required` keyword.
+      nodeChange
+        ..annotationToRemove = requiredAnnotation
+        ..removeAnnotationInfo = info;
+    }
   }
 
   void _makeTypeNameNullable(TypeAnnotation node, DecoratedType decoratedType) {
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index ad52876..25a697c 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -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.
 
-import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -894,40 +893,3 @@
     throw UnimplementedError(buffer.toString());
   }
 }
-
-extension on FormalParameter {
-  // TODO(srawlins): Add this to FormalParameter interface.
-  Token get firstTokenAfterCommentAndMetadata {
-    var parameter = this is DefaultFormalParameter
-        ? (this as DefaultFormalParameter).parameter
-        : this as NormalFormalParameter;
-    if (parameter is FieldFormalParameter) {
-      if (parameter.keyword != null) {
-        return parameter.keyword;
-      } else if (parameter.type != null) {
-        return parameter.type.beginToken;
-      } else {
-        return parameter.thisKeyword;
-      }
-    } else if (parameter is FunctionTypedFormalParameter) {
-      if (parameter.covariantKeyword != null) {
-        return parameter.covariantKeyword;
-      } else if (parameter.returnType != null) {
-        return parameter.returnType.beginToken;
-      } else {
-        return parameter.identifier.token;
-      }
-    } else if (parameter is SimpleFormalParameter) {
-      if (parameter.covariantKeyword != null) {
-        return parameter.covariantKeyword;
-      } else if (parameter.keyword != null) {
-        return parameter.keyword;
-      } else if (parameter.type != null) {
-        return parameter.type.beginToken;
-      } else {
-        return parameter.identifier.token;
-      }
-    }
-    return null;
-  }
-}
diff --git a/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart b/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
index 28177af..9f9a8c7 100644
--- a/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
 
 /// Determines if the given [token] is followed by a nullability hint, and if
@@ -226,3 +227,40 @@
   /// required.
   required,
 }
+
+extension FormalParameterExtensions on FormalParameter {
+  // TODO(srawlins): Add this to FormalParameter interface.
+  Token get firstTokenAfterCommentAndMetadata {
+    var parameter = this is DefaultFormalParameter
+        ? (this as DefaultFormalParameter).parameter
+        : this as NormalFormalParameter;
+    if (parameter is FieldFormalParameter) {
+      if (parameter.keyword != null) {
+        return parameter.keyword;
+      } else if (parameter.type != null) {
+        return parameter.type.beginToken;
+      } else {
+        return parameter.thisKeyword;
+      }
+    } else if (parameter is FunctionTypedFormalParameter) {
+      if (parameter.covariantKeyword != null) {
+        return parameter.covariantKeyword;
+      } else if (parameter.returnType != null) {
+        return parameter.returnType.beginToken;
+      } else {
+        return parameter.identifier.token;
+      }
+    } else if (parameter is SimpleFormalParameter) {
+      if (parameter.covariantKeyword != null) {
+        return parameter.covariantKeyword;
+      } else if (parameter.keyword != null) {
+        return parameter.keyword;
+      } else if (parameter.type != null) {
+        return parameter.type.beginToken;
+      } else {
+        return parameter.identifier.token;
+      }
+    }
+    return null;
+  }
+}
diff --git a/pkg/nnbd_migration/test/fix_aggregator_test.dart b/pkg/nnbd_migration/test/fix_aggregator_test.dart
index 123de0a..c3eb5f2 100644
--- a/pkg/nnbd_migration/test/fix_aggregator_test.dart
+++ b/pkg/nnbd_migration/test/fix_aggregator_test.dart
@@ -244,6 +244,60 @@
     expect(previewInfo.applyTo(code), 'f({required int x}) => 0;');
   }
 
+  Future<void> test_addRequired_afterMetadata() async {
+    await analyze('f({@deprecated int x}) => 0;');
+    var previewInfo = run({
+      findNode.defaultParameter('int x'): NodeChangeForDefaultFormalParameter()
+        ..addRequiredKeyword = true
+    });
+    expect(previewInfo.applyTo(code), 'f({@deprecated required int x}) => 0;');
+  }
+
+  Future<void> test_addRequired_afterMetadata_andRequiredAnnotation() async {
+    addMetaPackage();
+    var content = '''
+import 'package:meta/meta.dart';
+f({@required @deprecated int x}) {}
+''';
+    await analyze(content);
+    var annotation = findNode.annotation('required');
+    var previewInfo = run({
+      findNode.defaultParameter('int x'): NodeChangeForDefaultFormalParameter()
+        ..addRequiredKeyword = true
+        ..annotationToRemove = annotation
+    });
+    expect(previewInfo.applyTo(code), '''
+import 'package:meta/meta.dart';
+f({@deprecated required int x}) {}
+''');
+    expect(previewInfo.values, hasLength(2));
+
+    expect(previewInfo[content.indexOf('int ')], hasLength(1));
+    expect(previewInfo[content.indexOf('int ')].single.isInsertion, true);
+    expect(previewInfo[content.indexOf('@required')], isNotNull);
+    expect(previewInfo[content.indexOf('@required')].single.isDeletion, true);
+  }
+
+  Future<void> test_addRequired_afterMetadata_beforeFinal() async {
+    await analyze('f({@deprecated final int x}) => 0;');
+    var previewInfo = run({
+      findNode.defaultParameter('int x'): NodeChangeForDefaultFormalParameter()
+        ..addRequiredKeyword = true
+    });
+    expect(previewInfo.applyTo(code),
+        'f({@deprecated required final int x}) => 0;');
+  }
+
+  Future<void> test_addRequired_afterMetadata_beforeFunctionTyped() async {
+    await analyze('f({@deprecated int x()}) => 0;');
+    var previewInfo = run({
+      findNode.defaultParameter('int x'): NodeChangeForDefaultFormalParameter()
+        ..addRequiredKeyword = true
+    });
+    expect(
+        previewInfo.applyTo(code), 'f({@deprecated required int x()}) => 0;');
+  }
+
   Future<void> test_addShownName_atEnd_multiple() async {
     await analyze("import 'dart:math' show cos;");
     var previewInfo = run({
@@ -1728,6 +1782,24 @@
     expect(previewInfo.applyTo(code), 'f(x) => x.y;');
   }
 
+  Future<void>
+      test_requiredAnnotationToRequiredKeyword_leadingAnnotations() async {
+    addMetaPackage();
+    await analyze('''
+import 'package:meta/meta.dart';
+f({@deprecated @required int x}) {}
+''');
+    var annotation = findNode.annotation('required');
+    var previewInfo = run({
+      annotation: NodeChangeForAnnotation()..changeToRequiredKeyword = true
+    });
+    expect(previewInfo.applyTo(code), '''
+import 'package:meta/meta.dart';
+f({@deprecated required int x}) {}
+''');
+    expect(previewInfo.values.single.single.isDeletion, true);
+  }
+
   Future<void> test_requiredAnnotationToRequiredKeyword_prefixed() async {
     addMetaPackage();
     await analyze('''
diff --git a/pkg/wasm/lib/src/function.dart b/pkg/wasm/lib/src/function.dart
index 8cc2c32..82f07b8 100644
--- a/pkg/wasm/lib/src/function.dart
+++ b/pkg/wasm/lib/src/function.dart
@@ -13,17 +13,19 @@
   Pointer<WasmerFunc> _func;
   List<int> _argTypes;
   int _returnType;
-  Pointer<WasmerVal> _args;
-  Pointer<WasmerVal> _results;
+  Pointer<WasmerValVec> _args = allocate<WasmerValVec>();
+  Pointer<WasmerValVec> _results = allocate<WasmerValVec>();
 
-  WasmFunction(this._name, this._func, this._argTypes, this._returnType)
-      : _args = _argTypes.length == 0
-            ? nullptr
-            : allocate<WasmerVal>(count: _argTypes.length),
-        _results =
-            _returnType == WasmerValKindVoid ? nullptr : allocate<WasmerVal>() {
+  WasmFunction(this._name, this._func, this._argTypes, this._returnType) {
+    _args.ref.length = _argTypes.length;
+    _args.ref.data = _argTypes.length == 0
+        ? nullptr
+        : allocate<WasmerVal>(count: _argTypes.length);
+    _results.ref.length = _returnType == WasmerValKindVoid ? 0 : 1;
+    _results.ref.data =
+        _returnType == WasmerValKindVoid ? nullptr : allocate<WasmerVal>();
     for (var i = 0; i < _argTypes.length; ++i) {
-      _args[i].kind = _argTypes[i];
+      _args.ref.data[i].kind = _argTypes[i];
     }
   }
 
@@ -35,19 +37,19 @@
     switch (_argTypes[i]) {
       case WasmerValKindI32:
         if (arg is! int) return false;
-        _args[i].i32 = arg;
+        _args.ref.data[i].i32 = arg;
         return true;
       case WasmerValKindI64:
         if (arg is! int) return false;
-        _args[i].i64 = arg;
+        _args.ref.data[i].i64 = arg;
         return true;
       case WasmerValKindF32:
         if (arg is! num) return false;
-        _args[i].f32 = arg;
+        _args.ref.data[i].f32 = arg;
         return true;
       case WasmerValKindF64:
         if (arg is! num) return false;
-        _args[i].f64 = arg;
+        _args.ref.data[i].f64 = arg;
         return true;
     }
     return false;
@@ -62,12 +64,12 @@
         throw ArgumentError("Bad argument type for WASM function: $this");
       }
     }
-    WasmRuntime().call(_func, _args, _results);
+    WasmRuntime().call(_func, _args, _results, toString());
 
     if (_returnType == WasmerValKindVoid) {
       return null;
     }
-    var result = _results[0];
+    var result = _results.ref.data[0];
     assert(_returnType == result.kind);
     switch (_returnType) {
       case WasmerValKindI32:
diff --git a/pkg/wasm/lib/src/module.dart b/pkg/wasm/lib/src/module.dart
index 6de1399..d60f9e8 100644
--- a/pkg/wasm/lib/src/module.dart
+++ b/pkg/wasm/lib/src/module.dart
@@ -49,13 +49,11 @@
 }
 
 Pointer<WasmerTrap> _wasmFnImportTrampoline(Pointer<_WasmFnImport> imp,
-    Pointer<WasmerVal> args, Pointer<WasmerVal> results) {
+    Pointer<WasmerValVec> args, Pointer<WasmerValVec> results) {
   try {
     _WasmFnImport._call(imp, args, results);
-  } catch (e) {
-    // TODO: Use WasmerTrap to handle this case. For now just print the
-    // exception (if we ignore it, FFI will silently return a default result).
-    print(e);
+  } catch (exception) {
+    return WasmRuntime().newTrap(imp.ref.store, exception);
   }
   return nullptr;
 }
@@ -66,8 +64,8 @@
 }
 
 final _wasmFnImportTrampolineNative = Pointer.fromFunction<
-    Pointer<WasmerTrap> Function(Pointer<_WasmFnImport>, Pointer<WasmerVal>,
-        Pointer<WasmerVal>)>(_wasmFnImportTrampoline);
+    Pointer<WasmerTrap> Function(Pointer<_WasmFnImport>, Pointer<WasmerValVec>,
+        Pointer<WasmerValVec>)>(_wasmFnImportTrampoline);
 final _wasmFnImportToFn = <int, Function>{};
 final _wasmFnImportFinalizerNative =
     Pointer.fromFunction<Void Function(Pointer<_WasmFnImport>)>(
@@ -75,34 +73,36 @@
 
 class _WasmFnImport extends Struct {
   @Int32()
-  external int numArgs;
-
-  @Int32()
   external int returnType;
 
-  static void _call(Pointer<_WasmFnImport> imp, Pointer<WasmerVal> rawArgs,
-      Pointer<WasmerVal> rawResult) {
+  external Pointer<WasmerStore> store;
+
+  static void _call(Pointer<_WasmFnImport> imp, Pointer<WasmerValVec> rawArgs,
+      Pointer<WasmerValVec> rawResult) {
     Function fn = _wasmFnImportToFn[imp.address] as Function;
     var args = [];
-    for (var i = 0; i < imp.ref.numArgs; ++i) {
-      args.add(rawArgs[i].toDynamic);
+    for (var i = 0; i < rawArgs.ref.length; ++i) {
+      args.add(rawArgs.ref.data[i].toDynamic);
     }
+    assert(
+        rawResult.ref.length == 1 || imp.ref.returnType == WasmerValKindVoid);
     var result = Function.apply(fn, args);
-    switch (imp.ref.returnType) {
-      case WasmerValKindI32:
-        rawResult.ref.i32 = result;
-        break;
-      case WasmerValKindI64:
-        rawResult.ref.i64 = result;
-        break;
-      case WasmerValKindF32:
-        rawResult.ref.f32 = result;
-        break;
-      case WasmerValKindF64:
-        rawResult.ref.f64 = result;
-        break;
-      case WasmerValKindVoid:
-      // Do nothing.
+    if (imp.ref.returnType != WasmerValKindVoid) {
+      rawResult.ref.data[0].kind = imp.ref.returnType;
+      switch (imp.ref.returnType) {
+        case WasmerValKindI32:
+          rawResult.ref.data[0].i32 = result;
+          break;
+        case WasmerValKindI64:
+          rawResult.ref.data[0].i64 = result;
+          break;
+        case WasmerValKindF32:
+          rawResult.ref.data[0].f32 = result;
+          break;
+        case WasmerValKindF64:
+          rawResult.ref.data[0].f64 = result;
+          break;
+      }
     }
   }
 }
@@ -113,16 +113,18 @@
   WasmModule _module;
   late List<WasmImportDescriptor> _importDescs;
   Map<String, int> _importIndex;
-  late Pointer<Pointer<WasmerExtern>> _imports;
+  Pointer<WasmerExternVec> _imports = allocate<WasmerExternVec>();
   Pointer<WasmerWasiEnv> _wasiEnv = nullptr;
 
   WasmInstanceBuilder(this._module) : _importIndex = {} {
     _importDescs = WasmRuntime().importDescriptors(_module._module);
-    _imports = allocate<Pointer<WasmerExtern>>(count: _importDescs.length);
+    _imports.ref.length = _importDescs.length;
+    _imports.ref.data =
+        allocate<Pointer<WasmerExtern>>(count: _importDescs.length);
     for (var i = 0; i < _importDescs.length; ++i) {
       var imp = _importDescs[i];
       _importIndex["${imp.moduleName}::${imp.name}"] = i;
-      _imports[i] = nullptr;
+      _imports.ref.data[i] = nullptr;
     }
   }
 
@@ -130,7 +132,7 @@
     var index = _importIndex["${moduleName}::${name}"];
     if (index == null) {
       throw Exception("Import not found: ${moduleName}::${name}");
-    } else if (_imports[index] != nullptr) {
+    } else if (_imports.ref.data[index] != nullptr) {
       throw Exception("Import already filled: ${moduleName}::${name}");
     } else {
       return index;
@@ -145,7 +147,7 @@
     if (imp.kind != WasmerExternKindMemory) {
       throw Exception("Import is not a memory: $imp");
     }
-    _imports[index] = WasmRuntime().memoryToExtern(memory._mem);
+    _imports.ref.data[index] = WasmRuntime().memoryToExtern(memory._mem);
     return this;
   }
 
@@ -162,8 +164,8 @@
     var argTypes = runtime.getArgTypes(imp.funcType);
     var returnType = runtime.getReturnType(imp.funcType);
     var wasmFnImport = allocate<_WasmFnImport>();
-    wasmFnImport.ref.numArgs = argTypes.length;
     wasmFnImport.ref.returnType = returnType;
+    wasmFnImport.ref.store = _module._store;
     _wasmFnImportToFn[wasmFnImport.address] = fn;
     var fnImp = runtime.newFunc(
         _module._store,
@@ -171,7 +173,7 @@
         _wasmFnImportTrampolineNative,
         wasmFnImport,
         _wasmFnImportFinalizerNative);
-    _imports[index] = runtime.functionToExtern(fnImp);
+    _imports.ref.data[index] = runtime.functionToExtern(fnImp);
     return this;
   }
 
@@ -193,7 +195,7 @@
   /// Build the module instance.
   WasmInstance build() {
     for (var i = 0; i < _importDescs.length; ++i) {
-      if (_imports[i] == nullptr) {
+      if (_imports.ref.data[i] == nullptr) {
         throw Exception("Missing import: ${_importDescs[i]}");
       }
     }
@@ -211,8 +213,7 @@
   Stream<List<int>>? _stderr;
   Map<String, WasmFunction> _functions = {};
 
-  WasmInstance(
-      this._module, Pointer<Pointer<WasmerExtern>> imports, this._wasiEnv)
+  WasmInstance(this._module, Pointer<WasmerExternVec> imports, this._wasiEnv)
       : _instance = WasmRuntime()
             .instantiate(_module._store, _module._module, imports) {
     var runtime = WasmRuntime();
diff --git a/pkg/wasm/lib/src/runtime.dart b/pkg/wasm/lib/src/runtime.dart
index e14bda0..ee83580 100644
--- a/pkg/wasm/lib/src/runtime.dart
+++ b/pkg/wasm/lib/src/runtime.dart
@@ -59,6 +59,7 @@
 
   DynamicLibrary _lib;
   late Pointer<WasmerEngine> _engine;
+  Map<int, dynamic> traps = {};
   late WasmerWasiConfigInheritStderrFn _wasi_config_inherit_stderr;
   late WasmerWasiConfigInheritStdoutFn _wasi_config_inherit_stdout;
   late WasmerWasiConfigNewFn _wasi_config_new;
@@ -124,6 +125,8 @@
   late WasmerStoreDeleteFn _store_delete;
   late WasmerStoreNewFn _store_new;
   late WasmerTrapDeleteFn _trap_delete;
+  late WasmerTrapMessageFn _trap_message;
+  late WasmerTrapNewFn _trap_new;
   late WasmerValtypeDeleteFn _valtype_delete;
   late WasmerValtypeKindFn _valtype_kind;
   late WasmerValtypeVecDeleteFn _valtype_vec_delete;
@@ -344,6 +347,11 @@
     _trap_delete =
         _lib.lookupFunction<NativeWasmerTrapDeleteFn, WasmerTrapDeleteFn>(
             'wasm_trap_delete');
+    _trap_message =
+        _lib.lookupFunction<NativeWasmerTrapMessageFn, WasmerTrapMessageFn>(
+            'wasm_trap_message');
+    _trap_new = _lib.lookupFunction<NativeWasmerTrapNewFn, WasmerTrapNewFn>(
+        'wasm_trap_new');
     _valtype_delete =
         _lib.lookupFunction<NativeWasmerValtypeDeleteFn, WasmerValtypeDeleteFn>(
             'wasm_valtype_delete');
@@ -432,10 +440,31 @@
     return imps;
   }
 
+  void maybeThrowTrap(Pointer<WasmerTrap> trap, String source) {
+    if (trap != nullptr) {
+      var stashedException = traps[trap.address];
+      if (stashedException != null) {
+        traps.remove(stashedException);
+        throw stashedException;
+      } else {
+        var trapMessage = allocate<WasmerByteVec>();
+        _trap_message(trap, trapMessage);
+        var message = "Wasm trap when calling $source: ${trapMessage.ref}";
+        free(trapMessage.ref.data);
+        free(trapMessage);
+        throw Exception(message);
+      }
+    }
+  }
+
   Pointer<WasmerInstance> instantiate(Pointer<WasmerStore> store,
-      Pointer<WasmerModule> module, Pointer<Pointer<WasmerExtern>> imports) {
-    return _checkNotEqual(_instance_new(store, module, imports, nullptr),
-        nullptr, "Wasm module instantiation failed.");
+      Pointer<WasmerModule> module, Pointer<WasmerExternVec> imports) {
+    var trap = allocate<Pointer<WasmerTrap>>();
+    trap.value = nullptr;
+    var inst = _instance_new(store, module, imports, trap);
+    maybeThrowTrap(trap.value, "module initialization function");
+    free(trap);
+    return _checkNotEqual(inst, nullptr, "Wasm module instantiation failed.");
   }
 
   Pointer<WasmerExternVec> exports(Pointer<WasmerInstance> instancePtr) {
@@ -475,9 +504,9 @@
     return _valtype_kind(rets.ref.data[0]);
   }
 
-  void call(Pointer<WasmerFunc> func, Pointer<WasmerVal> args,
-      Pointer<WasmerVal> results) {
-    _func_call(func, args, results);
+  void call(Pointer<WasmerFunc> func, Pointer<WasmerValVec> args,
+      Pointer<WasmerValVec> results, String source) {
+    maybeThrowTrap(_func_call(func, args, results), source);
   }
 
   Pointer<WasmerMemory> externToMemory(Pointer<WasmerExtern> extern) {
@@ -522,6 +551,18 @@
         store, funcType, func.cast(), env.cast(), finalizer.cast());
   }
 
+  Pointer<WasmerTrap> newTrap(Pointer<WasmerStore> store, dynamic exception) {
+    var msg = allocate<WasmerByteVec>();
+    msg.ref.data = allocate<Uint8>();
+    msg.ref.data[0] = 0;
+    msg.ref.length = 0;
+    var trap = _trap_new(store, msg);
+    traps[trap.address] = exception;
+    free(msg.ref.data);
+    free(msg);
+    return _checkNotEqual(trap, nullptr, "Failed to create trap.");
+  }
+
   Pointer<WasmerWasiConfig> newWasiConfig() {
     var name = allocate<Uint8>();
     name[0] = 0;
@@ -549,7 +590,7 @@
   }
 
   void getWasiImports(Pointer<WasmerStore> store, Pointer<WasmerModule> mod,
-      Pointer<WasmerWasiEnv> env, Pointer<Pointer<WasmerExtern>> imports) {
+      Pointer<WasmerWasiEnv> env, Pointer<WasmerExternVec> imports) {
     _checkNotEqual(_wasi_get_imports(store, mod, env, imports), 0,
         "Failed to fill WASI imports.");
   }
diff --git a/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py b/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py
index 906cea5..6251ee9 100755
--- a/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py
+++ b/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py
@@ -155,6 +155,7 @@
     ('own', ''),
     ('WASM_API_EXTERN', ''),
     ('wasm_name_t', 'wasm_byte_vec_t'),
+    ('wasm_message_t', 'wasm_byte_vec_t'),
     ('wasm_memory_pages_t', 'uint32_t'),
     ('wasm_externkind_t', 'uint8_t'),
     ('wasm_valkind_t', 'uint8_t'),
@@ -290,7 +291,7 @@
 WASM_API_EXTERN const wasm_name_t* wasm_exporttype_name(const wasm_exporttype_t*);
 WASM_API_EXTERN const wasm_externtype_t* wasm_exporttype_type(const wasm_exporttype_t*);
 WASM_API_EXTERN wasm_externkind_t wasm_externtype_kind(const wasm_externtype_t*);
-WASM_API_EXTERN own wasm_instance_t* wasm_instance_new(wasm_store_t*, const wasm_module_t*, const wasm_extern_t* const imports[], own wasm_trap_t**);
+WASM_API_EXTERN own wasm_instance_t* wasm_instance_new(wasm_store_t*, const wasm_module_t*, const wasm_extern_vec_t* imports, own wasm_trap_t**);
 WASM_API_EXTERN void wasm_instance_exports(const wasm_instance_t*, own wasm_extern_vec_t* out);
 WASM_API_EXTERN own wasm_memory_t* wasm_memory_new(wasm_store_t*, const wasm_memorytype_t*);
 WASM_API_EXTERN byte_t* wasm_memory_data(wasm_memory_t*);
@@ -305,11 +306,13 @@
 WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_params(const wasm_functype_t*);
 WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_results(const wasm_functype_t*);
 WASM_API_EXTERN own wasm_func_t* wasm_func_new_with_env( wasm_store_t*, const wasm_functype_t* type, void* fn, void* env, void *finalizer);
-WASM_API_EXTERN own wasm_trap_t* wasm_func_call(const wasm_func_t*, const wasm_val_t args[], wasm_val_t results[]);
+WASM_API_EXTERN own wasm_trap_t* wasm_func_call(const wasm_func_t*, const wasm_val_vec_t* args, wasm_val_vec_t* results);
+WASM_API_EXTERN own wasm_trap_t* wasm_trap_new(wasm_store_t* store, const wasm_message_t*);
+WASM_API_EXTERN void wasm_trap_message(const wasm_trap_t*, own wasm_message_t* out);
 WASM_API_EXTERN wasm_valkind_t wasm_valtype_kind(const wasm_valtype_t*);
 wasi_config_t* wasi_config_new(const uint8_t* program_name);
 wasi_env_t* wasi_env_new(wasi_config_t* config);
-bool wasi_get_imports(const wasm_store_t* store, const wasm_module_t* module, const wasi_env_t* wasi_env, wasm_extern_t** imports);
+bool wasi_get_imports(const wasm_store_t* store, const wasm_module_t* module, const wasi_env_t* wasi_env, wasm_extern_vec_t* imports);
 int wasmer_last_error_message(uint8_t* buffer, int length);
 int wasmer_last_error_length();
 void wasi_env_set_memory(wasi_env_t* env, const wasm_memory_t* memory);
diff --git a/pkg/wasm/lib/src/tools/runtime_template.dart b/pkg/wasm/lib/src/tools/runtime_template.dart
index 981da8d..1f53a43 100644
--- a/pkg/wasm/lib/src/tools/runtime_template.dart
+++ b/pkg/wasm/lib/src/tools/runtime_template.dart
@@ -57,6 +57,7 @@
 
   DynamicLibrary _lib;
   late Pointer<WasmerEngine> _engine;
+  Map<int, dynamic> traps = {};
 /* <RUNTIME_MEMB> */
 
   factory WasmRuntime() {
@@ -166,10 +167,31 @@
     return imps;
   }
 
+  void maybeThrowTrap(Pointer<WasmerTrap> trap, String source) {
+    if (trap != nullptr) {
+      var stashedException = traps[trap.address];
+      if (stashedException != null) {
+        traps.remove(stashedException);
+        throw stashedException;
+      } else {
+        var trapMessage = allocate<WasmerByteVec>();
+        _trap_message(trap, trapMessage);
+        var message = "Wasm trap when calling $source: ${trapMessage.ref}";
+        free(trapMessage.ref.data);
+        free(trapMessage);
+        throw Exception(message);
+      }
+    }
+  }
+
   Pointer<WasmerInstance> instantiate(Pointer<WasmerStore> store,
-      Pointer<WasmerModule> module, Pointer<Pointer<WasmerExtern>> imports) {
-    return _checkNotEqual(_instance_new(store, module, imports, nullptr),
-        nullptr, "Wasm module instantiation failed.");
+      Pointer<WasmerModule> module, Pointer<WasmerExternVec> imports) {
+    var trap = allocate<Pointer<WasmerTrap>>();
+    trap.value = nullptr;
+    var inst = _instance_new(store, module, imports, trap);
+    maybeThrowTrap(trap.value, "module initialization function");
+    free(trap);
+    return _checkNotEqual(inst, nullptr, "Wasm module instantiation failed.");
   }
 
   Pointer<WasmerExternVec> exports(Pointer<WasmerInstance> instancePtr) {
@@ -209,9 +231,9 @@
     return _valtype_kind(rets.ref.data[0]);
   }
 
-  void call(Pointer<WasmerFunc> func, Pointer<WasmerVal> args,
-      Pointer<WasmerVal> results) {
-    _func_call(func, args, results);
+  void call(Pointer<WasmerFunc> func, Pointer<WasmerValVec> args,
+      Pointer<WasmerValVec> results, String source) {
+    maybeThrowTrap(_func_call(func, args, results), source);
   }
 
   Pointer<WasmerMemory> externToMemory(Pointer<WasmerExtern> extern) {
@@ -256,6 +278,18 @@
         store, funcType, func.cast(), env.cast(), finalizer.cast());
   }
 
+  Pointer<WasmerTrap> newTrap(Pointer<WasmerStore> store, dynamic exception) {
+    var msg = allocate<WasmerByteVec>();
+    msg.ref.data = allocate<Uint8>();
+    msg.ref.data[0] = 0;
+    msg.ref.length = 0;
+    var trap = _trap_new(store, msg);
+    traps[trap.address] = exception;
+    free(msg.ref.data);
+    free(msg);
+    return _checkNotEqual(trap, nullptr, "Failed to create trap.");
+  }
+
   Pointer<WasmerWasiConfig> newWasiConfig() {
     var name = allocate<Uint8>();
     name[0] = 0;
@@ -283,7 +317,7 @@
   }
 
   void getWasiImports(Pointer<WasmerStore> store, Pointer<WasmerModule> mod,
-      Pointer<WasmerWasiEnv> env, Pointer<Pointer<WasmerExtern>> imports) {
+      Pointer<WasmerWasiEnv> env, Pointer<WasmerExternVec> imports) {
     _checkNotEqual(_wasi_get_imports(store, mod, env, imports), 0,
         "Failed to fill WASI imports.");
   }
diff --git a/pkg/wasm/lib/src/wasmer_api.dart b/pkg/wasm/lib/src/wasmer_api.dart
index c8e55c7..ce9057e 100644
--- a/pkg/wasm/lib/src/wasmer_api.dart
+++ b/pkg/wasm/lib/src/wasmer_api.dart
@@ -261,16 +261,10 @@
     Pointer<WasmerWasiEnv>, Pointer<WasmerMemory>);
 
 // wasi_get_imports
-typedef NativeWasmerWasiGetImportsFn = Uint8 Function(
-    Pointer<WasmerStore>,
-    Pointer<WasmerModule>,
-    Pointer<WasmerWasiEnv>,
-    Pointer<Pointer<WasmerExtern>>);
-typedef WasmerWasiGetImportsFn = int Function(
-    Pointer<WasmerStore>,
-    Pointer<WasmerModule>,
-    Pointer<WasmerWasiEnv>,
-    Pointer<Pointer<WasmerExtern>>);
+typedef NativeWasmerWasiGetImportsFn = Uint8 Function(Pointer<WasmerStore>,
+    Pointer<WasmerModule>, Pointer<WasmerWasiEnv>, Pointer<WasmerExternVec>);
+typedef WasmerWasiGetImportsFn = int Function(Pointer<WasmerStore>,
+    Pointer<WasmerModule>, Pointer<WasmerWasiEnv>, Pointer<WasmerExternVec>);
 
 // wasm_byte_vec_delete
 typedef NativeWasmerByteVecDeleteFn = Void Function(Pointer<WasmerByteVec>);
@@ -401,9 +395,9 @@
 
 // wasm_func_call
 typedef NativeWasmerFuncCallFn = Pointer<WasmerTrap> Function(
-    Pointer<WasmerFunc>, Pointer<WasmerVal>, Pointer<WasmerVal>);
+    Pointer<WasmerFunc>, Pointer<WasmerValVec>, Pointer<WasmerValVec>);
 typedef WasmerFuncCallFn = Pointer<WasmerTrap> Function(
-    Pointer<WasmerFunc>, Pointer<WasmerVal>, Pointer<WasmerVal>);
+    Pointer<WasmerFunc>, Pointer<WasmerValVec>, Pointer<WasmerValVec>);
 
 // wasm_func_delete
 typedef NativeWasmerFuncDeleteFn = Void Function(Pointer<WasmerFunc>);
@@ -495,12 +489,12 @@
 typedef NativeWasmerInstanceNewFn = Pointer<WasmerInstance> Function(
     Pointer<WasmerStore>,
     Pointer<WasmerModule>,
-    Pointer<Pointer<WasmerExtern>>,
+    Pointer<WasmerExternVec>,
     Pointer<Pointer<WasmerTrap>>);
 typedef WasmerInstanceNewFn = Pointer<WasmerInstance> Function(
     Pointer<WasmerStore>,
     Pointer<WasmerModule>,
-    Pointer<Pointer<WasmerExtern>>,
+    Pointer<WasmerExternVec>,
     Pointer<Pointer<WasmerTrap>>);
 
 // wasm_memory_as_extern
@@ -583,6 +577,18 @@
 typedef NativeWasmerTrapDeleteFn = Void Function(Pointer<WasmerTrap>);
 typedef WasmerTrapDeleteFn = void Function(Pointer<WasmerTrap>);
 
+// wasm_trap_message
+typedef NativeWasmerTrapMessageFn = Void Function(
+    Pointer<WasmerTrap>, Pointer<WasmerByteVec>);
+typedef WasmerTrapMessageFn = void Function(
+    Pointer<WasmerTrap>, Pointer<WasmerByteVec>);
+
+// wasm_trap_new
+typedef NativeWasmerTrapNewFn = Pointer<WasmerTrap> Function(
+    Pointer<WasmerStore>, Pointer<WasmerByteVec>);
+typedef WasmerTrapNewFn = Pointer<WasmerTrap> Function(
+    Pointer<WasmerStore>, Pointer<WasmerByteVec>);
+
 // wasm_valtype_delete
 typedef NativeWasmerValtypeDeleteFn = Void Function(Pointer<WasmerValtype>);
 typedef WasmerValtypeDeleteFn = void Function(Pointer<WasmerValtype>);
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 16fca32..7913553 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -2380,21 +2380,43 @@
 
 class RODataDeserializationCluster : public DeserializationCluster {
  public:
-  RODataDeserializationCluster() : DeserializationCluster("ROData") {}
+  explicit RODataDeserializationCluster(intptr_t cid)
+      : DeserializationCluster("ROData"), cid_(cid) {}
   ~RODataDeserializationCluster() {}
 
   void ReadAlloc(Deserializer* d, bool is_canonical) {
+    start_index_ = d->next_index();
     intptr_t count = d->ReadUnsigned();
     uint32_t running_offset = 0;
     for (intptr_t i = 0; i < count; i++) {
       running_offset += d->ReadUnsigned() << kObjectAlignmentLog2;
       d->AssignRef(d->GetObjectAt(running_offset));
     }
+    stop_index_ = d->next_index();
   }
 
   void ReadFill(Deserializer* d, bool is_canonical) {
     // No-op.
   }
+
+  void PostLoad(Deserializer* d, const Array& refs, bool is_canonical) {
+    if (is_canonical && IsStringClassId(cid_) &&
+        (d->isolate() != Dart::vm_isolate())) {
+      CanonicalStringSet table(d->zone(),
+                               d->isolate()->object_store()->symbol_table());
+      String& str = String::Handle(d->zone());
+      for (intptr_t i = start_index_; i < stop_index_; i++) {
+        str ^= refs.At(i);
+        ASSERT(str.IsCanonical());
+        bool present = table.Insert(str);
+        ASSERT(!present);
+      }
+      d->isolate()->object_store()->set_symbol_table(table.Release());
+    }
+  }
+
+ private:
+  const intptr_t cid_;
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -5499,6 +5521,14 @@
       return "CodeSourceMap";
     case kCompressedStackMapsCid:
       return "CompressedStackMaps";
+    case kOneByteStringCid:
+      return current_loading_unit_id_ <= LoadingUnit::kRootId
+                 ? "OneByteStringCid"
+                 : nullptr;
+    case kTwoByteStringCid:
+      return current_loading_unit_id_ <= LoadingUnit::kRootId
+                 ? "TwoByteStringCid"
+                 : nullptr;
     default:
       return nullptr;
   }
@@ -5771,19 +5801,15 @@
     is_canonical = object->ptr()->IsCanonical();
   }
 
-  SerializationCluster* cluster =
-      is_canonical ? canonical_clusters_by_cid_[cid] : clusters_by_cid_[cid];
-  if (cluster == nullptr) {
-    cluster = NewClusterForClass(cid);
-    if (cluster == nullptr) {
+  SerializationCluster** cluster_ref =
+      is_canonical ? &canonical_clusters_by_cid_[cid] : &clusters_by_cid_[cid];
+  if (*cluster_ref == nullptr) {
+    *cluster_ref = NewClusterForClass(cid);
+    if (*cluster_ref == nullptr) {
       UnexpectedObject(object, "No serialization cluster defined");
     }
-    if (is_canonical) {
-      canonical_clusters_by_cid_[cid] = cluster;
-    } else {
-      clusters_by_cid_[cid] = cluster;
-    }
   }
+  SerializationCluster* cluster = *cluster_ref;
   ASSERT(cluster != nullptr);
 
 #if defined(SNAPSHOT_BACKTRACE)
@@ -6171,6 +6197,7 @@
                            intptr_t size,
                            const uint8_t* data_buffer,
                            const uint8_t* instructions_buffer,
+                           bool is_non_root_unit,
                            intptr_t offset)
     : ThreadStackResource(thread),
       heap_(thread->isolate()->heap()),
@@ -6183,7 +6210,8 @@
       previous_text_offset_(0),
       canonical_clusters_(nullptr),
       clusters_(nullptr),
-      field_table_(thread->isolate()->field_table()) {
+      field_table_(thread->isolate()->field_table()),
+      is_non_root_unit_(is_non_root_unit) {
   if (Snapshot::IncludesCode(kind)) {
     ASSERT(instructions_buffer != nullptr);
     ASSERT(data_buffer != nullptr);
@@ -6218,7 +6246,13 @@
       case kPcDescriptorsCid:
       case kCodeSourceMapCid:
       case kCompressedStackMapsCid:
-        return new (Z) RODataDeserializationCluster();
+        return new (Z) RODataDeserializationCluster(cid);
+      case kOneByteStringCid:
+      case kTwoByteStringCid:
+        if (!is_non_root_unit_) {
+          return new (Z) RODataDeserializationCluster(cid);
+        }
+        break;
     }
   }
 
@@ -7076,7 +7110,8 @@
   }
 
   Deserializer deserializer(thread_, kind_, buffer_, size_, data_image_,
-                            instructions_image_, offset);
+                            instructions_image_, /*is_non_root_unit=*/false,
+                            offset);
   ApiErrorPtr api_error = deserializer.VerifyImageAlignment();
   if (api_error != ApiError::null()) {
     return api_error;
@@ -7116,7 +7151,8 @@
   }
 
   Deserializer deserializer(thread_, kind_, buffer_, size_, data_image_,
-                            instructions_image_, offset);
+                            instructions_image_, /*is_non_root_unit=*/false,
+                            offset);
   ApiErrorPtr api_error = deserializer.VerifyImageAlignment();
   if (api_error != ApiError::null()) {
     return api_error;
@@ -7149,8 +7185,9 @@
     return ConvertToApiError(error);
   }
 
-  Deserializer deserializer(thread_, kind_, buffer_, size_, data_image_,
-                            instructions_image_, offset);
+  Deserializer deserializer(
+      thread_, kind_, buffer_, size_, data_image_, instructions_image_,
+      /*is_non_root_unit=*/unit.id() != LoadingUnit::kRootId, offset);
   ApiErrorPtr api_error = deserializer.VerifyImageAlignment();
   if (api_error != ApiError::null()) {
     return api_error;
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index dbfa8d8..2632693 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -417,7 +417,7 @@
   }
 
  private:
-  static const char* ReadOnlyObjectType(intptr_t cid);
+  const char* ReadOnlyObjectType(intptr_t cid);
 
   Heap* heap_;
   Zone* zone_;
@@ -548,6 +548,7 @@
                intptr_t size,
                const uint8_t* data_buffer,
                const uint8_t* instructions_buffer,
+               bool is_non_root_unit,
                intptr_t offset = 0);
   ~Deserializer();
 
@@ -658,6 +659,7 @@
   DeserializationCluster** canonical_clusters_;
   DeserializationCluster** clusters_;
   FieldTable* field_table_;
+  const bool is_non_root_unit_;
 };
 
 #define ReadFromTo(obj, ...) d->ReadFromTo(obj, ##__VA_ARGS__);
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index bf0eb6a..a54be20 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1986,17 +1986,11 @@
   __ mov(R6, length_reg);  // Save the length register.
   if (cid == kOneByteStringCid) {
     // Untag length.
-    __ adds(length_reg, ZR, Operand(length_reg, ASR, kSmiTagSize));
+    __ SmiUntag(length_reg, length_reg);
   } else {
     // Untag length and multiply by element size -> no-op.
-    __ adds(length_reg, ZR, Operand(length_reg));
+    ASSERT(kSmiTagSize == 1);
   }
-  // If the length is 0 then we have to make the allocated size a bit bigger,
-  // otherwise the string takes up less space than an ExternalOneByteString,
-  // and cannot be externalized.  TODO(erikcorry): We should probably just
-  // return a static zero length string here instead.
-  // length <- (length != 0) ? length : (ZR + 1).
-  __ csinc(length_reg, length_reg, ZR, NE);
   const intptr_t fixed_size_plus_alignment_padding =
       target::String::InstanceSize() +
       target::ObjectAlignment::kObjectAlignment - 1;
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 9ee661c..816f2fc 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1943,18 +1943,11 @@
   __ pushq(RDI);                          // Preserve length.
   if (cid == kOneByteStringCid) {
     // Untag length.
-    __ sarq(RDI, Immediate(kSmiTagShift));
+    __ SmiUntag(RDI);
   } else {
     // Untag length and multiply by element size -> no-op.
-    __ testq(RDI, RDI);
+    ASSERT(kSmiTagSize == 1);
   }
-  // If the length is 0 then we have to make the allocated size a bit bigger,
-  // otherwise the string takes up less space than an ExternalOneByteString,
-  // and cannot be externalized.  TODO(erikcorry): We should probably just
-  // return a static zero length string here instead.
-  __ j(NOT_ZERO, &not_zero_length);
-  __ addq(RDI, Immediate(1));
-  __ Bind(&not_zero_length);
   const intptr_t fixed_size_plus_alignment_padding =
       target::String::InstanceSize() +
       target::ObjectAlignment::kObjectAlignment - 1;
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 223c76d..24bfa59 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -934,6 +934,10 @@
   return -kWordSize;
 }
 
+word String::InstanceSize(word payload_size) {
+  return RoundedAllocationSize(String::InstanceSize() + payload_size);
+}
+
 word OneByteString::NextFieldOffset() {
   return -kWordSize;
 }
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 4f53eda..7611669 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -702,6 +702,7 @@
   static word length_offset();
   static word InstanceSize();
   static word NextFieldOffset();
+  static word InstanceSize(word payload_size);
 };
 
 class OneByteString : public AllStatic {
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 5e640c3..d67906f 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -753,7 +753,10 @@
                                  const Instance& incoming_exception,
                                  const Instance& existing_stacktrace,
                                  const bool is_rethrow) {
-  DEBUG_ASSERT(thread->TopErrorHandlerIsExitFrame());
+  // SuspendLongJumpScope during Dart entry ensures that if a longjmp base is
+  // available, it is the innermost error handler. If one is available, so
+  // should jump there instead.
+  RELEASE_ASSERT(thread->long_jump_base() == nullptr);
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
 #if !defined(PRODUCT)
@@ -995,7 +998,10 @@
 void Exceptions::PropagateError(const Error& error) {
   ASSERT(!error.IsNull());
   Thread* thread = Thread::Current();
-  DEBUG_ASSERT(thread->TopErrorHandlerIsExitFrame());
+  // SuspendLongJumpScope during Dart entry ensures that if a longjmp base is
+  // available, it is the innermost error handler. If one is available, so
+  // should jump there instead.
+  RELEASE_ASSERT(thread->long_jump_base() == nullptr);
   Zone* zone = thread->zone();
   if (error.IsUnhandledException()) {
     // If the error object represents an unhandled exception, then
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 4e53de4..197e24f 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -271,6 +271,16 @@
       return compiler::target::Instructions::InstanceSize(
           Instructions::Size(raw_insns));
     }
+    case kOneByteStringCid: {
+      auto raw_str = String::RawCast(raw_object);
+      return compiler::target::String::InstanceSize(
+          String::LengthOf(raw_str) * OneByteString::kBytesPerElement);
+    }
+    case kTwoByteStringCid: {
+      auto raw_str = String::RawCast(raw_object);
+      return compiler::target::String::InstanceSize(
+          String::LengthOf(raw_str) * TwoByteString::kBytesPerElement);
+    }
     default: {
       const Class& clazz = Class::Handle(Object::Handle(raw_object).clazz());
       FATAL("Unsupported class %s in rodata section.\n", clazz.ToCString());
@@ -520,6 +530,24 @@
       ASSERT_EQUAL(stream->Position() - object_start,
                    compiler::target::PcDescriptors::HeaderSize());
       stream->WriteBytes(desc.raw()->ptr()->data(), desc.Length());
+    } else if (obj.IsString()) {
+      const String& str = String::Cast(obj);
+      RELEASE_ASSERT(String::GetCachedHash(str.raw()) != 0);
+      RELEASE_ASSERT(str.IsOneByteString() || str.IsTwoByteString());
+
+      stream->WriteTargetWord(static_cast<uword>(str.raw()->ptr()->length_));
+#if !defined(HASH_IN_OBJECT_HEADER)
+      stream->WriteTargetWord(static_cast<uword>(str.raw()->ptr()->hash_));
+#endif
+      ASSERT_EQUAL(stream->Position() - object_start,
+                   compiler::target::String::InstanceSize());
+      stream->WriteBytes(
+          str.IsOneByteString()
+              ? static_cast<const void*>(OneByteString::DataStart(str))
+              : static_cast<const void*>(TwoByteString::DataStart(str)),
+          str.Length() * (str.IsOneByteString()
+                              ? OneByteString::kBytesPerElement
+                              : TwoByteString::kBytesPerElement));
     } else {
       const Class& clazz = Class::Handle(obj.clazz());
       FATAL("Unsupported class %s in rodata section.\n", clazz.ToCString());
@@ -535,7 +563,9 @@
     ObjectLayout::OldAndNotRememberedBit::encode(true) |
     ObjectLayout::NewBit::encode(false);
 
-uword ImageWriter::GetMarkedTags(classid_t cid, intptr_t size) {
+uword ImageWriter::GetMarkedTags(classid_t cid,
+                                 intptr_t size,
+                                 bool is_canonical /* = false */) {
   // ObjectLayout::SizeTag expects a size divisible by kObjectAlignment and
   // checks this in debug mode, but the size on the target machine may not be
   // divisible by the host machine's object alignment if they differ.
@@ -554,7 +584,8 @@
                compiler::target::ObjectAlignment::kObjectAlignmentLog2);
 
   return kReadOnlyGCBits | ObjectLayout::ClassIdTag::encode(cid) |
-         ObjectLayout::SizeTag::encode(adjusted_size);
+         ObjectLayout::SizeTag::encode(adjusted_size) |
+         ObjectLayout::CanonicalBit::encode(is_canonical);
 }
 
 uword ImageWriter::GetMarkedTags(const Object& obj) {
@@ -562,7 +593,8 @@
 #if defined(HASH_IN_OBJECT_HEADER)
       static_cast<uword>(obj.raw()->ptr()->hash_) << kBitsPerInt32 |
 #endif
-      GetMarkedTags(obj.raw()->GetClassId(), SizeInSnapshot(obj));
+      GetMarkedTags(obj.raw()->GetClassId(), SizeInSnapshot(obj),
+                    obj.IsCanonical());
 }
 
 const char* ImageWriter::SectionSymbol(ProgramSection section, bool vm) const {
diff --git a/runtime/vm/image_snapshot.h b/runtime/vm/image_snapshot.h
index 060f3a9..cc5ac6d 100644
--- a/runtime/vm/image_snapshot.h
+++ b/runtime/vm/image_snapshot.h
@@ -319,7 +319,9 @@
   // shared by both.
   const char* SectionSymbol(ProgramSection section, bool vm) const;
 
-  static uword GetMarkedTags(classid_t cid, intptr_t size);
+  static uword GetMarkedTags(classid_t cid,
+                             intptr_t size,
+                             bool is_canonical = false);
   static uword GetMarkedTags(const Object& obj);
 
   void DumpInstructionStats();
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index bc6666b..6a2bed1 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2600,16 +2600,19 @@
 
   uword address = heap->Allocate(size, space);
   if (UNLIKELY(address == 0)) {
-    if (thread->top_exit_frame_info() != 0) {
+    // SuspendLongJumpScope during Dart entry ensures that if a longjmp base is
+    // available, it is the innermost error handler, so check for a longjmp base
+    // before checking for an exit frame.
+    if (thread->long_jump_base() != nullptr) {
+      Report::LongJump(Object::out_of_memory_error());
+      UNREACHABLE();
+    } else if (thread->top_exit_frame_info() != 0) {
       // Use the preallocated out of memory exception to avoid calling
       // into dart code or allocating any code.
       const Instance& exception =
           Instance::Handle(thread->isolate()->object_store()->out_of_memory());
       Exceptions::Throw(thread, exception);
       UNREACHABLE();
-    } else if (thread->long_jump_base() != nullptr) {
-      Report::LongJump(Object::out_of_memory_error());
-      UNREACHABLE();
     } else {
       // Nowhere to propagate an exception to.
       OUT_OF_MEMORY();
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 1bd2be8..c489355 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -8578,6 +8578,8 @@
 #endif
   static const intptr_t kMaxElements = kSmiMax / kTwoByteChar;
 
+  static intptr_t HeaderSize() { return String::kSizeofRawString; }
+
   class CodePointIterator : public ValueObject {
    public:
     explicit CodePointIterator(const String& str)
@@ -8967,12 +8969,6 @@
   static intptr_t InstanceSize(intptr_t len) {
     ASSERT(sizeof(OneByteStringLayout) == String::kSizeofRawString);
     ASSERT(0 <= len && len <= kMaxElements);
-#if defined(HASH_IN_OBJECT_HEADER)
-    // We have to pad zero-length raw strings so that they can be externalized.
-    // If we don't pad, then the external string object does not fit in the
-    // memory allocated for the raw string.
-    if (len == 0) return InstanceSize(1);
-#endif
     return String::RoundedAllocationSize(UnroundedSize(len));
   }
 
@@ -9061,11 +9057,12 @@
                                    bool as_reference);
 
   friend class Class;
-  friend class String;
-  friend class Symbols;
   friend class ExternalOneByteString;
+  friend class ImageWriter;
   friend class SnapshotReader;
+  friend class String;
   friend class StringHasher;
+  friend class Symbols;
   friend class Utf8;
 };
 
@@ -9097,7 +9094,6 @@
   static intptr_t data_offset() {
     return OFFSET_OF_RETURNED_VALUE(TwoByteStringLayout, data);
   }
-
   static intptr_t UnroundedSize(TwoByteStringPtr str) {
     return UnroundedSize(Smi::Value(str->ptr()->length_));
   }
@@ -9112,10 +9108,6 @@
   static intptr_t InstanceSize(intptr_t len) {
     ASSERT(sizeof(TwoByteStringLayout) == String::kSizeofRawString);
     ASSERT(0 <= len && len <= kMaxElements);
-    // We have to pad zero-length raw strings so that they can be externalized.
-    // If we don't pad, then the external string object does not fit in the
-    // memory allocated for the raw string.
-    if (len == 0) return InstanceSize(1);
     return String::RoundedAllocationSize(UnroundedSize(len));
   }
 
@@ -9187,9 +9179,10 @@
                                    bool as_reference);
 
   friend class Class;
+  friend class ImageWriter;
+  friend class SnapshotReader;
   friend class String;
   friend class StringHasher;
-  friend class SnapshotReader;
   friend class Symbols;
 };
 
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
index 03b8132..d862534 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
@@ -107,7 +107,11 @@
 @JSExportName('implements')
 final implements_ = JS('', 'Symbol("implements")');
 
-List? Function() getImplements(clazz) => JS(
+/// Either `null` if `clazz` doesn't directly implement any interfaces or a
+/// list of type objects if it does.  Note, indirectly (e.g., via superclass)
+/// implemented interfaces aren't included here.
+/// See compiler.dart for when/how it is emitted.
+List Function()? getImplements(clazz) => JS(
     '',
     'Object.hasOwnProperty.call(#, #) ? #[#] : null',
     clazz,
@@ -164,6 +168,29 @@
     // as a FutureOr because it is equal to 'async.FutureOr` (in the JS).
     JS('!', '#[#] = #', genericType, _originalDeclaration, normalize);
     JS('!', '#(#)', addTypeCaches, genericType);
+    // Add FutureOr specific is and as methods.
+    is_FutureOr(obj) =>
+        JS<bool>('!', '#.is(#)', typeArg, obj) ||
+        JS<bool>('!', '#(#).is(#)', getGenericClass(Future), typeArg, obj);
+    JS('!', '#.is = #', genericType, is_FutureOr);
+
+    as_FutureOr(obj) {
+      // Special test to handle case for mixed mode non-nullable FutureOr of a
+      // legacy type. This allows casts like `null as FutureOr<int*>` to work
+      // in weak and sound mode.
+      if (obj == null && _jsInstanceOf(typeArg, LegacyType)) {
+        return obj;
+      }
+
+      if (JS<bool>('!', '#.is(#)', typeArg, obj) ||
+          JS<bool>('!', '#(#).is(#)', getGenericClass(Future), typeArg, obj)) {
+        return obj;
+      }
+      return cast(obj, JS('!', '#(#)', getGenericClass(FutureOr), typeArg));
+    }
+
+    JS('!', '#.as = #', genericType, as_FutureOr);
+
     return genericType;
   }
 
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index b6a0325..bac9226 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -2045,7 +2045,7 @@
   // Check interfaces.
   var getInterfaces = getImplements(subtype);
   if (getInterfaces != null) {
-    for (var iface in getInterfaces()!) {
+    for (var iface in getInterfaces()) {
       result = _getMatchingSupertype(iface, supertype);
       if (result != null) return result;
     }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/debugger.dart b/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
index f77d5c3..1f9e933 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
@@ -264,7 +264,7 @@
   final List types;
 }
 
-Object safeGetProperty(Object protoChain, Object name) {
+Object? safeGetProperty(Object protoChain, Object name) {
   try {
     return JSNative.getProperty(protoChain, name);
   } catch (e) {
@@ -609,7 +609,7 @@
     for (var name in getOwnPropertyNames(object)) {
       var value = safeGetProperty(object, name);
       children.add(NameValuePair(
-          name: name, value: Library(name, value), hideName: true));
+          name: name, value: Library(name, value!), hideName: true));
     }
     return children.toList();
   }
@@ -907,10 +907,10 @@
   bool accept(object, config) => config == JsonMLConfig.asClass;
 
   String preview(type) {
-    var implements = dart.getImplements(type)();
+    var implements = dart.getImplements(type);
     var typeName = getTypeName(type);
     if (implements != null) {
-      var typeNames = implements.map(getTypeName);
+      var typeNames = implements().map(getTypeName);
       return '${typeName} implements ${typeNames.join(", ")}';
     } else {
       return typeName;
diff --git a/tests/dartdevc/debugger/debugger_test.dart b/tests/dartdevc/debugger/debugger_test.dart
index 3765d6b..79b12a1 100644
--- a/tests/dartdevc/debugger/debugger_test.dart
+++ b/tests/dartdevc/debugger/debugger_test.dart
@@ -81,7 +81,7 @@
   return value;
 }
 
-String format(value) {
+String? format(value) {
   // Avoid double-escaping strings.
   if (value is String) return value;
   return stringify(value, allowInterop(replacer), 4);
@@ -90,8 +90,8 @@
 class FormattedObject {
   FormattedObject(this.object, this.config);
 
-  Object object;
-  Object config;
+  Object? object;
+  Object? config;
 }
 
 /// Extract all object tags from a json ml expression to enable
@@ -130,14 +130,14 @@
   var goldenUrl = '/root_dart/tests/dartdevc_2/debugger/'
       'debugger_test_golden.txt?cacheBlock=$cacheBlocker';
 
-  String golden;
+  String? golden;
   try {
     golden = (await HttpRequest.getString(goldenUrl)).trim();
   } catch (e) {
     print("Warning: couldn't load golden file from $goldenUrl");
   }
 
-  document.body.append(new ScriptElement()
+  document.body!.append(new ScriptElement()
     ..type = 'text/javascript'
     ..innerHtml = r"""
 window.ExampleJSClass = function ExampleJSClass(x) {
@@ -333,16 +333,16 @@
       print(helpMessage);
       // Copy text to clipboard on page click. We can't copy to the clipboard
       // without a click due to Chrome security.
-      TextAreaElement textField = new Element.tag('textarea');
+      var textField = new Element.tag('textarea') as TextAreaElement;
       textField.maxLength = 100000000;
       textField.text = actualStr;
       textField.style
         ..width = '800px'
         ..height = '400px';
-      document.body.append(new Element.tag('h3')
+      document.body!.append(new Element.tag('h3')
         ..innerHtml = helpMessage.replaceAll('\n', '<br>'));
-      document.body.append(textField);
-      document.body.onClick.listen((_) {
+      document.body!.append(textField);
+      document.body!.onClick.listen((_) {
         textField.select();
         var result = document.execCommand('copy');
         if (result) {
@@ -352,6 +352,12 @@
         }
       });
     }
-    expect(actualStr == golden, isTrue);
+    // TODO(vsm): This comparison appears to be badly broken for several
+    // reasons:
+    //   (1) The golden file isn't properly read on the bots or locally (see try
+    //       / catch above).
+    //   (2) The actual string appears to vary locally vs on the bots.
+    //   (3) Because of (2), visualizing the diff is difficult.
+    // expect(actualStr == golden, isTrue);
   });
 }
diff --git a/tests/dartdevc_2/debugger/debugger_test.dart b/tests/dartdevc_2/debugger/debugger_test.dart
index 94d4a63..062088f 100644
--- a/tests/dartdevc_2/debugger/debugger_test.dart
+++ b/tests/dartdevc_2/debugger/debugger_test.dart
@@ -354,6 +354,12 @@
         }
       });
     }
-    expect(actualStr == golden, isTrue);
+    // TODO(vsm): This comparison appears to be badly broken for several
+    // reasons:
+    //   (1) The golden file isn't properly read on the bots or locally (see try
+    //       / catch above).
+    //   (2) The actual string appears to vary locally vs on the bots.
+    //   (3) Because of (2), visualizing the diff is difficult.
+    // expect(actualStr == golden, isTrue);
   });
 }
diff --git a/tests/dartdevc_2/debugger/debugger_test_golden.txt b/tests/dartdevc_2/debugger/debugger_test_golden.txt
index 0b12aa0..80f211d 100644
--- a/tests/dartdevc_2/debugger/debugger_test_golden.txt
+++ b/tests/dartdevc_2/debugger/debugger_test_golden.txt
@@ -108,9 +108,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -227,9 +225,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -291,9 +287,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -319,9 +313,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -347,9 +339,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -375,9 +365,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -403,9 +391,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -431,9 +417,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -459,9 +443,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -487,9 +469,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -515,9 +495,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -543,9 +521,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -571,9 +547,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -599,9 +573,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -627,9 +599,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -655,9 +625,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -683,9 +651,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -711,9 +677,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -739,9 +703,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -767,9 +729,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -795,9 +755,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -823,9 +781,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -851,9 +807,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -879,9 +833,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -907,9 +859,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -935,9 +885,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -963,9 +911,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -991,9 +937,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1019,9 +963,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1047,9 +989,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1075,9 +1015,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1103,9 +1041,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1131,9 +1067,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1159,9 +1093,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1187,9 +1119,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1215,9 +1145,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1243,9 +1171,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1271,9 +1197,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1299,9 +1223,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1327,9 +1249,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1355,9 +1275,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1383,9 +1301,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1411,9 +1327,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1439,9 +1353,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1467,9 +1379,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1495,9 +1405,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1523,9 +1431,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1551,9 +1457,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1579,9 +1483,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1607,9 +1509,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1635,9 +1535,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1663,9 +1561,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1691,9 +1587,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1719,9 +1613,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1747,9 +1639,33 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_setLengthUnsafe: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -1775,9 +1691,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1815,9 +1729,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1836,9 +1748,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1864,9 +1774,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1928,9 +1836,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1956,9 +1862,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -1984,9 +1888,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2012,9 +1914,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2040,9 +1940,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2068,9 +1966,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2096,9 +1992,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2124,9 +2018,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2152,9 +2044,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2180,9 +2070,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2208,9 +2096,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2236,9 +2122,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2264,9 +2148,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2292,9 +2174,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2320,9 +2200,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2348,9 +2226,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2376,9 +2252,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2404,9 +2278,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2432,9 +2304,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2460,9 +2330,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2488,9 +2356,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2516,9 +2382,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2544,9 +2408,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2572,9 +2434,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2600,9 +2460,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2628,9 +2486,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2656,9 +2512,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2684,9 +2538,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2712,9 +2564,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2740,9 +2590,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2768,9 +2616,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2796,9 +2642,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2824,9 +2668,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2852,9 +2694,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2880,9 +2720,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2908,9 +2746,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2936,9 +2772,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2964,9 +2798,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -2992,9 +2824,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3020,9 +2850,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3048,9 +2876,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3076,9 +2902,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3104,9 +2928,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3132,9 +2954,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3160,9 +2980,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3188,9 +3006,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3216,9 +3032,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3244,9 +3058,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3272,9 +3084,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3300,9 +3110,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3328,9 +3136,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3356,9 +3162,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3384,9 +3188,33 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_setLengthUnsafe: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -3412,9 +3240,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3531,9 +3357,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3584,7 +3408,7 @@
             {
                 "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
             },
-            "elementAt: "
+            "fold: "
         ],
         [
             "span",
@@ -3595,9 +3419,33 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "map: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -3623,9 +3471,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3742,9 +3588,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3806,37 +3650,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "addAll: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3862,9 +3676,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3890,9 +3702,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3918,9 +3728,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3946,9 +3754,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -3974,9 +3780,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4002,9 +3806,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4049,9 +3851,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4077,9 +3877,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4105,9 +3903,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4133,9 +3929,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4180,9 +3974,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4208,9 +4000,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4236,9 +4026,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4264,9 +4052,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4317,34 +4103,6 @@
             {
                 "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
             },
-            "addAll: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
             "clear: "
         ],
         [
@@ -4356,37 +4114,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "putIfAbsent: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4412,9 +4140,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4440,9 +4166,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4468,9 +4192,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4496,9 +4218,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4567,9 +4287,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "skipDart"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4638,9 +4356,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "skipDart"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4708,9 +4424,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4736,9 +4450,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4814,9 +4526,121 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": ""
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -4861,9 +4685,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -4889,93 +4711,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "devtoolsFormatters: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "replacer: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "format: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5001,9 +4737,59 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "replacer: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "format: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -5029,9 +4815,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5057,9 +4841,2269 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "devtoolsFormatters: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ]
+]
+-----------------------------------
+Test: Test library Module child 1 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 1 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    },
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "JS: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Anonymous: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "anonymous: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ]
+]
+-----------------------------------
+Test: Test library Module child 2 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 2 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    }
+]
+-----------------------------------
+Test: Test library Module child 3 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 3 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    },
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Group: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Expectation: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "finishTests: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "group: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "test: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "setUp: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "tearDown: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "expect: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "fail: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "equals: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "notEquals: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "unorderedEquals: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "predicate: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "inInclusiveRange: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "greaterThan: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "same: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "closeTo: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "anyOf: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_defaultAction: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_groups: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isFalse: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isNotNull: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isNull: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isTrue: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "returnsNormally: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throws: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throwsArgumentError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throwsNoSuchMethodError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throwsRangeError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throwsStateError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "throwsUnsupportedError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ]
+]
+-----------------------------------
+Test: Test library Module child 4 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 4 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    },
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "Expect: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "ExpectException: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_identical: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
+                "isWeakMode: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                "true"
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
+                "isStrongMode: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                "false"
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
+                "typeAssertionsEnabled: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                "true"
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
+                "assertStatementsEnabled: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                "true"
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
+                "checkedModeEnabled: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                "true"
+            ]
+        ]
+    ]
+]
+-----------------------------------
+Test: Test library Module child 5 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 5 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    },
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "Immutable: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "Required: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_AlwaysThrows: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Checked: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_DoNotStore: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Experimental: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Factory: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Internal: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_IsTest: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_IsTestGroup: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Literal: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_MustCallSuper: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_NonVirtual: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_OptionalTypeArgs: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Protected: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Sealed: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_Virtual: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_VisibleForOverriding: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "_VisibleForTesting: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "alwaysThrows: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "checked: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "doNotStore: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "experimental: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "factory: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "immutable: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "internal: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isTest: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "isTestGroup: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "literal: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "mustCallSuper: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "nonVirtual: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "optionalTypeArgs: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "protected: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "required: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "sealed: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "virtual: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "visibleForOverriding: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "visibleForTesting: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ]
+]
+-----------------------------------
+Test: Test library Module child 6 formatting header
+Value:
+[
+    "span",
+    {
+        "style": "background-color: #d9edf7;color: black"
+    },
+    "<FILE>"
+]
+-----------------------------------
+Test: Test library Module child 6 formatting body
+Value:
+[
+    "ol",
+    {
+        "style": "list-style-type: none;padding-left: 0px;margin-top: 0px;margin-bottom: 0px;margin-left: 12px;"
+    },
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "Target: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "TargetKind: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -5443,9 +7487,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5495,9 +7537,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5547,9 +7587,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5611,9 +7649,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5639,9 +7675,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5667,9 +7701,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5695,9 +7727,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5723,9 +7753,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -5756,6 +7784,240 @@
         },
         [
             "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "on: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onAbort: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onError: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onLoad: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onLoadEnd: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onLoadStart: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onProgress: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onReadyStateChange: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "onTimeout: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
             {},
             [
                 "span",
@@ -5786,6 +8048,56 @@
                 {
                     "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
                 },
+                "response: "
+            ],
+            [
+                "span",
+                {
+                    "style": "margin-left: 13px"
+                },
+                ""
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "responseHeaders: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {},
+            [
+                "span",
+                {
+                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+                },
                 "responseText: "
             ],
             [
@@ -5866,9 +8178,33 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
+                }
+            ]
+        ]
+    ],
+    [
+        "li",
+        {
+            "style": "padding-left: 13px;"
+        },
+        [
+            "span",
+            {
+                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
+            },
+            "runtimeType: "
+        ],
+        [
+            "span",
+            {
+                "style": "margin-left: 13px"
+            },
+            [
+                "object",
+                {
+                    "object": "<OBJECT>",
+                    "config": {}
                 }
             ]
         ]
@@ -5966,9 +8302,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6031,338 +8365,6 @@
             {
                 "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
             },
-            "on: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onAbort: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onError: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onLoad: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onLoadEnd: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onLoadStart: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onProgress: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onReadyStateChange: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "onTimeout: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {},
-            [
-                "span",
-                {
-                    "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-                },
-                "response: "
-            ],
-            [
-                "span",
-                {
-                    "style": "margin-left: 13px"
-                },
-                ""
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "responseHeaders: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
-            "runtimeType: "
-        ],
-        [
-            "span",
-            {
-                "style": "margin-left: 13px"
-            },
-            [
-                "object",
-                {
-                    "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
-                }
-            ]
-        ]
-    ],
-    [
-        "li",
-        {
-            "style": "padding-left: 13px;"
-        },
-        [
-            "span",
-            {
-                "style": "background-color: thistle; color: rgb(136, 19, 145); margin-right: -13px"
-            },
             "[[class]]: "
         ],
         [
@@ -6374,9 +8376,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6438,9 +8438,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6466,9 +8464,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6494,9 +8490,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6522,9 +8516,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6550,9 +8542,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6578,9 +8568,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6606,9 +8594,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6634,9 +8620,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6705,9 +8689,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6733,9 +8715,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6797,9 +8777,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6825,9 +8803,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6853,9 +8829,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6881,9 +8855,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6928,9 +8900,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6956,9 +8926,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -6984,9 +8952,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -7048,9 +9014,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -7076,9 +9040,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -7104,9 +9066,7 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "none"
-                    }
+                    "config": {}
                 }
             ]
         ]
@@ -7132,12 +9092,10 @@
                 "object",
                 {
                     "object": "<OBJECT>",
-                    "config": {
-                        "name": "asClass"
-                    }
+                    "config": {}
                 }
             ]
         ]
     ]
 ]
------------------------------------
+-----------------------------------
\ No newline at end of file
diff --git a/tests/lib/wasm/fn_import_exception_test.dart b/tests/lib/wasm/fn_import_exception_test.dart
index 73298d9..c97a68a 100644
--- a/tests/lib/wasm/fn_import_exception_test.dart
+++ b/tests/lib/wasm/fn_import_exception_test.dart
@@ -5,43 +5,44 @@
 // Test throwing exceptions from an imported function.
 
 import "package:expect/expect.dart";
-import "dart:wasm";
+import "package:wasm/wasm.dart";
 import "dart:typed_data";
 
 void main() {
-  // int64_t fn(int64_t x) { return throwIfNegative(x); }
+  // void fn() {
+  //   a();
+  //   b();
+  // }
   var data = Uint8List.fromList([
-    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
-    0x01, 0x7e, 0x01, 0x7e, 0x02, 0x17, 0x01, 0x03, 0x65, 0x6e, 0x76, 0x0f,
-    0x74, 0x68, 0x72, 0x6f, 0x77, 0x49, 0x66, 0x4e, 0x65, 0x67, 0x61, 0x74,
-    0x69, 0x76, 0x65, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0x04, 0x05, 0x01,
-    0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01,
-    0x7f, 0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07, 0x0f, 0x02, 0x06, 0x6d,
-    0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02, 0x66, 0x6e, 0x00, 0x01,
-    0x0a, 0x0c, 0x01, 0x0a, 0x00, 0x20, 0x00, 0x10, 0x80, 0x80, 0x80, 0x80,
-    0x00, 0x0b,
+    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x60,
+    0x00, 0x00, 0x02, 0x11, 0x02, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x61, 0x00,
+    0x00, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x62, 0x00, 0x00, 0x03, 0x02, 0x01,
+    0x00, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00,
+    0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07,
+    0x0f, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02,
+    0x66, 0x6e, 0x00, 0x02, 0x0a, 0x10, 0x01, 0x0e, 0x00, 0x10, 0x80, 0x80,
+    0x80, 0x80, 0x00, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x0b,
   ]);
 
-  dynamic override = null;
-  var inst = WasmModule(data).instantiate(WasmImports()
-    ..addMemory("env", "memory", WasmMemory(256, 1024))
-    ..addGlobal<Int32>("env", "__memory_base", 1024, false)
-    ..addFunction<Int64 Function(Int64)>("env", "throwIfNegative", (int x) {
-      if (x < 0) {
-        throw Exception(x);
-      }
-      if (override != null) {
-        return override;
-      }
-      return x;
-    }));
-  var fn = inst.lookupFunction<Int64 Function(Int64)>("fn");
+  bool called_b = false;
+  var thrownException = Exception("Hello exception!");
+  var inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+    throw thrownException;
+  }).addFunction("env", "b", () {
+    called_b = true;
+  }).build();
+  var fn = inst.lookupFunction("fn");
+  Expect.throws(() => fn(), (Exception e) => e == thrownException);
+  Expect.isFalse(called_b);
 
-  Expect.equals(123, fn.call([123]));
-  Expect.throws(() => fn.call([-456]), (Exception e) => "$e".contains("-456"));
-
-  override = "Not an integer";
-  Expect.throwsArgumentError(() => fn.call([789]));
-  override = 0.123;
-  Expect.throwsArgumentError(() => fn.call([789]));
+  bool called_a = false;
+  inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+    called_a = true;
+  }).addFunction("env", "b", () {
+    called_b = true;
+  }).build();
+  fn = inst.lookupFunction("fn");
+  fn();
+  Expect.isTrue(called_a);
+  Expect.isTrue(called_b);
 }
diff --git a/tests/lib_2/wasm/fn_import_exception_test.dart b/tests/lib_2/wasm/fn_import_exception_test.dart
index 73298d9..c97a68a 100644
--- a/tests/lib_2/wasm/fn_import_exception_test.dart
+++ b/tests/lib_2/wasm/fn_import_exception_test.dart
@@ -5,43 +5,44 @@
 // Test throwing exceptions from an imported function.
 
 import "package:expect/expect.dart";
-import "dart:wasm";
+import "package:wasm/wasm.dart";
 import "dart:typed_data";
 
 void main() {
-  // int64_t fn(int64_t x) { return throwIfNegative(x); }
+  // void fn() {
+  //   a();
+  //   b();
+  // }
   var data = Uint8List.fromList([
-    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
-    0x01, 0x7e, 0x01, 0x7e, 0x02, 0x17, 0x01, 0x03, 0x65, 0x6e, 0x76, 0x0f,
-    0x74, 0x68, 0x72, 0x6f, 0x77, 0x49, 0x66, 0x4e, 0x65, 0x67, 0x61, 0x74,
-    0x69, 0x76, 0x65, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0x04, 0x05, 0x01,
-    0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01,
-    0x7f, 0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07, 0x0f, 0x02, 0x06, 0x6d,
-    0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02, 0x66, 0x6e, 0x00, 0x01,
-    0x0a, 0x0c, 0x01, 0x0a, 0x00, 0x20, 0x00, 0x10, 0x80, 0x80, 0x80, 0x80,
-    0x00, 0x0b,
+    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x60,
+    0x00, 0x00, 0x02, 0x11, 0x02, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x61, 0x00,
+    0x00, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x62, 0x00, 0x00, 0x03, 0x02, 0x01,
+    0x00, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00,
+    0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07,
+    0x0f, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02,
+    0x66, 0x6e, 0x00, 0x02, 0x0a, 0x10, 0x01, 0x0e, 0x00, 0x10, 0x80, 0x80,
+    0x80, 0x80, 0x00, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x0b,
   ]);
 
-  dynamic override = null;
-  var inst = WasmModule(data).instantiate(WasmImports()
-    ..addMemory("env", "memory", WasmMemory(256, 1024))
-    ..addGlobal<Int32>("env", "__memory_base", 1024, false)
-    ..addFunction<Int64 Function(Int64)>("env", "throwIfNegative", (int x) {
-      if (x < 0) {
-        throw Exception(x);
-      }
-      if (override != null) {
-        return override;
-      }
-      return x;
-    }));
-  var fn = inst.lookupFunction<Int64 Function(Int64)>("fn");
+  bool called_b = false;
+  var thrownException = Exception("Hello exception!");
+  var inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+    throw thrownException;
+  }).addFunction("env", "b", () {
+    called_b = true;
+  }).build();
+  var fn = inst.lookupFunction("fn");
+  Expect.throws(() => fn(), (Exception e) => e == thrownException);
+  Expect.isFalse(called_b);
 
-  Expect.equals(123, fn.call([123]));
-  Expect.throws(() => fn.call([-456]), (Exception e) => "$e".contains("-456"));
-
-  override = "Not an integer";
-  Expect.throwsArgumentError(() => fn.call([789]));
-  override = 0.123;
-  Expect.throwsArgumentError(() => fn.call([789]));
+  bool called_a = false;
+  inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+    called_a = true;
+  }).addFunction("env", "b", () {
+    called_b = true;
+  }).build();
+  fn = inst.lookupFunction("fn");
+  fn();
+  Expect.isTrue(called_a);
+  Expect.isTrue(called_b);
 }
diff --git a/tools/VERSION b/tools/VERSION
index de6f628..f971f7f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 13
+PRERELEASE 14
 PRERELEASE_PATCH 0
\ No newline at end of file