Format python files using yapf

Change-Id: I8b7b97efb6bfdcceef9efc533cdaa0675ab7db40
diff --git a/tools/run_on_app.py b/tools/run_on_app.py
index 0196e3f..8684f89 100755
--- a/tools/run_on_app.py
+++ b/tools/run_on_app.py
@@ -40,164 +40,167 @@
 FIND_MIN_XMX_FILE = 'find_min_xmx_results'
 FIND_MIN_XMX_DIR = 'find_min_xmx'
 
+
 def ParseOptions(argv):
-  result = argparse.ArgumentParser()
-  result.add_argument('--compiler',
-                    help='The compiler to use',
-                    choices=COMPILERS)
-  result.add_argument('--compiler-build',
-                    help='Compiler build to use',
-                    choices=COMPILER_BUILDS,
-                    default='lib')
-  result.add_argument('--no-fail-fast',
-                    help='Whether run_on_app.py should report all failures '
-                         'and not just the first one',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--hash',
-                    help='The version of D8/R8 to use')
-  result.add_argument('--app',
-                    help='What app to run on',
-                    choices=APPS)
-  result.add_argument('--run-all',
-                    help='Compile all possible combinations',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--expect-oom',
-                    help='Expect that compilation will fail with an OOM',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--type',
-                    help='Default for R8: deploy, for D8: proguarded',
-                    choices=TYPES)
-  result.add_argument('--out',
-                    help='Where to place the output',
-                    default=utils.BUILD)
-  result.add_argument('--no-build',
-                    help='Run without building first',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--max-memory',
-                    help='The maximum memory in MB to run with',
-                    type=int)
-  result.add_argument('--find-min-xmx',
-                    help='Find the minimum amount of memory we can run in',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--find-min-xmx-min-memory',
-                    help='Setting the minimum memory baseline to run in',
-                    type=int)
-  result.add_argument('--find-min-xmx-max-memory',
-                    help='Setting the maximum memory baseline to run in',
-                    type=int)
-  result.add_argument('--find-min-xmx-range-size',
-                    help='Setting the size of the acceptable memory range',
-                    type=int,
-                    default=32)
-  result.add_argument('--find-min-xmx-archive',
-                    help='Archive find-min-xmx results on GCS',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--no-extra-pgconf', '--no_extra_pgconf',
-                    help='Build without the following extra rules: ' +
-                         '-printconfiguration, -printmapping, -printseeds, ' +
-                         '-printusage',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--timeout',
-                    type=int,
-                    default=0,
-                    help='Set timeout instead of waiting for OOM.')
-  result.add_argument('--ignore-java-version',
-                    help='Do not check java version',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--no-libraries',
-                    help='Do not pass in libraries, even if they exist in conf',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--disable-assertions', '--disable_assertions', '-da',
-                    help='Disable Java assertions when running the compiler '
-                         '(default enabled)',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--debug-agent',
-                    help='Run with debug agent.',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--version',
-                    help='The version of the app to run')
-  result.add_argument('-k',
-                    help='Override the default ProGuard keep rules')
-  result.add_argument('--compiler-flags',
-                    help='Additional option(s) for the compiler. ' +
-                         'If passing several options use a quoted string.')
-  result.add_argument('--r8-flags',
-                    help='Additional option(s) for the compiler. ' +
-                         'Same as --compiler-flags, keeping it for backward'
-                         ' compatibility. ' +
-                         'If passing several options use a quoted string.')
-  result.add_argument('--track-memory-to-file',
-                    help='Track how much memory the jvm is using while ' +
-                    ' compiling. Output to the specified file.')
-  result.add_argument('--profile',
-                    help='Profile R8 run.',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--dump-args-file',
-                    help='Dump a file with the arguments for the specified ' +
-                    'configuration. For use as a @<file> argument to perform ' +
-                    'the run.')
-  result.add_argument('--print-runtimeraw',
-                    metavar='BENCHMARKNAME',
-                    help='Print the line \'<BENCHMARKNAME>(RunTimeRaw):' +
+    result = argparse.ArgumentParser()
+    result.add_argument('--compiler',
+                        help='The compiler to use',
+                        choices=COMPILERS)
+    result.add_argument('--compiler-build',
+                        help='Compiler build to use',
+                        choices=COMPILER_BUILDS,
+                        default='lib')
+    result.add_argument('--no-fail-fast',
+                        help='Whether run_on_app.py should report all failures '
+                        'and not just the first one',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--hash', help='The version of D8/R8 to use')
+    result.add_argument('--app', help='What app to run on', choices=APPS)
+    result.add_argument('--run-all',
+                        help='Compile all possible combinations',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--expect-oom',
+                        help='Expect that compilation will fail with an OOM',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--type',
+                        help='Default for R8: deploy, for D8: proguarded',
+                        choices=TYPES)
+    result.add_argument('--out',
+                        help='Where to place the output',
+                        default=utils.BUILD)
+    result.add_argument('--no-build',
+                        help='Run without building first',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--max-memory',
+                        help='The maximum memory in MB to run with',
+                        type=int)
+    result.add_argument('--find-min-xmx',
+                        help='Find the minimum amount of memory we can run in',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--find-min-xmx-min-memory',
+                        help='Setting the minimum memory baseline to run in',
+                        type=int)
+    result.add_argument('--find-min-xmx-max-memory',
+                        help='Setting the maximum memory baseline to run in',
+                        type=int)
+    result.add_argument('--find-min-xmx-range-size',
+                        help='Setting the size of the acceptable memory range',
+                        type=int,
+                        default=32)
+    result.add_argument('--find-min-xmx-archive',
+                        help='Archive find-min-xmx results on GCS',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--no-extra-pgconf',
+                        '--no_extra_pgconf',
+                        help='Build without the following extra rules: ' +
+                        '-printconfiguration, -printmapping, -printseeds, ' +
+                        '-printusage',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--timeout',
+                        type=int,
+                        default=0,
+                        help='Set timeout instead of waiting for OOM.')
+    result.add_argument('--ignore-java-version',
+                        help='Do not check java version',
+                        default=False,
+                        action='store_true')
+    result.add_argument(
+        '--no-libraries',
+        help='Do not pass in libraries, even if they exist in conf',
+        default=False,
+        action='store_true')
+    result.add_argument(
+        '--disable-assertions',
+        '--disable_assertions',
+        '-da',
+        help='Disable Java assertions when running the compiler '
+        '(default enabled)',
+        default=False,
+        action='store_true')
+    result.add_argument('--debug-agent',
+                        help='Run with debug agent.',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--version', help='The version of the app to run')
+    result.add_argument('-k', help='Override the default ProGuard keep rules')
+    result.add_argument('--compiler-flags',
+                        help='Additional option(s) for the compiler. ' +
+                        'If passing several options use a quoted string.')
+    result.add_argument('--r8-flags',
+                        help='Additional option(s) for the compiler. ' +
+                        'Same as --compiler-flags, keeping it for backward'
+                        ' compatibility. ' +
+                        'If passing several options use a quoted string.')
+    result.add_argument('--track-memory-to-file',
+                        help='Track how much memory the jvm is using while ' +
+                        ' compiling. Output to the specified file.')
+    result.add_argument('--profile',
+                        help='Profile R8 run.',
+                        default=False,
+                        action='store_true')
+    result.add_argument(
+        '--dump-args-file',
+        help='Dump a file with the arguments for the specified ' +
+        'configuration. For use as a @<file> argument to perform ' + 'the run.')
+    result.add_argument('--print-runtimeraw',
+                        metavar='BENCHMARKNAME',
+                        help='Print the line \'<BENCHMARKNAME>(RunTimeRaw):' +
                         ' <elapsed> ms\' at the end where <elapsed> is' +
                         ' the elapsed time in milliseconds.')
-  result.add_argument('--print-memoryuse',
-                    metavar='BENCHMARKNAME',
-                    help='Print the line \'<BENCHMARKNAME>(MemoryUse):' +
+    result.add_argument('--print-memoryuse',
+                        metavar='BENCHMARKNAME',
+                        help='Print the line \'<BENCHMARKNAME>(MemoryUse):' +
                         ' <mem>\' at the end where <mem> is the peak' +
                         ' peak resident set size (VmHWM) in bytes.')
-  result.add_argument('--print-dexsegments',
-                    metavar='BENCHMARKNAME',
-                    help='Print the sizes of individual dex segments as ' +
+    result.add_argument('--print-dexsegments',
+                        metavar='BENCHMARKNAME',
+                        help='Print the sizes of individual dex segments as ' +
                         '\'<BENCHMARKNAME>-<segment>(CodeSize): <bytes>\'')
-  result.add_argument('--track-time-in-memory',
-                    help='Plot the times taken from memory starting point to '
-                         'end-point with defined memory increment',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--track-time-in-memory-max',
-                    help='Setting the maximum memory baseline to run in',
-                    type=int)
-  result.add_argument('--track-time-in-memory-min',
-                    help='Setting the minimum memory baseline to run in',
-                    type=int)
-  result.add_argument('--track-time-in-memory-increment',
-                    help='Setting the increment',
-                    type=int,
-                    default=32)
-  result.add_argument('--print-times',
-                    help='Include timing',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--cpu-list',
-                    help='Run under \'taskset\' with these CPUs. See '
-                         'the \'taskset\' -c option for the format')
-  result.add_argument('--quiet',
-                    help='Disable compiler logging',
-                    default=False,
-                    action='store_true')
-  result.add_argument('--workers',
-                    help='Number of workers to use',
-                    default=1,
-                    type=int)
-  (options, args) = result.parse_known_args(argv)
-  assert not options.hash or options.no_build, (
-      'Argument --no-build is required when using --hash')
-  assert not options.hash or options.compiler_build == 'full', (
-      'Compiler build lib not yet supported with --hash')
-  return (options, args)
+    result.add_argument(
+        '--track-time-in-memory',
+        help='Plot the times taken from memory starting point to '
+        'end-point with defined memory increment',
+        default=False,
+        action='store_true')
+    result.add_argument('--track-time-in-memory-max',
+                        help='Setting the maximum memory baseline to run in',
+                        type=int)
+    result.add_argument('--track-time-in-memory-min',
+                        help='Setting the minimum memory baseline to run in',
+                        type=int)
+    result.add_argument('--track-time-in-memory-increment',
+                        help='Setting the increment',
+                        type=int,
+                        default=32)
+    result.add_argument('--print-times',
+                        help='Include timing',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--cpu-list',
+                        help='Run under \'taskset\' with these CPUs. See '
+                        'the \'taskset\' -c option for the format')
+    result.add_argument('--quiet',
+                        help='Disable compiler logging',
+                        default=False,
+                        action='store_true')
+    result.add_argument('--workers',
+                        help='Number of workers to use',
+                        default=1,
+                        type=int)
+    (options, args) = result.parse_known_args(argv)
+    assert not options.hash or options.no_build, (
+        'Argument --no-build is required when using --hash')
+    assert not options.hash or options.compiler_build == 'full', (
+        'Compiler build lib not yet supported with --hash')
+    return (options, args)
+
 
 # Most apps have -printmapping, -printseeds, -printusage and
 # -printconfiguration in the Proguard configuration. However we don't
@@ -205,570 +208,597 @@
 # Instead generate an auxiliary Proguard configuration placing these
 # output files together with the dex output.
 def GenerateAdditionalProguardConfiguration(temp, outdir):
-  name = "output.config"
-  with open(os.path.join(temp, name), 'w') as f:
-    f.write('-printmapping ' + os.path.join(outdir, 'proguard.map') + "\n")
-    f.write('-printseeds ' + os.path.join(outdir, 'proguard.seeds') + "\n")
-    f.write('-printusage ' + os.path.join(outdir, 'proguard.usage') + "\n")
-    f.write('-printconfiguration ' + os.path.join(outdir, 'proguard.config') + "\n")
-    return os.path.abspath(f.name)
+    name = "output.config"
+    with open(os.path.join(temp, name), 'w') as f:
+        f.write('-printmapping ' + os.path.join(outdir, 'proguard.map') + "\n")
+        f.write('-printseeds ' + os.path.join(outdir, 'proguard.seeds') + "\n")
+        f.write('-printusage ' + os.path.join(outdir, 'proguard.usage') + "\n")
+        f.write('-printconfiguration ' +
+                os.path.join(outdir, 'proguard.config') + "\n")
+        return os.path.abspath(f.name)
+
 
 # Please add bug number for disabled permutations and please explicitly
 # do Bug: #BUG in the commit message of disabling to ensure re-enabling
 DISABLED_PERMUTATIONS = [
-  # (app, version, type), e.g., ('gmail', '180826.15', 'deploy')
+    # (app, version, type), e.g., ('gmail', '180826.15', 'deploy')
 ]
 
+
 def get_permutations():
-  data_providers = {
-      'nest': nest_data,
-      'youtube': youtube_data,
-      'chrome': chrome_data,
-      'gmail': gmail_data,
-  }
-  # Check to ensure that we add all variants here.
-  assert len(APPS) == len(data_providers)
-  for app, data in data_providers.items():
-    for version in data.VERSIONS:
-      for type in data.VERSIONS[version]:
-        if (app, version, type) not in DISABLED_PERMUTATIONS:
-          # Only run with R8 lib to reduce cycle times.
-          for use_r8lib in [True]:
-            yield app, version, type, use_r8lib
+    data_providers = {
+        'nest': nest_data,
+        'youtube': youtube_data,
+        'chrome': chrome_data,
+        'gmail': gmail_data,
+    }
+    # Check to ensure that we add all variants here.
+    assert len(APPS) == len(data_providers)
+    for app, data in data_providers.items():
+        for version in data.VERSIONS:
+            for type in data.VERSIONS[version]:
+                if (app, version, type) not in DISABLED_PERMUTATIONS:
+                    # Only run with R8 lib to reduce cycle times.
+                    for use_r8lib in [True]:
+                        yield app, version, type, use_r8lib
+
 
 def run_all(options, args):
-  # Build first so that each job won't.
-  if should_build(options):
-    gradle.RunGradle([utils.GRADLE_TASK_R8LIB])
-    options.no_build = True
-  assert not should_build(options)
+    # Build first so that each job won't.
+    if should_build(options):
+        gradle.RunGradle([utils.GRADLE_TASK_R8LIB])
+        options.no_build = True
+    assert not should_build(options)
 
-  # Args will be destroyed
-  assert len(args) == 0
-  jobs = []
-  for name, version, type, use_r8lib in get_permutations():
-    compiler = 'r8' if type == 'deploy' else 'd8'
-    compiler_build = 'lib' if use_r8lib else 'full'
-    fixed_options = copy.copy(options)
-    fixed_options.app = name
-    fixed_options.version = version
-    fixed_options.compiler = compiler
-    fixed_options.compiler_build = compiler_build
-    fixed_options.type = type
-    jobs.append(
-        create_job(
-            compiler, compiler_build, name, fixed_options, type, version))
-  exit_code = thread_utils.run_in_parallel(
-      jobs,
-      number_of_workers=options.workers,
-      stop_on_first_failure=not options.no_fail_fast)
-  exit(exit_code)
+    # Args will be destroyed
+    assert len(args) == 0
+    jobs = []
+    for name, version, type, use_r8lib in get_permutations():
+        compiler = 'r8' if type == 'deploy' else 'd8'
+        compiler_build = 'lib' if use_r8lib else 'full'
+        fixed_options = copy.copy(options)
+        fixed_options.app = name
+        fixed_options.version = version
+        fixed_options.compiler = compiler
+        fixed_options.compiler_build = compiler_build
+        fixed_options.type = type
+        jobs.append(
+            create_job(compiler, compiler_build, name, fixed_options, type,
+                       version))
+    exit_code = thread_utils.run_in_parallel(
+        jobs,
+        number_of_workers=options.workers,
+        stop_on_first_failure=not options.no_fail_fast)
+    exit(exit_code)
+
 
 def create_job(compiler, compiler_build, name, options, type, version):
-  return lambda worker_id: run_job(
-      compiler, compiler_build, name, options, type, version, worker_id)
+    return lambda worker_id: run_job(compiler, compiler_build, name, options,
+                                     type, version, worker_id)
 
-def run_job(
-    compiler, compiler_build, name, options, type, version, worker_id):
-  print_thread(
-      'Executing %s/%s with %s %s %s'
-          % (compiler, compiler_build, name, version, type),
-      worker_id)
-  if worker_id is not None:
-    options.out = os.path.join(options.out, str(worker_id))
-    os.makedirs(options.out, exist_ok=True)
-  exit_code = run_with_options(options, [], worker_id=worker_id)
-  if exit_code:
+
+def run_job(compiler, compiler_build, name, options, type, version, worker_id):
     print_thread(
-        'Failed %s %s %s with %s/%s'
-            % (name, version, type, compiler, compiler_build),
-        worker_id)
-  return exit_code
+        'Executing %s/%s with %s %s %s' %
+        (compiler, compiler_build, name, version, type), worker_id)
+    if worker_id is not None:
+        options.out = os.path.join(options.out, str(worker_id))
+        os.makedirs(options.out, exist_ok=True)
+    exit_code = run_with_options(options, [], worker_id=worker_id)
+    if exit_code:
+        print_thread(
+            'Failed %s %s %s with %s/%s' %
+            (name, version, type, compiler, compiler_build), worker_id)
+    return exit_code
+
 
 def find_min_xmx(options, args):
-  # Args will be destroyed
-  assert len(args) == 0
-  # If we can run in 128 MB then we are good (which we can for small examples
-  # or D8 on medium sized examples)
-  if options.find_min_xmx_min_memory:
-    not_working = options.find_min_xmx_min_memory
-  elif options.compiler == 'd8':
-    not_working = 128
-  else:
-    not_working = 1024
-  if options.find_min_xmx_max_memory:
-    working = options.find_min_xmx_max_memory
-  else:
-    working = 1024 * 8
-  exit_code = 0
-  range = int(options.find_min_xmx_range_size)
-  while working - not_working > range:
-    next_candidate = int(working - ((working - not_working)/2))
-    print('working: %s, non_working: %s, next_candidate: %s' %
-          (working, not_working, next_candidate))
-    extra_args = ['-Xmx%sM' % next_candidate]
-    t0 = time.time()
-    exit_code = run_with_options(options, [], extra_args)
-    t1 = time.time()
-    print('Running took: %s ms' % (1000.0 * (t1 - t0)))
-    if exit_code != 0:
-      if exit_code not in [OOM_EXIT_CODE, TIMEOUT_KILL_CODE]:
-        print('Non OOM/Timeout error executing, exiting')
-        return 2
-    if exit_code == 0:
-      working = next_candidate
-    elif exit_code == TIMEOUT_KILL_CODE:
-      print('Timeout. Continue to the next candidate.')
-      not_working = next_candidate
+    # Args will be destroyed
+    assert len(args) == 0
+    # If we can run in 128 MB then we are good (which we can for small examples
+    # or D8 on medium sized examples)
+    if options.find_min_xmx_min_memory:
+        not_working = options.find_min_xmx_min_memory
+    elif options.compiler == 'd8':
+        not_working = 128
     else:
-      assert exit_code == OOM_EXIT_CODE
-      not_working = next_candidate
+        not_working = 1024
+    if options.find_min_xmx_max_memory:
+        working = options.find_min_xmx_max_memory
+    else:
+        working = 1024 * 8
+    exit_code = 0
+    range = int(options.find_min_xmx_range_size)
+    while working - not_working > range:
+        next_candidate = int(working - ((working - not_working) / 2))
+        print('working: %s, non_working: %s, next_candidate: %s' %
+              (working, not_working, next_candidate))
+        extra_args = ['-Xmx%sM' % next_candidate]
+        t0 = time.time()
+        exit_code = run_with_options(options, [], extra_args)
+        t1 = time.time()
+        print('Running took: %s ms' % (1000.0 * (t1 - t0)))
+        if exit_code != 0:
+            if exit_code not in [OOM_EXIT_CODE, TIMEOUT_KILL_CODE]:
+                print('Non OOM/Timeout error executing, exiting')
+                return 2
+        if exit_code == 0:
+            working = next_candidate
+        elif exit_code == TIMEOUT_KILL_CODE:
+            print('Timeout. Continue to the next candidate.')
+            not_working = next_candidate
+        else:
+            assert exit_code == OOM_EXIT_CODE
+            not_working = next_candidate
 
-  assert working - not_working <= range
-  found_range = 'Found range: %s - %s' % (not_working, working)
-  print(found_range)
+    assert working - not_working <= range
+    found_range = 'Found range: %s - %s' % (not_working, working)
+    print(found_range)
 
-  if options.find_min_xmx_archive:
-    sha = utils.get_HEAD_sha1()
-    (version, _) = get_version_and_data(options)
-    destination = os.path.join(
-        utils.R8_TEST_RESULTS_BUCKET,
-        FIND_MIN_XMX_DIR,
-        sha,
-        options.compiler,
-        options.compiler_build,
-        options.app,
-        version,
-        get_type(options))
-    gs_destination = 'gs://%s' % destination
-    utils.archive_value(FIND_MIN_XMX_FILE, gs_destination, found_range + '\n')
+    if options.find_min_xmx_archive:
+        sha = utils.get_HEAD_sha1()
+        (version, _) = get_version_and_data(options)
+        destination = os.path.join(utils.R8_TEST_RESULTS_BUCKET,
+                                   FIND_MIN_XMX_DIR, sha, options.compiler,
+                                   options.compiler_build, options.app, version,
+                                   get_type(options))
+        gs_destination = 'gs://%s' % destination
+        utils.archive_value(FIND_MIN_XMX_FILE, gs_destination,
+                            found_range + '\n')
 
-  return 0
+    return 0
+
 
 def print_min_xmx_ranges_for_hash(hash, compiler, compiler_build):
-  app_directory = os.path.join(
-      utils.R8_TEST_RESULTS_BUCKET,
-      FIND_MIN_XMX_DIR,
-      hash,
-      compiler,
-      compiler_build)
-  gs_base = 'gs://%s' % app_directory
-  for app in utils.ls_files_on_cloud_storage(gs_base).strip().split('\n'):
-    for version in utils.ls_files_on_cloud_storage(app).strip().split('\n'):
-      for type in utils.ls_files_on_cloud_storage(version).strip().split('\n'):
-        gs_location = '%s%s' % (type, FIND_MIN_XMX_FILE)
-        value = utils.cat_file_on_cloud_storage(gs_location, ignore_errors=True)
-        print('%s\n' % value)
+    app_directory = os.path.join(utils.R8_TEST_RESULTS_BUCKET, FIND_MIN_XMX_DIR,
+                                 hash, compiler, compiler_build)
+    gs_base = 'gs://%s' % app_directory
+    for app in utils.ls_files_on_cloud_storage(gs_base).strip().split('\n'):
+        for version in utils.ls_files_on_cloud_storage(app).strip().split('\n'):
+            for type in utils.ls_files_on_cloud_storage(version).strip().split(
+                    '\n'):
+                gs_location = '%s%s' % (type, FIND_MIN_XMX_FILE)
+                value = utils.cat_file_on_cloud_storage(gs_location,
+                                                        ignore_errors=True)
+                print('%s\n' % value)
+
 
 def track_time_in_memory(options, args):
-  # Args will be destroyed
-  assert len(args) == 0
-  if not options.track_time_in_memory_min:
-    raise Exception(
-        'You have to specify --track_time_in_memory_min when running with '
-        '--track-time-in-memory')
-  if not options.track_time_in_memory_max:
-    raise Exception(
-        'You have to specify --track_time_in_memory_max when running with '
-        '--track-time-in-memory')
-  if not options.track_time_in_memory_increment:
-    raise Exception(
-        'You have to specify --track_time_in_memory_increment when running '
-        'with --track-time-in-memory')
-  current = options.track_time_in_memory_min
-  print('Memory (KB)\tTime (ms)')
-  with utils.TempDir() as temp:
-    stdout = os.path.join(temp, 'stdout')
-    stdout_fd = open(stdout, 'w')
-    while current <= options.track_time_in_memory_max:
-      extra_args = ['-Xmx%sM' % current]
-      t0 = time.time()
-      exit_code = run_with_options(options, [], extra_args, stdout_fd, quiet=True)
-      t1 = time.time()
-      total = (1000.0 * (t1 - t0)) if exit_code == 0 else -1
-      print('%s\t%s' % (current, total))
-      current += options.track_time_in_memory_increment
+    # Args will be destroyed
+    assert len(args) == 0
+    if not options.track_time_in_memory_min:
+        raise Exception(
+            'You have to specify --track_time_in_memory_min when running with '
+            '--track-time-in-memory')
+    if not options.track_time_in_memory_max:
+        raise Exception(
+            'You have to specify --track_time_in_memory_max when running with '
+            '--track-time-in-memory')
+    if not options.track_time_in_memory_increment:
+        raise Exception(
+            'You have to specify --track_time_in_memory_increment when running '
+            'with --track-time-in-memory')
+    current = options.track_time_in_memory_min
+    print('Memory (KB)\tTime (ms)')
+    with utils.TempDir() as temp:
+        stdout = os.path.join(temp, 'stdout')
+        stdout_fd = open(stdout, 'w')
+        while current <= options.track_time_in_memory_max:
+            extra_args = ['-Xmx%sM' % current]
+            t0 = time.time()
+            exit_code = run_with_options(options, [],
+                                         extra_args,
+                                         stdout_fd,
+                                         quiet=True)
+            t1 = time.time()
+            total = (1000.0 * (t1 - t0)) if exit_code == 0 else -1
+            print('%s\t%s' % (current, total))
+            current += options.track_time_in_memory_increment
 
-  return 0
+    return 0
+
 
 def main(argv):
-  (options, args) = ParseOptions(argv)
-  if options.expect_oom and not options.max_memory:
-    raise Exception(
-        'You should only use --expect-oom if also specifying --max-memory')
-  if options.expect_oom and options.timeout:
-    raise Exception(
-        'You should not use --timeout when also specifying --expect-oom')
-  if options.find_min_xmx and options.track_time_in_memory:
-    raise Exception(
-        'You cannot both find the min xmx and track time at the same time')
-  if options.run_all:
-    return run_all(options, args)
-  if options.find_min_xmx:
-    return find_min_xmx(options, args)
-  if options.track_time_in_memory:
-    return track_time_in_memory(options, args)
-  exit_code = run_with_options(options, args, quiet=options.quiet)
-  if options.expect_oom:
-    exit_code = 0 if exit_code == OOM_EXIT_CODE else 1
-  return exit_code
+    (options, args) = ParseOptions(argv)
+    if options.expect_oom and not options.max_memory:
+        raise Exception(
+            'You should only use --expect-oom if also specifying --max-memory')
+    if options.expect_oom and options.timeout:
+        raise Exception(
+            'You should not use --timeout when also specifying --expect-oom')
+    if options.find_min_xmx and options.track_time_in_memory:
+        raise Exception(
+            'You cannot both find the min xmx and track time at the same time')
+    if options.run_all:
+        return run_all(options, args)
+    if options.find_min_xmx:
+        return find_min_xmx(options, args)
+    if options.track_time_in_memory:
+        return track_time_in_memory(options, args)
+    exit_code = run_with_options(options, args, quiet=options.quiet)
+    if options.expect_oom:
+        exit_code = 0 if exit_code == OOM_EXIT_CODE else 1
+    return exit_code
+
 
 def get_version_and_data(options):
-  if options.app == 'nest':
-    version = options.version or '20180926'
-    data = nest_data
-  elif options.app == 'youtube':
-    version = options.version or youtube_data.LATEST_VERSION
-    data = youtube_data
-  elif options.app == 'chrome':
-    version = options.version or '180917'
-    data = chrome_data
-  elif options.app == 'gmail':
-    version = options.version or '170604.16'
-    data = gmail_data
-  else:
-    raise Exception("You need to specify '--app={}'".format('|'.join(APPS)))
-  return version, data
+    if options.app == 'nest':
+        version = options.version or '20180926'
+        data = nest_data
+    elif options.app == 'youtube':
+        version = options.version or youtube_data.LATEST_VERSION
+        data = youtube_data
+    elif options.app == 'chrome':
+        version = options.version or '180917'
+        data = chrome_data
+    elif options.app == 'gmail':
+        version = options.version or '170604.16'
+        data = gmail_data
+    else:
+        raise Exception("You need to specify '--app={}'".format('|'.join(APPS)))
+    return version, data
+
 
 def get_type(options):
-  if not options.type:
-    return 'deploy' if options.compiler == 'r8' else 'proguarded'
-  return options.type
+    if not options.type:
+        return 'deploy' if options.compiler == 'r8' else 'proguarded'
+    return options.type
+
 
 def has_injars_and_libraryjars(pgconfs):
-  # Check if there are -injars and -libraryjars in the configuration.
-  has_injars = False
-  has_libraryjars = False
-  for pgconf in pgconfs:
-    pgconf_dirname = os.path.abspath(os.path.dirname(pgconf))
-    with open(pgconf) as pgconf_file:
-      for line in pgconf_file:
-        trimmed = line.strip()
-        if trimmed.startswith('-injars'):
-          has_injars = True
-        elif trimmed.startswith('-libraryjars'):
-          has_libraryjars = True
-        if has_injars and has_libraryjars:
-          return True
-  return False
+    # Check if there are -injars and -libraryjars in the configuration.
+    has_injars = False
+    has_libraryjars = False
+    for pgconf in pgconfs:
+        pgconf_dirname = os.path.abspath(os.path.dirname(pgconf))
+        with open(pgconf) as pgconf_file:
+            for line in pgconf_file:
+                trimmed = line.strip()
+                if trimmed.startswith('-injars'):
+                    has_injars = True
+                elif trimmed.startswith('-libraryjars'):
+                    has_libraryjars = True
+                if has_injars and has_libraryjars:
+                    return True
+    return False
+
 
 def check_no_injars_and_no_libraryjars(pgconfs):
-  # Ensure that there are no -injars or -libraryjars in the configuration.
-  for pgconf in pgconfs:
-    pgconf_dirname = os.path.abspath(os.path.dirname(pgconf))
-    with open(pgconf) as pgconf_file:
-      for line in pgconf_file:
-        trimmed = line.strip()
-        if trimmed.startswith('-injars'):
-          raise Exception("Unexpected -injars found in " + pgconf)
-        elif trimmed.startswith('-libraryjars'):
-          raise Exception("Unexpected -libraryjars found in " + pgconf)
+    # Ensure that there are no -injars or -libraryjars in the configuration.
+    for pgconf in pgconfs:
+        pgconf_dirname = os.path.abspath(os.path.dirname(pgconf))
+        with open(pgconf) as pgconf_file:
+            for line in pgconf_file:
+                trimmed = line.strip()
+                if trimmed.startswith('-injars'):
+                    raise Exception("Unexpected -injars found in " + pgconf)
+                elif trimmed.startswith('-libraryjars'):
+                    raise Exception("Unexpected -libraryjars found in " +
+                                    pgconf)
+
 
 def should_build(options):
-  return not options.no_build
+    return not options.no_build
 
-def build_desugared_library_dex(
-    options,
-    quiet,
-    temp,
-    android_java8_libs,
-    desugared_lib_pg_conf,
-    inputs,
-    outdir):
-  if not inputs:
-    raise Exception(
-        "If 'android_java8_libs' is specified the inputs must be explicit"
-            + "(not defined using '-injars' in Proguard configuration files)")
-  if outdir.endswith('.zip') or outdir.endswith('.jar'):
-    raise Exception(
-        "If 'android_java8_libs' is specified the output must be a directory")
 
-  jar = None
-  main = None
-  if options.hash:
-    jar = os.path.join(utils.LIBS, 'r8-' + options.hash + '.jar')
-    main = 'com.android.tools.r8.R8'
+def build_desugared_library_dex(options, quiet, temp, android_java8_libs,
+                                desugared_lib_pg_conf, inputs, outdir):
+    if not inputs:
+        raise Exception(
+            "If 'android_java8_libs' is specified the inputs must be explicit" +
+            "(not defined using '-injars' in Proguard configuration files)")
+    if outdir.endswith('.zip') or outdir.endswith('.jar'):
+        raise Exception(
+            "If 'android_java8_libs' is specified the output must be a directory"
+        )
 
-  # Determine the l8 tool.
-  assert(options.compiler_build in ['full', 'lib'])
-  lib_prefix = 'r8lib-' if options.compiler_build == 'lib' else ''
-  tool = lib_prefix + 'l8'
+    jar = None
+    main = None
+    if options.hash:
+        jar = os.path.join(utils.LIBS, 'r8-' + options.hash + '.jar')
+        main = 'com.android.tools.r8.R8'
 
-  # Prepare out directory.
-  android_java8_libs_output = os.path.join(temp, 'android_java8_libs')
-  os.makedirs(android_java8_libs_output)
+    # Determine the l8 tool.
+    assert (options.compiler_build in ['full', 'lib'])
+    lib_prefix = 'r8lib-' if options.compiler_build == 'lib' else ''
+    tool = lib_prefix + 'l8'
 
-  # Prepare arguments for L8.
-  args = [
-    '--desugared-lib', android_java8_libs['config'],
-    '--lib', android_java8_libs['library'],
-    '--output', android_java8_libs_output,
-    '--pg-conf', desugared_lib_pg_conf,
-    '--release',
-  ]
-  if 'pgconf' in android_java8_libs:
-    for pgconf in android_java8_libs['pgconf']:
-      args.extend(['--pg-conf', pgconf])
-  args.extend(android_java8_libs['program'])
+    # Prepare out directory.
+    android_java8_libs_output = os.path.join(temp, 'android_java8_libs')
+    os.makedirs(android_java8_libs_output)
 
-  # Run L8.
-  exit_code = toolhelper.run(
-      tool, args,
-      build=should_build(options),
-      debug=not options.disable_assertions,
-      quiet=quiet,
-      jar=jar,
-      main=main)
+    # Prepare arguments for L8.
+    args = [
+        '--desugared-lib',
+        android_java8_libs['config'],
+        '--lib',
+        android_java8_libs['library'],
+        '--output',
+        android_java8_libs_output,
+        '--pg-conf',
+        desugared_lib_pg_conf,
+        '--release',
+    ]
+    if 'pgconf' in android_java8_libs:
+        for pgconf in android_java8_libs['pgconf']:
+            args.extend(['--pg-conf', pgconf])
+    args.extend(android_java8_libs['program'])
 
-  # Copy the desugared library DEX to the output.
-  dex_file_name = (
-      'classes' + str(len(glob(os.path.join(outdir, '*.dex'))) + 1) + '.dex')
-  shutil.copyfile(
-      os.path.join(android_java8_libs_output, 'classes.dex'),
-      os.path.join(outdir, dex_file_name))
+    # Run L8.
+    exit_code = toolhelper.run(tool,
+                               args,
+                               build=should_build(options),
+                               debug=not options.disable_assertions,
+                               quiet=quiet,
+                               jar=jar,
+                               main=main)
 
-def run_with_options(
-    options, args, extra_args=None, stdout=None, quiet=False, worker_id=None):
-  if extra_args is None:
-    extra_args = []
-  app_provided_pg_conf = False;
-  # todo(121018500): remove when memory is under control
-  if not any('-Xmx' in arg for arg in extra_args):
-    if options.max_memory:
-      extra_args.append('-Xmx%sM' % options.max_memory)
+    # Copy the desugared library DEX to the output.
+    dex_file_name = ('classes' +
+                     str(len(glob(os.path.join(outdir, '*.dex'))) + 1) + '.dex')
+    shutil.copyfile(os.path.join(android_java8_libs_output, 'classes.dex'),
+                    os.path.join(outdir, dex_file_name))
+
+
+def run_with_options(options,
+                     args,
+                     extra_args=None,
+                     stdout=None,
+                     quiet=False,
+                     worker_id=None):
+    if extra_args is None:
+        extra_args = []
+    app_provided_pg_conf = False
+    # todo(121018500): remove when memory is under control
+    if not any('-Xmx' in arg for arg in extra_args):
+        if options.max_memory:
+            extra_args.append('-Xmx%sM' % options.max_memory)
+        else:
+            extra_args.append('-Xmx8G')
+    if not options.ignore_java_version:
+        utils.check_java_version()
+
+    if options.print_times:
+        extra_args.append('-Dcom.android.tools.r8.printtimes=1')
+
+    if not options.disable_assertions:
+        extra_args.append('-Dcom.android.tools.r8.enableTestAssertions=1')
+
+    outdir = options.out
+    (version_id, data) = get_version_and_data(options)
+
+    if options.compiler not in COMPILERS:
+        raise Exception("You need to specify '--compiler={}'".format(
+            '|'.join(COMPILERS)))
+
+    if options.compiler_build not in COMPILER_BUILDS:
+        raise Exception("You need to specify '--compiler-build={}'".format(
+            '|'.join(COMPILER_BUILDS)))
+
+    if not version_id in data.VERSIONS.keys():
+        print('No version {} for application {}'.format(version_id,
+                                                        options.app))
+        print('Valid versions are {}'.format(data.VERSIONS.keys()))
+        return 1
+
+    version = data.VERSIONS[version_id]
+
+    type = get_type(options)
+
+    if type not in version:
+        print('No type {} for version {}'.format(type, version))
+        print('Valid types are {}'.format(version.keys()))
+        return 1
+    values = version[type]
+
+    args.extend(['--output', outdir])
+    if 'min-api' in values:
+        args.extend(['--min-api', values['min-api']])
+
+    if 'main-dex-list' in values:
+        args.extend(['--main-dex-list', values['main-dex-list']])
+
+    inputs = values['inputs']
+    libraries = values['libraries'] if 'libraries' in values else []
+
+    if options.compiler == 'r8':
+        if 'pgconf' in values and not options.k:
+            sanitized_lib_path = os.path.join(os.path.abspath(outdir),
+                                              'sanitized_lib.jar')
+            if has_injars_and_libraryjars(values['pgconf']):
+                sanitized_pgconf_path = os.path.join(os.path.abspath(outdir),
+                                                     'sanitized.config')
+                SanitizeLibrariesInPgconf(sanitized_lib_path,
+                                          sanitized_pgconf_path,
+                                          values['pgconf'])
+                libraries = [sanitized_lib_path]
+                args.extend(['--pg-conf', sanitized_pgconf_path])
+                inputs = []
+            else:
+                # -injars without -libraryjars or vice versa is not supported.
+                check_no_injars_and_no_libraryjars(values['pgconf'])
+                for pgconf in values['pgconf']:
+                    args.extend(['--pg-conf', pgconf])
+                if 'sanitize_libraries' in values and values[
+                        'sanitize_libraries']:
+                    SanitizeLibraries(sanitized_lib_path, values['libraries'],
+                                      values['inputs'])
+                    libraries = [sanitized_lib_path]
+            app_provided_pg_conf = True
+            if 'pgconf_extra' in values:
+                extra_conf = os.path.join(os.path.abspath(outdir),
+                                          'pgconf_extra')
+                with open(extra_conf, 'w') as extra_f:
+                    extra_f.write(values['pgconf_extra'])
+                args.extend(['--pg-conf', extra_conf])
+        if options.k:
+            args.extend(['--pg-conf', options.k])
+        if 'maindexrules' in values:
+            for rules in values['maindexrules']:
+                args.extend(['--main-dex-rules', rules])
+        if 'allow-type-errors' in values:
+            extra_args.append('-Dcom.android.tools.r8.allowTypeErrors=1')
+        extra_args.append(
+            '-Dcom.android.tools.r8.disallowClassInlinerGracefulExit=1')
+        if 'system-properties' in values:
+            for system_property in values['system-properties']:
+                extra_args.append(system_property)
+
+    if options.debug_agent:
+        if not options.compiler_build == 'full':
+            print(
+                'WARNING: Running debugging agent on r8lib is questionable...')
+        extra_args.append(
+            '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005'
+        )
+
+    if not options.no_libraries:
+        for lib in libraries:
+            args.extend(['--lib', lib])
+
+    if not outdir.endswith('.zip') and not outdir.endswith('.jar') \
+        and not os.path.exists(outdir):
+        os.makedirs(outdir)
+
+    if options.hash:
+        # Download r8-<hash>.jar from
+        # https://storage.googleapis.com/r8-releases/raw/<hash>/.
+        download_path = archive.GetUploadDestination(options.hash, 'r8.jar',
+                                                     True)
+        assert utils.file_exists_on_cloud_storage(download_path), (
+            'Could not find r8.jar file from provided hash: %s' % options.hash)
+        destination = os.path.join(utils.LIBS, 'r8-' + options.hash + '.jar')
+        utils.download_file_from_cloud_storage(download_path,
+                                               destination,
+                                               quiet=quiet)
+
+    # Additional flags for the compiler from the configuration file.
+    if 'flags' in values:
+        args.extend(values['flags'].split(' '))
+    if options.compiler == 'r8':
+        if 'r8-flags' in values:
+            args.extend(values['r8-flags'].split(' '))
+
+    # Additional flags for the compiler from the command line.
+    if options.compiler_flags:
+        args.extend(options.compiler_flags.split(' '))
+    if options.r8_flags:
+        args.extend(options.r8_flags.split(' '))
+
+    # Feature jars.
+    features = values['features'] if 'features' in values else []
+    for i, feature in enumerate(features, start=1):
+        feature_out = os.path.join(outdir, 'feature-%d.zip' % i)
+        for feature_jar in feature['inputs']:
+            args.extend(['--feature', feature_jar, feature_out])
+
+    args.extend(inputs)
+
+    t0 = None
+    if options.dump_args_file:
+        with open(options.dump_args_file, 'w') as args_file:
+            args_file.writelines([arg + os.linesep for arg in args])
     else:
-      extra_args.append('-Xmx8G')
-  if not options.ignore_java_version:
-    utils.check_java_version()
+        with utils.TempDir() as temp:
+            if options.print_memoryuse and not options.track_memory_to_file:
+                options.track_memory_to_file = os.path.join(
+                    temp, utils.MEMORY_USE_TMP_FILE)
+            if options.compiler == 'r8' and app_provided_pg_conf:
+                # Ensure that output of -printmapping and -printseeds go to the output
+                # location and not where the app Proguard configuration places them.
+                if outdir.endswith('.zip') or outdir.endswith('.jar'):
+                    pg_outdir = os.path.dirname(outdir)
+                else:
+                    pg_outdir = outdir
+                if not options.no_extra_pgconf:
+                    additional_pg_conf = GenerateAdditionalProguardConfiguration(
+                        temp, os.path.abspath(pg_outdir))
+                    args.extend(['--pg-conf', additional_pg_conf])
 
-  if options.print_times:
-    extra_args.append('-Dcom.android.tools.r8.printtimes=1')
+            android_java8_libs = values.get('android_java8_libs')
+            if android_java8_libs:
+                desugared_lib_pg_conf = os.path.join(
+                    temp, 'desugared-lib-pg-conf.txt')
+                args.extend(['--desugared-lib', android_java8_libs['config']])
+                args.extend(
+                    ['--desugared-lib-pg-conf-output', desugared_lib_pg_conf])
 
-  if not options.disable_assertions:
-    extra_args.append('-Dcom.android.tools.r8.enableTestAssertions=1')
+            stderr_path = os.path.join(temp, 'stderr')
+            with open(stderr_path, 'w') as stderr:
+                jar = None
+                main = None
+                if options.compiler_build == 'full':
+                    tool = options.compiler
+                else:
+                    assert (options.compiler_build == 'lib')
+                    tool = 'r8lib-' + options.compiler
+                if options.hash:
+                    jar = os.path.join(utils.LIBS,
+                                       'r8-' + options.hash + '.jar')
+                    main = 'com.android.tools.r8.' + options.compiler.upper()
+                if should_build(options):
+                    gradle.RunGradle([
+                        utils.GRADLE_TASK_R8LIB
+                        if tool.startswith('r8lib') else UTILS.GRADLE_TASK_R8
+                    ])
+                t0 = time.time()
+                exit_code = toolhelper.run(
+                    tool,
+                    args,
+                    build=False,
+                    debug=not options.disable_assertions,
+                    profile=options.profile,
+                    track_memory_file=options.track_memory_to_file,
+                    extra_args=extra_args,
+                    stdout=stdout,
+                    stderr=stderr,
+                    timeout=options.timeout,
+                    quiet=quiet,
+                    cmd_prefix=['taskset', '-c', options.cpu_list]
+                    if options.cpu_list else [],
+                    jar=jar,
+                    main=main,
+                    worker_id=worker_id)
+            if exit_code != 0:
+                with open(stderr_path) as stderr:
+                    stderr_text = stderr.read()
+                    if not quiet:
+                        print(stderr_text)
+                    if 'java.lang.OutOfMemoryError' in stderr_text:
+                        if not quiet:
+                            print('Failure was OOM')
+                        return OOM_EXIT_CODE
+                    return exit_code
 
-  outdir = options.out
-  (version_id, data) = get_version_and_data(options)
+            if options.print_memoryuse:
+                print('{}(MemoryUse): {}'.format(
+                    options.print_memoryuse,
+                    utils.grep_memoryuse(options.track_memory_to_file)))
 
-  if options.compiler not in COMPILERS:
-    raise Exception("You need to specify '--compiler={}'"
-        .format('|'.join(COMPILERS)))
+            if android_java8_libs:
+                build_desugared_library_dex(options, quiet, temp,
+                                            android_java8_libs,
+                                            desugared_lib_pg_conf, inputs,
+                                            outdir)
 
-  if options.compiler_build not in COMPILER_BUILDS:
-    raise Exception("You need to specify '--compiler-build={}'"
-        .format('|'.join(COMPILER_BUILDS)))
+    if options.print_runtimeraw:
+        print('{}(RunTimeRaw): {} ms'.format(options.print_runtimeraw,
+                                             1000.0 * (time.time() - t0)))
 
-  if not version_id in data.VERSIONS.keys():
-    print('No version {} for application {}'
-        .format(version_id, options.app))
-    print('Valid versions are {}'.format(data.VERSIONS.keys()))
-    return 1
-
-  version = data.VERSIONS[version_id]
-
-  type = get_type(options)
-
-  if type not in version:
-    print('No type {} for version {}'.format(type, version))
-    print('Valid types are {}'.format(version.keys()))
-    return 1
-  values = version[type]
-
-  args.extend(['--output', outdir])
-  if 'min-api' in values:
-    args.extend(['--min-api', values['min-api']])
-
-  if 'main-dex-list' in values:
-    args.extend(['--main-dex-list', values['main-dex-list']])
-
-  inputs = values['inputs']
-  libraries = values['libraries'] if 'libraries' in values else []
-
-  if options.compiler == 'r8':
-    if 'pgconf' in values and not options.k:
-      sanitized_lib_path = os.path.join(
-          os.path.abspath(outdir), 'sanitized_lib.jar')
-      if has_injars_and_libraryjars(values['pgconf']):
-        sanitized_pgconf_path = os.path.join(
-            os.path.abspath(outdir), 'sanitized.config')
-        SanitizeLibrariesInPgconf(
-            sanitized_lib_path, sanitized_pgconf_path, values['pgconf'])
-        libraries = [sanitized_lib_path]
-        args.extend(['--pg-conf', sanitized_pgconf_path])
-        inputs = []
-      else:
-        # -injars without -libraryjars or vice versa is not supported.
-        check_no_injars_and_no_libraryjars(values['pgconf'])
-        for pgconf in values['pgconf']:
-          args.extend(['--pg-conf', pgconf])
-        if 'sanitize_libraries' in values and values['sanitize_libraries']:
-          SanitizeLibraries(
-            sanitized_lib_path, values['libraries'], values['inputs'])
-          libraries = [sanitized_lib_path]
-      app_provided_pg_conf = True
-      if 'pgconf_extra' in values:
-        extra_conf = os.path.join(os.path.abspath(outdir), 'pgconf_extra')
-        with open(extra_conf, 'w') as extra_f:
-          extra_f.write(values['pgconf_extra'])
-        args.extend(['--pg-conf', extra_conf])
-    if options.k:
-      args.extend(['--pg-conf', options.k])
-    if 'maindexrules' in values:
-      for rules in values['maindexrules']:
-        args.extend(['--main-dex-rules', rules])
-    if 'allow-type-errors' in values:
-      extra_args.append('-Dcom.android.tools.r8.allowTypeErrors=1')
-    extra_args.append(
-        '-Dcom.android.tools.r8.disallowClassInlinerGracefulExit=1')
-    if 'system-properties' in values:
-      for system_property in values['system-properties']:
-        extra_args.append(system_property)
-
-  if options.debug_agent:
-    if not options.compiler_build == 'full':
-      print('WARNING: Running debugging agent on r8lib is questionable...')
-    extra_args.append(
-      '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005')
-
-  if not options.no_libraries:
-    for lib in libraries:
-      args.extend(['--lib', lib])
-
-  if not outdir.endswith('.zip') and not outdir.endswith('.jar') \
-      and not os.path.exists(outdir):
-    os.makedirs(outdir)
-
-  if options.hash:
-    # Download r8-<hash>.jar from
-    # https://storage.googleapis.com/r8-releases/raw/<hash>/.
-    download_path = archive.GetUploadDestination(options.hash, 'r8.jar', True)
-    assert utils.file_exists_on_cloud_storage(download_path), (
-        'Could not find r8.jar file from provided hash: %s' % options.hash)
-    destination = os.path.join(utils.LIBS, 'r8-' + options.hash + '.jar')
-    utils.download_file_from_cloud_storage(
-        download_path, destination, quiet=quiet)
-
-  # Additional flags for the compiler from the configuration file.
-  if 'flags' in values:
-    args.extend(values['flags'].split(' '))
-  if options.compiler == 'r8':
-    if 'r8-flags' in values:
-      args.extend(values['r8-flags'].split(' '))
-
-  # Additional flags for the compiler from the command line.
-  if options.compiler_flags:
-    args.extend(options.compiler_flags.split(' '))
-  if options.r8_flags:
-    args.extend(options.r8_flags.split(' '))
-
-  # Feature jars.
-  features = values['features'] if 'features' in values else []
-  for i, feature in enumerate(features, start=1):
-    feature_out = os.path.join(outdir, 'feature-%d.zip' % i)
-    for feature_jar in feature['inputs']:
-      args.extend(['--feature', feature_jar, feature_out])
-
-  args.extend(inputs)
-
-  t0 = None
-  if options.dump_args_file:
-    with open(options.dump_args_file, 'w') as args_file:
-      args_file.writelines([arg + os.linesep for arg in args])
-  else:
-    with utils.TempDir() as temp:
-      if options.print_memoryuse and not options.track_memory_to_file:
-        options.track_memory_to_file = os.path.join(temp,
-            utils.MEMORY_USE_TMP_FILE)
-      if options.compiler == 'r8' and app_provided_pg_conf:
-        # Ensure that output of -printmapping and -printseeds go to the output
-        # location and not where the app Proguard configuration places them.
-        if outdir.endswith('.zip') or outdir.endswith('.jar'):
-          pg_outdir = os.path.dirname(outdir)
-        else:
-          pg_outdir = outdir
-        if not options.no_extra_pgconf:
-          additional_pg_conf = GenerateAdditionalProguardConfiguration(
-              temp, os.path.abspath(pg_outdir))
-          args.extend(['--pg-conf', additional_pg_conf])
-
-      android_java8_libs = values.get('android_java8_libs')
-      if android_java8_libs:
-        desugared_lib_pg_conf = os.path.join(
-            temp, 'desugared-lib-pg-conf.txt')
-        args.extend(['--desugared-lib', android_java8_libs['config']])
-        args.extend(
-            ['--desugared-lib-pg-conf-output', desugared_lib_pg_conf])
-
-      stderr_path = os.path.join(temp, 'stderr')
-      with open(stderr_path, 'w') as stderr:
-        jar = None
-        main = None
-        if options.compiler_build == 'full':
-          tool = options.compiler
-        else:
-          assert(options.compiler_build == 'lib')
-          tool = 'r8lib-' + options.compiler
-        if options.hash:
-          jar = os.path.join(utils.LIBS, 'r8-' + options.hash + '.jar')
-          main = 'com.android.tools.r8.' + options.compiler.upper()
-        if should_build(options):
-          gradle.RunGradle([
-              utils.GRADLE_TASK_R8LIB if tool.startswith('r8lib')
-              else UTILS.GRADLE_TASK_R8])
-        t0 = time.time()
-        exit_code = toolhelper.run(tool, args,
-            build=False,
-            debug=not options.disable_assertions,
-            profile=options.profile,
-            track_memory_file=options.track_memory_to_file,
-            extra_args=extra_args,
-            stdout=stdout,
-            stderr=stderr,
-            timeout=options.timeout,
-            quiet=quiet,
-            cmd_prefix=[
-                'taskset', '-c', options.cpu_list] if options.cpu_list else [],
-            jar=jar,
-            main=main,
-            worker_id=worker_id)
-      if exit_code != 0:
-        with open(stderr_path) as stderr:
-          stderr_text = stderr.read()
-          if not quiet:
-            print(stderr_text)
-          if 'java.lang.OutOfMemoryError' in stderr_text:
-            if not quiet:
-              print('Failure was OOM')
-            return OOM_EXIT_CODE
-          return exit_code
-
-      if options.print_memoryuse:
-        print('{}(MemoryUse): {}'
-            .format(options.print_memoryuse,
-                utils.grep_memoryuse(options.track_memory_to_file)))
-
-      if android_java8_libs:
-        build_desugared_library_dex(
-            options, quiet, temp, android_java8_libs,
-            desugared_lib_pg_conf, inputs, outdir)
-
-
-  if options.print_runtimeraw:
-    print('{}(RunTimeRaw): {} ms'
-        .format(options.print_runtimeraw, 1000.0 * (time.time() - t0)))
-
-  if options.print_dexsegments:
-    dex_files = glob(os.path.join(outdir, '*.dex'))
-    utils.print_dexsegments(options.print_dexsegments, dex_files)
-    print('{}-Total(CodeSize): {}'.format(
+    if options.print_dexsegments:
+        dex_files = glob(os.path.join(outdir, '*.dex'))
+        utils.print_dexsegments(options.print_dexsegments, dex_files)
+        print('{}-Total(CodeSize): {}'.format(
             options.print_dexsegments, compute_size_of_dex_files(dex_files)))
-  return 0
+    return 0
+
 
 def compute_size_of_dex_files(dex_files):
-  dex_size = 0
-  for dex_file in dex_files:
-    dex_size += os.path.getsize(dex_file)
-  return dex_size
+    dex_size = 0
+    for dex_file in dex_files:
+        dex_size += os.path.getsize(dex_file)
+    return dex_size
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
+    sys.exit(main(sys.argv[1:]))