library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method main() → dynamic {
  core::List<core::int> list1 = core::_GrowableList::_literal1<core::int>(0);
  core::List<core::int?> list2 = core::_GrowableList::_literal1<core::int?>(0);
  dynamic list3 = core::_GrowableList::_literal1<core::int>(0);
  core::List<core::int?> list = block {
    final core::List<core::int?> #t1 = core::_GrowableList::_literal1<core::int?>(0);
    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int?>) → void};
    #t1.{core::List::addAll}{Invariant}(list2){(core::Iterable<core::int?>) → void};
    {
      core::Iterator<dynamic> :sync-for-iterator = (list3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int? #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int?;
          #t1.{core::List::add}{Invariant}(#t3){(core::int?) → void};
        }
      }
    }
    if(true)
      #t1.{core::List::add}{Invariant}(2){(core::int?) → void};
  } =>#t1;
  core::Set<core::int> set1 = block {
    final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
    #t4.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
  } =>#t4;
  core::Set<core::int?> set2 = block {
    final core::Set<core::int?> #t5 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t5.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
  } =>#t5;
  dynamic set3 = block {
    final core::Set<core::int> #t6 = new col::_CompactLinkedHashSet::•<core::int>();
    #t6.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
  } =>#t6;
  core::Set<core::int?> set = block {
    final core::Set<core::int?> #t7 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t7.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
    #t7.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int?>) → void};
    #t7.{core::Set::addAll}{Invariant}(set2){(core::Iterable<core::int?>) → void};
    {
      core::Iterator<dynamic> :sync-for-iterator = (set3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int? #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int?;
          #t7.{core::Set::add}{Invariant}(#t9){(core::int?) → core::bool};
        }
      }
    }
    if(true)
      #t7.{core::Set::add}{Invariant}(2){(core::int?) → core::bool};
  } =>#t7;
  core::Map<core::int, core::String> map1 = <core::int, core::String>{0: "foo"};
  core::Map<core::int?, core::String?> map2 = <core::int?, core::String?>{0: "bar"};
  dynamic map3 = <core::int, core::String>{0: "baz"};
  core::Map<core::int?, core::String?> map = block {
    final core::Map<core::int?, core::String?> #t10 = <core::int?, core::String?>{};
    #t10.{core::Map::[]=}{Invariant}(0, "foo"){(core::int?, core::String?) → void};
    {
      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int?, core::String?> #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{core::int?}, #t11.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
      }
    }
    {
      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int?, core::String?> #t12 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
        #t10.{core::Map::[]=}{Invariant}(#t12.{core::MapEntry::key}{core::int?}, #t12.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
      }
    }
    {
      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = (map3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<dynamic, dynamic> #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
        {
          final core::int? #t14 = #t13.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
          final core::String? #t15 = #t13.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::String?;
          #t10.{core::Map::[]=}{Invariant}(#t14, #t15){(core::int?, core::String?) → void};
        }
      }
    }
    if(true)
      #t10.{core::Map::[]=}{Invariant}(2, "baz"){(core::int?, core::String?) → void};
  } =>#t10;
}
