library;
import self as self;
import "dart:core" as core;

typedef Alias<T extends core::num> = self::Class<T>;
class Class<T extends core::Object? = dynamic> extends core::Object {
  constructor •() → self::Class<self::Class::T%>
    : super core::Object::•()
    ;
  static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
    return new self::Class::•<self::Class::_#new#tearOff::T%>();
  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
    return new self::Class::•<self::Class::fact::T%>();
  static synthetic method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%> /* redirection-target: self::Class::•<self::Class::redirect::T%>*/
    return new self::Class::•<self::Class::redirect::T%>();
  static synthetic method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
}
static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = #C1;
static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = #C2;
static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = #C3;
static const field <T extends core::num>() → self::Class<T> d = #C4;
static const field <T extends core::num>() → self::Class<T> e = #C5;
static const field <T extends core::num>() → self::Class<T> f = #C6;
static method main() → dynamic {
  core::print("${#C1}${#C2}${#C3}${#C4}${#C5}${#C6}");
}
static synthetic method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
  return new self::Class::•<self::_#Alias#new#tearOff::T>();
static synthetic method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
static synthetic method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();

constants  {
  #C1 = static-tearoff self::Class::_#new#tearOff
  #C2 = static-tearoff self::Class::_#fact#tearOff
  #C3 = static-tearoff self::Class::_#redirect#tearOff
  #C4 = static-tearoff self::_#Alias#new#tearOff
  #C5 = static-tearoff self::_#Alias#fact#tearOff
  #C6 = static-tearoff self::_#Alias#redirect#tearOff
}
