Issue #1202: i-2-b tests updated: Issue tags added, needless dynamic tests removed.
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t03.dart
deleted file mode 100644
index 54d05cc..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t03.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef
-/// X extends A<X>> = X Function(X)] (invariant)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>> = X Function(X);
-typedef G_expected = A<dynamic> Function(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t04.dart
deleted file mode 100644
index 42a7da6..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t04.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef
-/// X extends A<X>> = X Function(X)] (not used)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>> = void Function();
-typedef G_expected = void Function();
-
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t05.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t05.dart
deleted file mode 100644
index 8627df2..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t05.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef
-/// X extends A<X>> = X Function(X)] (covariant)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>> = void Function<Y extends X>();
-
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t08.dart
deleted file mode 100644
index bdcb987..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t08.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [class A<X
-/// extends A<X>>], [typedef G<X extends A<X>> = X Function()] (invariant)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X extends A<X>> {}
-typedef G<X extends A<X>> = X Function(X);
-
-typedef G_expected = A<dynamic> Function(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t09.dart
deleted file mode 100644
index 8b6a406..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t09.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [class A<X
-/// extends A<X>>], [typedef G<X extends A<X>> = void Function()] (unused)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X extends A<X>> {}
-typedef G<X extends A<X>> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t10.dart
deleted file mode 100644
index bd42967..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l1_t10.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [class A<X
-/// extends A<X>>], [typedef G<X extends A<X>> = void Function<Y extends X>()]
-/// (invariant)
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X extends A<X>> {}
-typedef G<X extends A<X>> = void Function<Y extends X>();
-
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t01.dart
deleted file mode 100644
index c4925e1..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t01.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = X
-/// Function(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = X Function(Y);
-typedef G_expected = A<dynamic> Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t02.dart
deleted file mode 100644
index 5d4ba7c..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t02.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = Y
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = Y Function(X);
-typedef G_expected = A<dynamic> Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t03.dart
deleted file mode 100644
index bc0c13b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t03.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = X
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = X Function(X, Y);
-typedef G_expected = A<dynamic> Function(A<dynamic>, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t04.dart
deleted file mode 100644
index 0a9ccab..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t04.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = Y
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = Y Function(X, Y);
-typedef G_expected = A<dynamic> Function(A<Null>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t06.dart
deleted file mode 100644
index 27f2251..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t06.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = void
-/// Function<X, Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> =
-    void Function<X1 extends X, Y1 extends A<Y>>();
-
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<A<dynamic>>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t07.dart
deleted file mode 100644
index 6a25ae3..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t07.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X, Y>(X, Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X, Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t08.dart
deleted file mode 100644
index 08b368a..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t08.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<X, Y>(X))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> =
-    void Function<X1 extends X, Y1 extends Y>(X);
-
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t09.dart
deleted file mode 100644
index a0ae115..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t09.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<X, Y>(Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> =
-    void Function<X1 extends X, Y1 extends Y>(Y);
-
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t10.dart
deleted file mode 100644
index dacc023..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t10.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<X1 extends X>(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<X1 extends X>(Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t11.dart
deleted file mode 100644
index c40d92e..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t11.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<X1 extends X>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<X1 extends X>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<dynamic>, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t12.dart
deleted file mode 100644
index 927d641..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t12.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<Y1 extends Y>(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t13.dart
deleted file mode 100644
index f493aa1..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t13.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t14.dart
deleted file mode 100644
index 776987d..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t14.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function(X);
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t15.dart
deleted file mode 100644
index 85c2d77..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t15.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function(Y);
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t16.dart
deleted file mode 100644
index 7eb8465..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t16.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = X Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t17.dart
deleted file mode 100644
index 65b5941..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = Y Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t18.dart
deleted file mode 100644
index 76290e0..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t19.dart
deleted file mode 100644
index 6a6aeee..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t20.dart
deleted file mode 100644
index 9fb3853..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_01_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
-/// void Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t01.dart
deleted file mode 100644
index 78a8a34..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t01.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = X
-/// Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = X Function(Y);
-typedef G_expected = A<dynamic> Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t03.dart
deleted file mode 100644
index 7669bfb..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t03.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = X
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = X Function(X, Y);
-typedef G_expected = A<dynamic> Function(A<dynamic>, Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t06.dart
deleted file mode 100644
index 4c878e6..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t06.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X, Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X, Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t07.dart
deleted file mode 100644
index 6a25ae3..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t07.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X, Y>(X, Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X, Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t08.dart
deleted file mode 100644
index 29dbe78..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t08.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X, Y>(X))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X, Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t09.dart
deleted file mode 100644
index 36700a3..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t09.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X, Y>(Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X, Y1 extends Y>(Y);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t10.dart
deleted file mode 100644
index 8da9a40..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t10.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X1 extends X>(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X>(Y);
-typedef G_expected = void Function<X extends A<dynamic>>(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t11.dart
deleted file mode 100644
index 395b839..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t11.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X1 extends X>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<dynamic>, Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t14.dart
deleted file mode 100644
index 08a5117..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t14.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function(X)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function(X);
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t15.dart
deleted file mode 100644
index 649866a..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t15.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function(Y);
-typedef G_expected = void Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t16.dart
deleted file mode 100644
index 78a090b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t16.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = X Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t17.dart
deleted file mode 100644
index 63ecb6d..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = Y Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t18.dart
deleted file mode 100644
index 913646a..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t19.dart
deleted file mode 100644
index d1ec146..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t20.dart
deleted file mode 100644
index 3abe158..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_02_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
-/// Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<X>, Y extends X> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t02.dart
deleted file mode 100644
index 9dcdc6d..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t02.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = Y
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = Y Function(X);
-typedef G_expected = A<dynamic> Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t04.dart
deleted file mode 100644
index 44d8f43..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t04.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = Y
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = Y Function(X, Y);
-typedef G_expected = A<dynamic> Function(Null, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t06.dart
deleted file mode 100644
index 56e4549..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t06.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<Y>> = void
-/// Function<X1 extends X, Y1 extends Y>]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function<X1 extends X, Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t07.dart
deleted file mode 100644
index c5e1283..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t07.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<Y>> = void
-/// Function<X1 extends X, Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> =
-    void Function<X1 extends X, Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(
-    A<dynamic>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t08.dart
deleted file mode 100644
index 790a837..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t08.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<Y>> = void
-/// Function<X1 extends X, Y1 extends Y>(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> =
-    void Function<X1 extends X, Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(
-    A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t09.dart
deleted file mode 100644
index 9b2c85c..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t09.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<Y>> = void
-/// Function<X1 extends X, Y1 extends Y>(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> =
-    void Function<X1 extends X, Y1 extends Y>(Y);
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(
-    A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t12.dart
deleted file mode 100644
index f0b7648..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t12.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function<Y1 extends Y>(X)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function<Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>>(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t13.dart
deleted file mode 100644
index ddf09f6..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t13.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function<Y1 extends Y>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function<Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(Null, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t14.dart
deleted file mode 100644
index bdcdc12..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t14.dart
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function(X)]
-///
-/// [Y] is unused here, because the concept of being unused is one of the kinds
-/// of variance that each type parameter can have, and their variance is
-/// determined completely by their occurrences on the right hand side of [=] in
-/// the declaration (or the corresponding positions in an old style [typedef T
-/// f(...);]), and [Y] does not occur there. So any occurrence of a raw [G] is a
-/// compile-time error.
-///
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function(X);
-typedef G_expected = void Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t15.dart
deleted file mode 100644
index c8173dd..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t15.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function(Y);
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t16.dart
deleted file mode 100644
index c7648b0..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t16.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = X Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t17.dart
deleted file mode 100644
index 7ba931b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = Y Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t18.dart
deleted file mode 100644
index 7ba5540..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t19.dart
deleted file mode 100644
index 443fe07..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t20.dart
deleted file mode 100644
index d560b0c..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_03_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
-/// Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<Y>> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t01.dart
deleted file mode 100644
index bd66486..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t01.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = X
-/// Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = X Function(Y);
-typedef G_expected = A<dynamic> Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t02.dart
deleted file mode 100644
index caf779b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t02.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = Y
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = Y Function(X);
-typedef G_expected = dynamic  Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t03.dart
deleted file mode 100644
index 7d10d4f..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t03.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = X
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = X Function(X, Y);
-typedef G_expected = A<dynamic> Function(A<dynamic>, Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t04.dart
deleted file mode 100644
index 5c21186..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t04.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = Y
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = Y Function(X, Y);
-typedef G_expected = dynamic Function(A<Null>, dynamic);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t06.dart
deleted file mode 100644
index 2dde993..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t06.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X, Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<X1 extends X, Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>, Y extends dynamic>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t07.dart
deleted file mode 100644
index 9b320fc..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t07.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X, Y>(X, Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> =
-    void Function<X1 extends X, Y1 extends Y>(X, Y);
-
-typedef G_expected = void Function<X extends A<dynamic>, Y extends dynamic>(
-    A<dynamic>, dynamic);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t08.dart
deleted file mode 100644
index fa7ad4b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t08.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X, Y>(X))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> =
-    void Function<X1 extends X, Y1 extends Y>(X);
-
-typedef G_expected = void Function<X extends A<dynamic>, Y extends dynamic>(
-    A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t09.dart
deleted file mode 100644
index aaf7de6..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t09.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X, Y>(Y))]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> =
-    void Function<X1 extends X, Y1 extends Y>(Y);
-
-typedef G_expected = void Function<X extends A<dynamic>, Y extends dynamic>(
-    dynamic);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t10.dart
deleted file mode 100644
index f5f0d57..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t10.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X1 extends X>(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<X1 extends X>(Y);
-typedef G_expected = void Function<X extends A<dynamic>>(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t11.dart
deleted file mode 100644
index 43ffc9a..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t11.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X1 extends X>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<X1 extends X>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<dynamic>, Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t12.dart
deleted file mode 100644
index 16287e9..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t12.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<Y1 extends Y>(X)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<Y1 extends Y>(X);
-typedef G_expected = void Function<X extends dynamic>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t13.dart
deleted file mode 100644
index 1365968..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t13.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<Y1 extends Y>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends dynamic>(A<Null>, dynamic);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t14.dart
deleted file mode 100644
index a041648..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t14.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function(X)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function(X);
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t15.dart
deleted file mode 100644
index 1382f84..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t15.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function(Y);
-typedef G_expected = void Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t16.dart
deleted file mode 100644
index 2d985a5..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t16.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = X Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t17.dart
deleted file mode 100644
index 0c0eadb..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = Y Function();
-typedef G_expected = dynamic Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t18.dart
deleted file mode 100644
index 5b15329..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t19.dart
deleted file mode 100644
index b1365e0..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
-/// Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t20.dart
deleted file mode 100644
index 65e4f50..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_04_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y >, Y extends X> = void
-/// Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends X> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends dynamic>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t01.dart
deleted file mode 100644
index 6b09fbf..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t01.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = X
-/// Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = X Function(Y);
-typedef G_expected = dynamic Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t02.dart
deleted file mode 100644
index 890ee4e..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t02.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = Y
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = Y Function(X);
-typedef G_expected = A<dynamic> Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t03.dart
deleted file mode 100644
index 09916a3..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t03.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = X
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = X Function(X, Y);
-typedef G_expected = dynamic Function(dynamic, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t04.dart
deleted file mode 100644
index e535ea5..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t04.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = Y
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = Y Function(X, Y);
-typedef G_expected = A<dynamic> Function(Null, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t06.dart
deleted file mode 100644
index 8109862..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t06.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>();
-typedef G_expected =
-    void Function<X extends dynamic, Y extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t07.dart
deleted file mode 100644
index 4cd6ae4..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t07.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(X, Y);
-
-typedef G_expected = void Function<X extends dynamic, Y extends A<dynamic>>(
-    dynamic, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t08.dart
deleted file mode 100644
index 5b28e7b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t08.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(X);
-typedef G_expected =
-    void Function<X extends dynamic, Y extends A<dynamic>>(dynamic);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t09.dart
deleted file mode 100644
index 111b153..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t09.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(Y);
-
-typedef G_expected =
-    void Function<X extends dynamic, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t10.dart
deleted file mode 100644
index 56c2e21..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t10.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X>(Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<X1 extends X>(Y);
-typedef G_expected = void Function<X extends dynamic>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t11.dart
deleted file mode 100644
index 618bdb6..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t11.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<X1 extends X>(X, Y);
-typedef G_expected = void Function<X extends dynamic>(dynamic, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t12.dart
deleted file mode 100644
index 95999a9..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t12.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function<Y1 extends Y>(X)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>>(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t13.dart
deleted file mode 100644
index 25795a1..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t13.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function<Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(Null, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t14.dart
deleted file mode 100644
index f61c791..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t14.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function(X);
-typedef G_expected = void Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t15.dart
deleted file mode 100644
index 1642091..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t15.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function(Y);
-
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t16.dart
deleted file mode 100644
index 781e27d..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t16.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = X Function();
-
-typedef G_expected = dynamic Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t17.dart
deleted file mode 100644
index 870c983..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = Y Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t18.dart
deleted file mode 100644
index c664f96..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t19.dart
deleted file mode 100644
index 963f2b9..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends dynamic>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t20.dart
deleted file mode 100644
index 003c8c4..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_05_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
-/// Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t01.dart
deleted file mode 100644
index cbcfcb2..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t01.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = X
-/// Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = X Function(Y);
-typedef G_expected = A<dynamic> Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t02.dart
deleted file mode 100644
index 8d138a8..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t02.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = Y
-/// Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = Y Function(X);
-typedef G_expected = A<dynamic> Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t03.dart
deleted file mode 100644
index a4dd2db..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t03.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = X
-/// Function(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = X Function(X, Y);
-typedef G_expected = A<dynamic> Function(A<dynamic>, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t06.dart
deleted file mode 100644
index b5800d0..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t06.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends A<Y>, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>();
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t07.dart
deleted file mode 100644
index 05fcf83..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t07.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends A<Y>, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(X, Y);
-
-typedef G_expected = void Function<X extends A<dynamic>, Y extends A<dynamic>>(
-    A<dynamic>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t08.dart
deleted file mode 100644
index 349499f..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t08.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends A<Y>, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(X);
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t09.dart
deleted file mode 100644
index 92bc133..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t09.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends A<Y>, Y extends A<X>> = void
-/// Function<X1 extends X, Y1 extends Y>(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> =
-    void Function<X1 extends X, Y1 extends Y>(Y);
-
-typedef G_expected =
-    void Function<X extends A<dynamic>, Y extends A<dynamic>>(A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t10.dart
deleted file mode 100644
index 7fcf5bd..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t10.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function<X1 extends X>(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<X1 extends X>(Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t11.dart
deleted file mode 100644
index c45fa35..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t11.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [G<X extends A<Y>, Y extends A<X>> = void
-/// Function<X1 extends X>(X, Y)]
-/// @Issue 34689
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<X1 extends X>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<dynamic>, A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t12.dart
deleted file mode 100644
index 11dbfc8..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t12.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function<Y1 extends Y>(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<Y1 extends Y>(X);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t13.dart
deleted file mode 100644
index 6d04a19..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t13.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function<Y1 extends Y>(X, Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<Y1 extends Y>(X, Y);
-typedef G_expected = void Function<X extends A<dynamic>>(A<Null>, A<dynamic>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t14.dart
deleted file mode 100644
index 4324d82..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t14.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function(X)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends Y, Y extends A<X>> = void Function(X);
-typedef G_expected = void Function(Null);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t15.dart
deleted file mode 100644
index 1a99ac4..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t15.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function(Y)]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function(Y);
-
-typedef G_expected = void Function(A<Null>);
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t16.dart
deleted file mode 100644
index 124e769..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t16.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = X
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = X Function();
-
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t17.dart
deleted file mode 100644
index c400702..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t17.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = Y
-/// Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = Y Function();
-typedef G_expected = A<dynamic> Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t18.dart
deleted file mode 100644
index 88d6c0b..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t18.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function();
-typedef G_expected = void Function();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t19.dart
deleted file mode 100644
index 3b9f2dc..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t19.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function<X1 extends X>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<X1 extends X>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t20.dart
deleted file mode 100644
index fb32929..0000000
--- a/LanguageFeatures/Instantiate-to-bound/typedef/dynamic/typedef_l2_06_t20.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.9
-
-/// @assertion Instantiate to bound then computes an actual type argument list
-/// for [G] as follows:
-///
-///   Let [Ui],[1] be [Si], for all [i] in [1 .. k]. (This is the "current value"
-///   of the bound for type variable [i], at step [1]; in general we will
-///   consider the current step, [m], and use data for that step, e.g., the bound
-///   [Ui],[m], to compute the data for step [m + 1]).
-///
-///   Let [-->m] be a relation among the type variables [X1 .. Xk] such that
-///   [Xp -->m Xq] iff [Xq] occurs in [Up],[m] (so each type variable is related
-///   to, that is, depends on, every type variable in its bound, possibly
-///   including itself). Let [==>m] be the transitive closure of [-->m]. For each
-///   [m], let [Ui],[m+1], for [i] in [1 .. k], be determined by the following
-///   iterative process:
-///
-///   1. If there exists a [j] in [1 .. k] such that [Xj ==>m X0j] (that is, if
-///   the dependency graph has a cycle) let [M1 .. Mp] be the strongly connected
-///   components (SCCs) with respect to [-->m] (that is, the maximal subsets of
-///   [X1 .. Xk] where every pair of variables in each subset are related in both
-///   directions by [==>m]; note that the SCCs are pairwise disjoint; also, they
-///   are uniquely defined up to reordering, and the order does not matter). Let
-///   [M] be the union of [M1 .. Mp] (that is, all variables that participate in
-///   a dependency cycle). Let [i] be in [1 .. k]. If [Xi] does not belong to [M]
-///   then [Ui,m+1 = Ui,m]. Otherwise there exists a [q] such that [Xi] belongs
-///   to [Mq]; [Ui,m+1] is then obtained from [Ui,m] by replacing every covariant
-///   occurrence of a variable in [Mq] by [dynamic], and replacing every
-///   contravariant occurrence of a variable in [Mq] by [Null].
-///
-///   2. Otherwise, (if no dependency cycle exists) let [j] be the lowest number
-///   such that [Xj] occurs in [Up,m] for some [p] and [Xj -/->m Xq] for all [q]
-///   in [1..k] (that is, [Uj,m] is closed, that is, the current bound of [Xj]
-///   does not contain any type variables; but [Xj] is being depended on by the
-///   bound of some other type variable). Then, for all [i] in [1 .. k], [Ui,m+1]
-///   is obtained from [Ui,m] by replacing every covariant occurrence of [Xj] by
-///   [Uj,m], and replacing every contravariant occurrence of [Xj] by [Null].
-///
-///   3. Otherwise, (when no dependencies exist) terminate with the result
-///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef]
-/// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
-/// void Function<Y1 extends Y>()]
-/// @author iarkh@unipro.ru
-
-import "../../../../Utils/expect.dart";
-
-class A<X> {}
-typedef G<X extends A<Y>, Y extends A<X>> = void Function<Y1 extends Y>();
-typedef G_expected = void Function<X extends A<dynamic>>();
-
-main() {
-  Expect.equals(G_expected, G);
-}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t03.dart
index ae0bc06..3b75d5d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t03.dart
@@ -42,13 +42,26 @@
 ///
 ///   3. Otherwise, (when no dependencies exist) terminate with the result
 ///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef
-///  G<X extends A<X>> = X Function()] (invariant)
+///
+/// @description Checks that instantiate-to-bounds works correctly for invariant
+/// case: G<X extends A<X>> = X Function(X) in dart 2.9
+///
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
+import "../../../../Utils/expect.dart";
+
 class A<X> {}
 typedef G<X extends A<X>> = X Function(X);
 
+test(G source) {}
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
 main() {
-  G source; //# 01: compile-time error
+  G source;
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t04.dart
index df271a3..059228f 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t04.dart
@@ -42,13 +42,21 @@
 ///
 ///   3. Otherwise, (when no dependencies exist) terminate with the result
 ///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [typedef
-///  G<X extends A<X>> = X Function()] (unused)
+///
+/// @description Checks that instantiate-to-bounds works correctly for the case
+/// with unused type parameter:
+/// typedef G<X extends A<X>> = void Function()
+///
+/// @Issue 46483
+///
 /// @author iarkh@unipro.ru
 
 class A<X> {}
 typedef G<X extends A<X>> = void Function();
 
 main() {
-  G source;   //# 01: compile-time error
+  G source;
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t05.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t05.dart
index 718a9de..4ccc2c4 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t05.dart
@@ -43,7 +43,8 @@
 ///   3. Otherwise, (when no dependencies exist) terminate with the result
 ///   [<U1,m ..., Uk,m>].
 /// @description Checks that instantiate-to-bounds works correctly for [typedef
-///  G<X extends A<X>> = X Function()] (covariant)
+///  G<X extends A<X>> = void Function<Y extend X>()] (covariant)
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t08.dart
index 0bdc4c4..237fe85 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t08.dart
@@ -42,8 +42,10 @@
 ///
 ///   3. Otherwise, (when no dependencies exist) terminate with the result
 ///   [<U1,m ..., Uk,m>].
-/// @description Checks that instantiate-to-bounds works correctly for [class A<X
-/// extends A<X>>], [typedef G<X extends A<X>> = X Function()] (invariant)
+/// @description Checks that instantiate-to-bounds works correctly for
+/// class A<X extends A<X>>;
+/// typedef G<X extends A<X>> = X Function(X)] (invariant case)
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X extends A<X>> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t09.dart
index 3b2f242..ba8df58 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t09.dart
@@ -44,6 +44,7 @@
 ///   [<U1,m ..., Uk,m>].
 /// @description Checks that instantiate-to-bounds works correctly for [class A<X
 /// extends A<X>>], [typedef G<X extends A<X>> = X Function()] (unused)
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X extends A<X>> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t10.dart
index d701037..13899a7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t10.dart
@@ -44,6 +44,7 @@
 ///   [<U1,m ..., Uk,m>].
 /// @description Checks that instantiate-to-bounds works correctly for [class A<X
 /// extends A<X>>], [typedef G<X extends A<X>> = X Function()] (invariant)
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X extends A<X>> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t01.dart
index c864a6a..72fd484 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t01.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>>  = X
 /// Function(Y)]
-/// @Issue 34689, 34699
+/// @Issue 34689, 34699, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t02.dart
index 7e71b5e..8026af2 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t02.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
+
 
 /// @assertion Instantiate to bound then computes an actual type argument list
 /// for [G] as follows:
@@ -45,11 +45,13 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = Y
 /// Function(X)]
+/// @Issue 46483, 47364
 /// @author iarkh@unipro.ru
 
 
 class A<X> {}
-typedef G<X extends A<X>, Y extends A<Y>> = Y Function(X);
+class B<X> {}
+typedef G<X extends A<X>, Y extends B<Y>> = Y Function(X);
 
 main() {
   G source;  //# 01: compile-time error
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t03.dart
index 27812b2..8ea879d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t03.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = X
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t04.dart
index e997a0a..c31c72a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t04.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> = Y
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t06.dart
index 78711e5..ea89824 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t06.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X, Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t07.dart
index 788e4bd..93ee9a7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t07.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X, Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t08.dart
index e87bca7..4f674a9 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t08.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X, Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t09.dart
index 6c2dcd6..6e8561c 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t09.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X, Y1 extends Y>(Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t10.dart
index f8011cc..922b910 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t10.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t11.dart
index be14153..6181b45 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t11.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t11.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t12.dart
index ceb0a06..f024c36 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t12.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t12.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t13.dart
index 5c47e76..504f8d5 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t13.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t13.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t14.dart
index 7027fa2..abd51cd 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t14.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function(X)]
-/// @Issue 34689, 34699
+/// @Issue 34689, 34699, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t15.dart
index 9774d14..02b1f20 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t15.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t16.dart
index 7e65d14..9006245 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t16.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t17.dart
index abdf783..76a8d56 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t17.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t18.dart
index ebfd845..2db343d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t18.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t19.dart
index 1d71933..a4ae91c 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t19.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t20.dart
index 2f3eeb7..5c5273a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t20.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function<Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t01.dart
index e3bb1b2..594e83c 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t01.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = X
 /// Function(Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t03.dart
index 647d52b..ede7368 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t03.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = X
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t06.dart
index e75bf8e..0027736 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t06.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>()]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t07.dart
index fc10d9d..78c9ca7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t07.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(X, Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t08.dart
index 6dbc854..e9bee9a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t08.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(X)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t09.dart
index 3f9c3f6..f199eff 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t09.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t10.dart
index 88c9342..817588e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t10.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t11.dart
index fc5590e..99a2625 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t11.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t11.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t14.dart
index dc1d381..3d3f7bc 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t14.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function(X)]
-/// @Issue 34689, 34699
+/// @Issue 34689, 34699, 46483
 /// @author iarkh@unipro.ru
 
 typedef F<X> = void Function<Y extends X>();
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t15.dart
index 996be4e..56c4021 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t15.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 typedef F<X> = void Function<Y extends X>();
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t16.dart
index c0c90b3..33b3a2f 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t16.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t17.dart
index 9ba105d..069fc8e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t17.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t18.dart
index 3c2d3de..781a032 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t18.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t19.dart
index 0ec9e5e..c9ef6db 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t19.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t20.dart
index 0ce3eb3..f1d2418 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t20.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends X> = void
 /// Function<Y1 extends Y>()]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t02.dart
index 50e7679..b0c3776 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t02.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = Y
 /// Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t04.dart
index 62ec50f..4a91a3d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t04.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = Y
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t06.dart
index ab0434b..c0199a7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t06.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<X1 extends X, Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t07.dart
index 87d72b1..fa42fb8 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t07.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<X1 extends X, Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t08.dart
index a751d66..b80fbb6 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t08.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<X1 extends X, Y1 extends Y>(X)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t09.dart
index f5caa71..b185abb 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t09.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<X1 extends X, Y1 extends Y>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<Y>> =
     void Function<X1 extends X, Y1 extends Y>(Y);
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t12.dart
index 08a95cc..40d6cd2 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t12.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t12.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t13.dart
index e5758d5..b228d1f 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t13.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t13.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<Y1 extends Y>(X, Y)]
+/// /// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t14.dart
index b78d5ce..2fab51d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t14.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> =
 /// void Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t15.dart
index 0d7f33b..1646cb0 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t15.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t16.dart
index 1762d90..0a2963e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t16.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t17.dart
index cd5eba4..5ee9f52 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t17.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<Y>> = Y Function();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t18.dart
index 84cb793..1e35bc7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t18.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t19.dart
index 539fab2..5b4c950 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t19.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t20.dart
index d70a813..65088ae 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t20.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<Y>> = void
 /// Function<Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<Y>> = void Function<Y1 extends Y>();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t01.dart
index 95e079b..ddfdc19 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t01.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X>  = X
 /// Function(Y)]
-/// @Issue 34689, 34699
+/// @Issue 34689, 34699, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t02.dart
index 370659b..a4f8661 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t02.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = Y
 /// Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends A<Y>, Y extends X> = Y Function(X);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t03.dart
index 3042bbd..885bcb4 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t03.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = X
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t04.dart
index ca80c09..8cc5ed8 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t04.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = Y
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends A<Y>, Y extends X> = Y Function(X, Y);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t06.dart
index 387cb4a..20e52e1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t06.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>()]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t07.dart
index 181389b..bdb3ac1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t07.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(X, Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t08.dart
index b448850..7d474de 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t08.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(X)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t09.dart
index 333e352..aa41cf1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t09.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X, Y1 extends Y>(Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t10.dart
index 4f604d6..21a084d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t10.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t11.dart
index 8dce45b..fc3c31e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t11.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t11.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t12.dart
index 8996ae8..8452c45 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t12.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t12.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t13.dart
index d3a132b..e293803 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t13.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t13.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t14.dart
index a81ee2c..88d1233 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t14.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<Y>> =
 /// void Function(X)]
-/// @Issue 34689, 34699
+/// @Issue 34689, 34699, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t15.dart
index bfb1e3a..bfa5ad1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t15.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<Y>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t16.dart
index 30cde15..72a7372 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t16.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<Y>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t17.dart
index 27eba58..c88c29b 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t17.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<Y>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t18.dart
index 8d8acb9..b0dffbd 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t18.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<Y>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t19.dart
index 2a86b22..3567014 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t19.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t20.dart
index 92ecbcd..6580db8 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t20.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends X> = void
 /// Function<Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t01.dart
index ef9c92a..54df094 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t01.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = X
 /// Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t02.dart
index 9f81abc..461e731 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t02.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = Y
 /// Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t03.dart
index bd2f4ec..5c8d5a2 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t03.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = X
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = X Function(X, Y);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t04.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t04.dart
index 6c592ce..047aaf6 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t04.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = Y
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t06.dart
index b275377..e4fc5e6 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t06.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X, Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> =
     void Function<X1 extends X, Y1 extends Y>();
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t07.dart
index e3e6043..979b00d 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t07.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X, Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> =
     void Function<X1 extends X, Y1 extends Y>(X, Y);
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t08.dart
index fd002cf..5ceccb8 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t08.dart
@@ -45,10 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X, Y1 extends Y>(X)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> =
     void Function<X1 extends X, Y1 extends Y>(X);
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t09.dart
index a8f0f0e..fffd8bf 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t09.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X, Y1 extends Y>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> =
     void Function<X1 extends X, Y1 extends Y>(Y);
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t10.dart
index a30ef82..43c934e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t10.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function<X1 extends X>(Y);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t11.dart
index 11cc3fc..a6524f1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t11.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t11.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t12.dart
index bb23c3a..bb69afe 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t12.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t12.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t13.dart
index a98bf7f..d8bfa26 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t13.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t13.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function<Y1 extends Y>(X, Y);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t14.dart
index 9529d2d..8e73d60 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t14.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> =
 /// void Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function(X);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t15.dart
index 6b32fe3..873a480 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t15.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function(X);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t16.dart
index 740f736..ecf7e2b 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t16.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = X Function();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t17.dart
index fbabc4f..8da010f 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t17.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = Y Function();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t18.dart
index 5b7e4ae..8ad1884 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t18.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t19.dart
index 83e9c19..07393ca 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t19.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function<X1 extends X>();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t20.dart
index 96424ac..b768feb 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t20.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends Y, Y extends A<X>> = void
 /// Function<Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends Y, Y extends A<X>> = void Function<Y1 extends Y>();
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t01.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t01.dart
index 6f301ef..b9138f1 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t01.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<X>, Y extends A<Y>>  = X
 /// Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t02.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t02.dart
index 698cdcf..8898e5a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t02.dart
@@ -45,9 +45,9 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = Y
 /// Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
-
 class A<X> {}
 typedef G<X extends A<Y>, Y extends A<X>> = Y Function(X);
 
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t03.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t03.dart
index 3b56439..9d2df7f 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t03.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> = X
 /// Function(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t06.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t06.dart
index f3729a0..22746b9 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t06.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X, Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t07.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t07.dart
index 534cb4f..c730b2a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t07.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X, Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t08.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t08.dart
index 81357a3..ff27d44 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t08.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X, Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t09.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t09.dart
index 28fdd22..51cf719 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t09.dart
@@ -45,7 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X, Y1 extends Y>(Y)]
-/// @Issue 35068
+/// @Issue 35068, 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t10.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t10.dart
index 2ae6077..ea08995 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t10.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X>(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t11.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t11.dart
index c4aa47c..0aad19a 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t11.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t11.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t12.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t12.dart
index 5584836..e425922 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t12.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t12.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<Y1 extends Y>(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t13.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t13.dart
index 7844cf1..e3d717e 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t13.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t13.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<Y1 extends Y>(X, Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t14.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t14.dart
index ad75966..be8b444 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t14.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t14.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function(X)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t15.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t15.dart
index eecdadf..decb680 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t15.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t15.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function(Y)]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t16.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t16.dart
index 2131b6b..f1e1cd3 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t16.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t16.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// X Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t17.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t17.dart
index 40f8cad..dde8015 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t17.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t17.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// Y Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t18.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t18.dart
index 4289b5e..44e9b29 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t18.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t18.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t19.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t19.dart
index 3a3f9d3..ca795cc 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t19.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t19.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<X1 extends X>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}
diff --git a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t20.dart b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t20.dart
index 3600ed7..c46cfb7 100644
--- a/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t20.dart
+++ b/LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t20.dart
@@ -45,6 +45,7 @@
 /// @description Checks that instantiate-to-bounds works correctly for [typedef]
 /// with two related parameters: [typedef G<X extends A<Y>, Y extends A<X>> =
 /// void Function<Y1 extends Y>()]
+/// @Issue 46483
 /// @author iarkh@unipro.ru
 
 class A<X> {}