library /*isNonNullableByDefault*/;
import self as self;
import "package:macro/macro.dart" as mac;
import "dart:core" as core;

import "package:macro/macro.dart";

@#C2
class Class1 extends core::Object {
  synthetic constructor •() → self::Class1
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ method() → dynamic {}
}
@#C2
@#C4
class Class2 extends core::Object {
  synthetic constructor •() → self::Class2
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ method() → dynamic {}
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ method1() → dynamic {}
}
@#C2
class Class3 extends core::Object {
  synthetic constructor •() → self::Class3
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ method1() → dynamic {}
  @#C4
  method method() → dynamic {}
}
@#C2
@#C4
@#C6
class Class4 extends core::Object {
  synthetic constructor •() → self::Class4
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ method1() → dynamic {}
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ method3() → dynamic {}
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ method4() → dynamic {}
  @#C8
  method method() → dynamic {}
  @#C10
  @#C12
  method method2() → dynamic {}
}
@#C2
class Class5c extends self::Class5b {
  synthetic constructor •() → self::Class5c
    : super self::Class5b::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-9 */ method2() → dynamic {}
}
@#C2
class Class5b extends self::Class5a {
  synthetic constructor •() → self::Class5b
    : super self::Class5a::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-8 */ method1() → dynamic {}
}
@#C2
class Class5a extends core::Object {
  synthetic constructor •() → self::Class5a
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-7 */ method() → dynamic {}
}
@#C2
class Class6d extends core::Object implements self::Class6c, self::Class6b {
  synthetic constructor •() → self::Class6d
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-13 */ method2() → dynamic {}
}
@#C2
class Class6c extends core::Object {
  synthetic constructor •() → self::Class6c
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-10 */ method() → dynamic {}
}
@#C2
class Class6b extends core::Object implements self::Class6a {
  synthetic constructor •() → self::Class6b
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-12 */ method1() → dynamic {}
}
@#C2
class Class6a extends core::Object {
  synthetic constructor •() → self::Class6a
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ method() → dynamic {}
}
abstract class _Class7d&Class7b&Class7c = self::Class7b with self::Class7c /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class7d&Class7b&Class7c
    : super self::Class7b::•()
    ;
  mixin-super-stub method method() → dynamic
    return super.{self::Class7c::method}();
}
@#C2
class Class7d extends self::_Class7d&Class7b&Class7c {
  synthetic constructor •() → self::Class7d
    : super self::_Class7d&Class7b&Class7c::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ method2() → dynamic {}
}
@#C2
class Class7c extends core::Object {
  synthetic constructor •() → self::Class7c
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-16 */ method() → dynamic {}
}
abstract class _Class7b&Object&Class7a = core::Object with self::Class7a /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Class7b&Object&Class7a
    : super core::Object::•()
    ;
  mixin-super-stub method method() → dynamic
    return super.{self::Class7a::method}();
}
@#C2
class Class7b extends self::_Class7b&Object&Class7a {
  synthetic constructor •() → self::Class7b
    : super self::_Class7b&Object&Class7a::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-15 */ method1() → dynamic {}
}
@#C2
class Class7a extends core::Object {
  synthetic constructor •() → self::Class7a
    : super core::Object::•()
    ;
  method /* from org-dartlang-augmentation:/a/b/c/main.dart-14 */ method() → dynamic {}
}

constants  {
  #C1 = 0
  #C2 = mac::SequenceMacro {index:#C1}
  #C3 = 1
  #C4 = mac::SequenceMacro {index:#C3}
  #C5 = 2
  #C6 = mac::SequenceMacro {index:#C5}
  #C7 = 3
  #C8 = mac::SequenceMacro {index:#C7}
  #C9 = 4
  #C10 = mac::SequenceMacro {index:#C9}
  #C11 = 5
  #C12 = mac::SequenceMacro {index:#C11}
}
