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

extension _extension#0 on core::int {
  method _laterUnnamedParameter = self::_extension#0|_laterUnnamedParameter;
  tearoff _laterUnnamedParameter = self::_extension#0|get#_laterUnnamedParameter;
  method _laterUnnamedParameterDependsOnNamedParameter = self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter;
  tearoff _laterUnnamedParameterDependsOnNamedParameter = self::_extension#0|get#_laterUnnamedParameterDependsOnNamedParameter;
  method _earlierUnnamedParameter = self::_extension#0|_earlierUnnamedParameter;
  tearoff _earlierUnnamedParameter = self::_extension#0|get#_earlierUnnamedParameter;
  method _laterNamedParameter = self::_extension#0|_laterNamedParameter;
  tearoff _laterNamedParameter = self::_extension#0|get#_laterNamedParameter;
  method _earlierNamedParameter = self::_extension#0|_earlierNamedParameter;
  tearoff _earlierNamedParameter = self::_extension#0|get#_earlierNamedParameter;
  method _earlierNamedParameterDependsOnUnnamedParameter = self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter;
  tearoff _earlierNamedParameterDependsOnUnnamedParameter = self::_extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter;
  method _propagateToReturnType = self::_extension#0|_propagateToReturnType;
  tearoff _propagateToReturnType = self::_extension#0|get#_propagateToReturnType;
  method _closureAsParameterType = self::_extension#0|_closureAsParameterType;
  tearoff _closureAsParameterType = self::_extension#0|get#_closureAsParameterType;
  method _propagateToEarlierClosure = self::_extension#0|_propagateToEarlierClosure;
  tearoff _propagateToEarlierClosure = self::_extension#0|get#_propagateToEarlierClosure;
  method _propagateToLaterClosure = self::_extension#0|_propagateToLaterClosure;
  tearoff _propagateToLaterClosure = self::_extension#0|get#_propagateToLaterClosure;
  method _longDependencyChain = self::_extension#0|_longDependencyChain;
  tearoff _longDependencyChain = self::_extension#0|get#_longDependencyChain;
  method _dependencyCycle = self::_extension#0|_dependencyCycle;
  tearoff _dependencyCycle = self::_extension#0|get#_dependencyCycle;
  method _propagateFromContravariantReturnType = self::_extension#0|_propagateFromContravariantReturnType;
  tearoff _propagateFromContravariantReturnType = self::_extension#0|get#_propagateFromContravariantReturnType;
  method _propagateToContravariantParameterType = self::_extension#0|_propagateToContravariantParameterType;
  tearoff _propagateToContravariantParameterType = self::_extension#0|get#_propagateToContravariantParameterType;
  method _returnTypeRefersToMultipleTypeVars = self::_extension#0|_returnTypeRefersToMultipleTypeVars;
  tearoff _returnTypeRefersToMultipleTypeVars = self::_extension#0|get#_returnTypeRefersToMultipleTypeVars;
  method _unnecessaryDueToNoDependency = self::_extension#0|_unnecessaryDueToNoDependency;
  tearoff _unnecessaryDueToNoDependency = self::_extension#0|get#_unnecessaryDueToNoDependency;
  method _unnecessaryDueToExplicitParameterTypeNamed = self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed;
  tearoff _unnecessaryDueToExplicitParameterTypeNamed = self::_extension#0|get#_unnecessaryDueToExplicitParameterTypeNamed;
  method _parenthesized = self::_extension#0|_parenthesized;
  tearoff _parenthesized = self::_extension#0|get#_parenthesized;
  method _parenthesizedNamed = self::_extension#0|_parenthesizedNamed;
  tearoff _parenthesizedNamed = self::_extension#0|get#_parenthesizedNamed;
  method _parenthesizedTwice = self::_extension#0|_parenthesizedTwice;
  tearoff _parenthesizedTwice = self::_extension#0|get#_parenthesizedTwice;
  method _parenthesizedTwiceNamed = self::_extension#0|_parenthesizedTwiceNamed;
  tearoff _parenthesizedTwiceNamed = self::_extension#0|get#_parenthesizedTwiceNamed;
}
static method testLaterUnnamedParameter(core::int i) → dynamic {
  self::_extension#0|_laterUnnamedParameter<core::int>(i, 0, (core::int x) → void {
    x;
  });
}
static method testLaterUnnamedParameterDependsOnNamedParameter(core::int i) → dynamic {
  self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter<core::int>(i, (core::int x) → void {
    x;
  }, a: 0);
}
static method testEarlierUnnamedParameter(core::int i) → dynamic {
  self::_extension#0|_earlierUnnamedParameter<core::int>(i, (core::int x) → void {
    x;
  }, 0);
}
static method testLaterNamedParameter(core::int i) → dynamic {
  self::_extension#0|_laterNamedParameter<core::int>(i, a: 0, b: (core::int x) → void {
    x;
  });
}
static method testEarlierNamedParameter(core::int i) → dynamic {
  self::_extension#0|_earlierNamedParameter<core::int>(i, a: (core::int x) → void {
    x;
  }, b: 0);
}
static method testEarlierNamedParameterDependsOnUnnamedParameter(core::int i) → dynamic {
  self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter<core::int>(i, 0, a: (core::int x) → void {
    x;
  });
}
static method testPropagateToReturnType(core::int i) → dynamic {
  self::_extension#0|_propagateToReturnType<core::int, core::List<core::int>>(i, 0, (core::int x) → core::List<core::int> => <core::int>[x]);
}
static method testClosureAsParameterType(core::int i) → dynamic {
  self::_extension#0|_closureAsParameterType<() → core::int, core::List<core::int>>(i, () → core::int => 0, (() → core::int h) → core::List<core::int> => <core::int>[h(){() → core::int}]);
}
static method testPropagateToEarlierClosure(core::int i) → dynamic {
  self::_extension#0|_propagateToEarlierClosure<core::int, core::List<core::int>>(i, (core::int x) → core::List<core::int> => <core::int>[x], () → core::int => 0);
}
static method testPropagateToLaterClosure(core::int i) → dynamic {
  self::_extension#0|_propagateToLaterClosure<core::int, core::List<core::int>>(i, () → core::int => 0, (core::int x) → core::List<core::int> => <core::int>[x]);
}
static method testLongDependencyChain(core::int i) → dynamic {
  self::_extension#0|_longDependencyChain<core::List<core::int>, core::int, core::Set<core::int>>(i, () → core::List<core::int> => <core::int>[0], (core::List<core::int> x) → core::int => x.{core::Iterable::single}{core::int}, (core::int y) → core::Set<core::int> => block {
    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
    #t1.{core::Set::add}{Invariant}(y){(core::int) → core::bool};
  } =>#t1);
}
static method testDependencyCycle(core::int i) → dynamic {
  self::_extension#0|_dependencyCycle<core::List<core::Object?>, core::Set<core::Object?>>(i, (core::Object? x) → core::List<core::Object?> => <core::Object?>[x], (core::Object? y) → core::Set<core::Object?> => block {
    final core::Set<core::Object?> #t2 = col::LinkedHashSet::•<core::Object?>();
    #t2.{core::Set::add}{Invariant}(y){(core::Object?) → core::bool};
  } =>#t2);
}
static method testPropagateFromContravariantReturnType(core::int i) → dynamic {
  self::_extension#0|_propagateFromContravariantReturnType<core::int, core::List<core::int>>(i, () → (core::int) → void => (core::int i) → void {}, (core::int x) → core::List<core::int> => <core::int>[x]);
}
static method testPropagateToContravariantParameterType(core::int i) → dynamic {
  self::_extension#0|_propagateToContravariantParameterType<core::int, core::List<(core::int) → void>>(i, () → core::int => 0, ((core::int) → void x) → core::List<(core::int) → void> => <(core::int) → void>[x]);
}
static method testReturnTypeRefersToMultipleTypeVars(core::int i) → dynamic {
  self::_extension#0|_returnTypeRefersToMultipleTypeVars<core::int, core::String>(i, () → core::Map<core::int, core::String> => <core::int, core::String>{0: ""}, (core::int k) → void {
    k;
  }, (core::String v) → void {
    v;
  });
}
static method testUnnecessaryDueToNoDependency(core::int i) → dynamic {
  self::_extension#0|_unnecessaryDueToNoDependency<core::int?>(i, () → core::int => 0, null);
}
static method testUnnecessaryDueToExplicitParameterTypeNamed(core::int i) → dynamic {
  core::int? a = self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed<core::int?>(i, null, ({core::int? x = #C1, required core::int y = #C1}) → core::int => (let final core::int? #t3 = x in #t3 == null ?{core::int} 0 : #t3{core::int}).{core::num::+}(y){(core::num) → core::int});
  a;
}
static method testParenthesized(core::int i) → dynamic {
  self::_extension#0|_parenthesized<core::int>(i, 0, (core::int x) → void {
    x;
  });
}
static method testParenthesizedNamed(core::int i) → dynamic {
  self::_extension#0|_parenthesizedNamed<core::int>(i, a: 0, b: (core::int x) → void {
    x;
  });
}
static method testParenthesizedTwice(core::int i) → dynamic {
  self::_extension#0|_parenthesizedTwice<core::int>(i, 0, (core::int x) → void {
    x;
  });
}
static method testParenthesizedTwiceNamed(core::int i) → dynamic {
  self::_extension#0|_parenthesizedTwiceNamed<core::int>(i, a: 0, b: (core::int x) → void {
    x;
  });
}
static method _extension#0|_laterUnnamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_laterUnnamedParameter::T% x, (self::_extension#0|_laterUnnamedParameter::T%) → void y) → self::_extension#0|_laterUnnamedParameter::T%
  return throw "";
