library /*isNonNullableByDefault*/;
import self as self;
import "dart:async" as asy;
import "dart:core" as core;

import "dart:async";

static method throwSync() → asy::Future<void> {
  throw "";
}
static method allYield() → asy::Future<void> async /* futureValueType= void */ {
  await 0;
  await self::allYield2();
}
static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
  await 0;
  await self::allYield3();
}
static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
  await 0;
  self::throwSync();
}
static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
  final asy::Completer<void> completer = asy::Completer::•<void>();
  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
    await self::allYield();
    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
  }, (core::Object e, core::StackTrace s) → void {
    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
  });
  return completer.{asy::Completer::future}{asy::Future<void>};
}
static method main() → dynamic {}
