  <table border="1" cellpadding="5">
    <tr bgcolor="#CCCCFF">
      {% if alltaskspage %}<td><b>User</b></td>{% endif %}
      <td><b>Description</b></td>
      <td><b>Benchmark Name</b></td>
      <td><b>Benchmark Args</b></td>
      <td><b>Browser Args (nopatch)</b></td>
      <td><b>Browser Args (withpatch)</b></td>
      <td><b>Target Platform</b></td>
      <td><b>Repeat Runs</b></td>
      <td><b>Variance Threshold</b></td>
      <td><b>Discard Outliers</b></td>
      <td><b>Pagesets Type</b></td>
      <td><b>Requested Time</b></td>
      <td><b>Completed Time</b></td>
      <td><b>Patches</b></td>
      <td><b>Telemetry Output (nopatch)</b></td>
      <td><b>Telemetry Output (withpatch)</b></td>
      <td><b>Results</b></td>
      {% if not alltaskspage %}<td><b>Delete</b></td>{% endif %}
    </tr>
    {% for task in chromium_try_tasks %}
    <tr {% if not task.completed_time %}bgcolor="#8FDF5F"{% endif %} >
      {% if alltaskspage %}<td>{{ task.username }}</td>{% endif %}
      <td>{{ task.description }}</td>
      <td>{{ task.benchmark_name }}</td>
      <td>{{ task.benchmark_arguments }}</td>
      <td>{{ task.browser_args_1 }}</td>
      <td>{{ task.browser_args_2 }}</td>
      <td>
        {% if task.target_platform %}
          {{ task.target_platform }}
        {% else %}
          Linux
        {% endif %}
      </td>
      <td>
        {% if task.num_repeated_runs %}
          {{ task.num_repeated_runs }}
        {% else %}
          1
        {% endif %}
      </td>
      <td>{{ task.variance_threshold }}</td>
      <td>{{ task.discard_outliers }}</td>
      <td>
        {% if task.pageset_type %}
          {{ task.pageset_type }}
        {% else %}
          10k
        {% endif %}
      </td>
      <td>{{ task.requested_time }}</td>
      <td>
        {% if task.completed_time %}
          {{ task.completed_time }}
        {% else %}
          {% include "col_status.html" %}
        {% endif %}
      </td>
      <td align="center">
        {% if task.chromium_patch_link and task.blink_patch_link and task.skia_patch_link %}
          <a href='{{ task.chromium_patch_link }}' target='_blank'>Chromium</a><br/>
          <a href='{{ task.blink_patch_link }}' target='_blank'>Blink</a><br/>
          <a href='{{ task.skia_patch_link }}' target='_blank'>Skia</a>
        {% else %}
          {% include "col_status.html" %}
        {% endif %}
      </td>
      <td align="center">
        {% if task.telemetry_nopatch_log_link %}
          <a href='{{ task.telemetry_nopatch_log_link }}' target='_blank'>output</a>
        {% else %}
          {% include "col_status.html" %}
        {% endif %}
      </td>
      <td align="center">
        {% if task.telemetry_withpatch_log_link %}
          <a href='{{ task.telemetry_withpatch_log_link }}' target='_blank'>output</a>
        {% else %}
          {% include "col_status.html" %}
        {% endif %}
      </td>
      <td align="center">
        {% if task.html_output_link %}
          <a href='{{ task.html_output_link }}' target='_blank'>result</a>
        {% else %}
          {% include "col_status.html" %}
        {% endif %}
      </td>
      {% if not alltaskspage %}
      <td align="center">
        <form action="chromium_try" name="delete_chromium_try_task" method="post">
          <input type='hidden' name='delete' value='{{ task.key.id_or_name }}'>
          <input type='submit' value='Delete' {% ifequal task.key.id_or_name oldest_pending_task_key %}disabled{% endifequal %}>
        </form>
      </td>
      {% endif %}
    </tr>
    {% endfor %}
  </table>