static method _extension#0|get#_laterUnnamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>(T%, (T%) → void) → T%
  return <T extends core::Object? = dynamic>(T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter<T%>(#this, x, y);
static method _extension#0|_laterUnnamedParameterDependsOnNamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a = #C1}) → void
  return throw "";
static method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>((T%) → void, {a: T%}) → void
  return <T extends core::Object? = dynamic>((T%) → void x, {T% a = #C1}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter<T%>(#this, x, a: a);
static method _extension#0|_earlierUnnamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void
  return throw "";
static method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>((T%) → void, T%) → void
  return <T extends core::Object? = dynamic>((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter<T%>(#this, x, y);
static method _extension#0|_laterNamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a = #C1, required (self::_extension#0|_laterNamedParameter::T%) → void b = #C1}) → void
  return throw "";
static method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>({a: T%, b: (T%) → void}) → void
  return <T extends core::Object? = dynamic>({T% a = #C1, (T%) → void b = #C1}) → void => self::_extension#0|_laterNamedParameter<T%>(#this, a: a, b: b);
static method _extension#0|_earlierNamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a = #C1, required self::_extension#0|_earlierNamedParameter::T% b = #C1}) → void
  return throw "";
static method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>({a: (T%) → void, b: T%}) → void
  return <T extends core::Object? = dynamic>({(T%) → void a = #C1, T% b = #C1}) → void => self::_extension#0|_earlierNamedParameter<T%>(#this, a: a, b: b);
static method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter<T extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a = #C1}) → void
  return throw "";
static method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → <T extends core::Object? = dynamic>(T%, {a: (T%) → void}) → void
  return <T extends core::Object? = dynamic>(T% b, {(T%) → void a = #C1}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter<T%>(#this, b, a: a);
static method _extension#0|_propagateToReturnType<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U%
  return throw "";
static method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(T%, (T%) → U%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(T% x, (T%) → U% y) → U% => self::_extension#0|_propagateToReturnType<T%, U%>(#this, x, y);
static method _extension#0|_closureAsParameterType<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_closureAsParameterType::T% x, (self::_extension#0|_closureAsParameterType::T%) → self::_extension#0|_closureAsParameterType::U% y) → self::_extension#0|_closureAsParameterType::U%
  return throw "";
static method _extension#0|get#_closureAsParameterType(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(T%, (T%) → U%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(T% x, (T%) → U% y) → U% => self::_extension#0|_closureAsParameterType<T%, U%>(#this, x, y);
static method _extension#0|_propagateToEarlierClosure<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_propagateToEarlierClosure::T%) → self::_extension#0|_propagateToEarlierClosure::U% x, () → self::_extension#0|_propagateToEarlierClosure::T% y) → self::_extension#0|_propagateToEarlierClosure::U%
  return throw "";
static method _extension#0|get#_propagateToEarlierClosure(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>((T%) → U%, () → T%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>((T%) → U% x, () → T% y) → U% => self::_extension#0|_propagateToEarlierClosure<T%, U%>(#this, x, y);
static method _extension#0|_propagateToLaterClosure<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, () → self::_extension#0|_propagateToLaterClosure::T% x, (self::_extension#0|_propagateToLaterClosure::T%) → self::_extension#0|_propagateToLaterClosure::U% y) → self::_extension#0|_propagateToLaterClosure::U%
  return throw "";
static method _extension#0|get#_propagateToLaterClosure(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → T%, (T%) → U%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → T% x, (T%) → U% y) → U% => self::_extension#0|_propagateToLaterClosure<T%, U%>(#this, x, y);
static method _extension#0|get#_longDependencyChain(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic, V extends core::Object? = dynamic>(() → T%, (T%) → U%, (U%) → V%) → V%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic, V extends core::Object? = dynamic>(() → T% x, (T%) → U% y, (U%) → V% z) → V% => self::_extension#0|_longDependencyChain<T%, U%, V%>(#this, x, y, z);
static method _extension#0|_longDependencyChain<T extends core::Object? = dynamic, U extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final core::int #this, () → self::_extension#0|_longDependencyChain::T% x, (self::_extension#0|_longDependencyChain::T%) → self::_extension#0|_longDependencyChain::U% y, (self::_extension#0|_longDependencyChain::U%) → self::_extension#0|_longDependencyChain::V% z) → self::_extension#0|_longDependencyChain::V%
  return throw "";
static method _extension#0|_dependencyCycle<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_dependencyCycle::U%) → self::_extension#0|_dependencyCycle::T% x, (self::_extension#0|_dependencyCycle::T%) → self::_extension#0|_dependencyCycle::U% y) → core::Map<self::_extension#0|_dependencyCycle::T%, self::_extension#0|_dependencyCycle::U%>
  return throw "";
static method _extension#0|get#_dependencyCycle(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>((U%) → T%, (T%) → U%) → core::Map<T%, U%>
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>((U%) → T% x, (T%) → U% y) → core::Map<T%, U%> => self::_extension#0|_dependencyCycle<T%, U%>(#this, x, y);
static method _extension#0|_propagateFromContravariantReturnType<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, () → (self::_extension#0|_propagateFromContravariantReturnType::T%) → void x, (self::_extension#0|_propagateFromContravariantReturnType::T%) → self::_extension#0|_propagateFromContravariantReturnType::U% y) → self::_extension#0|_propagateFromContravariantReturnType::U%
  return throw "";
static method _extension#0|get#_propagateFromContravariantReturnType(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → (T%) → void, (T%) → U%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → (T%) → void x, (T%) → U% y) → U% => self::_extension#0|_propagateFromContravariantReturnType<T%, U%>(#this, x, y);
static method _extension#0|_propagateToContravariantParameterType<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, () → self::_extension#0|_propagateToContravariantParameterType::T% x, ((self::_extension#0|_propagateToContravariantParameterType::T%) → void) → self::_extension#0|_propagateToContravariantParameterType::U% y) → self::_extension#0|_propagateToContravariantParameterType::U%
  return throw "";
static method _extension#0|get#_propagateToContravariantParameterType(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → T%, ((T%) → void) → U%) → U%
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → T% x, ((T%) → void) → U% y) → U% => self::_extension#0|_propagateToContravariantParameterType<T%, U%>(#this, x, y);
static method _extension#0|_returnTypeRefersToMultipleTypeVars<T extends core::Object? = dynamic, U extends core::Object? = dynamic>(lowered final core::int #this, () → core::Map<self::_extension#0|_returnTypeRefersToMultipleTypeVars::T%, self::_extension#0|_returnTypeRefersToMultipleTypeVars::U%> x, (self::_extension#0|_returnTypeRefersToMultipleTypeVars::T%) → void y, (self::_extension#0|_returnTypeRefersToMultipleTypeVars::U%) → void z) → void
  return throw "";
static method _extension#0|get#_returnTypeRefersToMultipleTypeVars(lowered final core::int #this) → <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → core::Map<T%, U%>, (T%) → void, (U%) → void) → void
  return <T extends core::Object? = dynamic, U extends core::Object? = dynamic>(() → core::Map<T%, U%> x, (T%) → void y, (U%) → void z) → void => self::_extension#0|_returnTypeRefersToMultipleTypeVars<T%, U%>(#this, x, y, z);
static method _extension#0|_unnecessaryDueToNoDependency<T extends core::Object? = dynamic>(lowered final core::int #this, () → self::_extension#0|_unnecessaryDueToNoDependency::T% x, self::_extension#0|_unnecessaryDueToNoDependency::T% y) → self::_extension#0|_unnecessaryDueToNoDependency::T%
  return throw "";
static method _extension#0|get#_unnecessaryDueToNoDependency(lowered final core::int #this) → <T extends core::Object? = dynamic>(() → T%, T%) → T%
  return <T extends core::Object? = dynamic>(() → T% x, T% y) → T% => self::_extension#0|_unnecessaryDueToNoDependency<T%>(#this, x, y);
static method _extension#0|_unnecessaryDueToExplicitParameterTypeNamed<T extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed::T% x, ({required x: self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed::T%, required y: core::int}) → self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed::T% y) → self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed::T%
  return throw "";
static method _extension#0|get#_unnecessaryDueToExplicitParameterTypeNamed(lowered final core::int #this) → <T extends core::Object? = dynamic>(T%, ({required x: T%, required y: core::int}) → T%) → T%
  return <T extends core::Object? = dynamic>(T% x, ({required x: T%, required y: core::int}) → T% y) → T% => self::_extension#0|_unnecessaryDueToExplicitParameterTypeNamed<T%>(#this, x, y);
static method _extension#0|_parenthesized<T extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_parenthesized::T% x, (self::_extension#0|_parenthesized::T%) → void y) → void
  return throw "";
static method _extension#0|get#_parenthesized(lowered final core::int #this) → <T extends core::Object? = dynamic>(T%, (T%) → void) → void
  return <T extends core::Object? = dynamic>(T% x, (T%) → void y) → void => self::_extension#0|_parenthesized<T%>(#this, x, y);
static method _extension#0|_parenthesizedNamed<T extends core::Object? = dynamic>(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a = #C1, required (self::_extension#0|_parenthesizedNamed::T%) → void b = #C1}) → void
  return throw "";
static method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → <T extends core::Object? = dynamic>({a: T%, b: (T%) → void}) → void
  return <T extends core::Object? = dynamic>({T% a = #C1, (T%) → void b = #C1}) → void => self::_extension#0|_parenthesizedNamed<T%>(#this, a: a, b: b);
static method _extension#0|_parenthesizedTwice<T extends core::Object? = dynamic>(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void
  return throw "";
static method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → <T extends core::Object? = dynamic>(T%, (T%) → void) → void
  return <T extends core::Object? = dynamic>(T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice<T%>(#this, x, y);
static method _extension#0|_parenthesizedTwiceNamed<T extends core::Object? = dynamic>(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a = #C1, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b = #C1}) → void
  return throw "";
static method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → <T extends core::Object? = dynamic>({a: T%, b: (T%) → void}) → void
  return <T extends core::Object? = dynamic>({T% a = #C1, (T%) → void b = #C1}) → void => self::_extension#0|_parenthesizedTwiceNamed<T%>(#this, a: a, b: b);
static method main() → dynamic {}

constants  {
  #C1 = null
}
