[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 34519604
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 645340633
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 156070606
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4952435834
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024442453
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 31724628
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 12519651228
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1025772675
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 45154172644
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 72293080
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 66815687
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 48783474
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 44795122
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 494569603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 104241666
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1362863
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 77199047
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19925537
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 17685586672
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1026569165
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 635318099
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29365772850
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 66341564
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 12802550196
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 577212777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6352677
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 23073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1822872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 91066377
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 20026596
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 17961300319
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1029323395
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 710116797
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 31319808572
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 87664953
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 14018010041
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1089975615
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6482359
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10740
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1344198
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82696381
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18611324
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2690216566
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022819656
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22037017
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2744570583
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1026507437
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 47414872698
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 74071806
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 72461490
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 68161475
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 36431260
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 918413598
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6708749
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/flatpak.feature",
    "id": "installing-and-running-flatpak-apps-in-tails",
    "keyword": "Feature",
    "name": "Installing and running Flatpak apps in Tails",
    "description": "  As a Tails user\n  I may want to install and run software not shipped in Tails or Debian\n  And keep them up-to-date",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-have-the-debian-plugin",
        "keyword": "Scenario",
        "name": "GNOME Software does not have the Debian plugin",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1841708
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 74209
            }
          },
          {
            "keyword": "Then ",
            "name": "Debian package gnome-software-plugin-deb is not installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 42918907
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 616809023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16791
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-start-until-tor-is-ready",
        "keyword": "Scenario",
        "name": "GNOME Software does not start until Tor is ready",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2014078
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 11157702
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network with the Flatpak feature from a USB drive with a persistent partition enabled and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 206146319712
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is not running",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 39610364
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start GNOME Software",
            "line": 15,
            "match": {
              "location": "features/step_definitions/flatpak.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 57838482
            }
          },
          {
            "keyword": "Then ",
            "name": "I see an error about GNOME Software requiring Tor to be ready",
            "line": 16,
            "match": {
              "location": "features/step_definitions/flatpak.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 596440083
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1179929812
            }
          },
          {
            "keyword": "And ",
            "name": "process \"gnome-software\" is not running",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 68251967
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41550646
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11216086757
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is running within 10 seconds",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:869"
            },
            "result": {
              "status": "passed",
              "duration": 51270596
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 664038240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 778806128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11373587
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;installing,-starting-and-uninstalling-a-flatpak",
        "keyword": "Scenario",
        "name": "Installing, starting and uninstalling a Flatpak",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14676
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1444686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1081889
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 144558801713
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 26,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1876187234
            }
          },
          {
            "keyword": "And ",
            "name": "I install Signal Desktop using GNOME Software",
            "line": 27,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 8154600655
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is installed after at most 600 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 46140928582
            }
          },
          {
            "keyword": "When ",
            "name": "I start the org.signal.Signal Flatpak",
            "line": 29,
            "match": {
              "location": "features/step_definitions/flatpak.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 53058243
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is running",
            "line": 30,
            "match": {
              "location": "features/step_definitions/flatpak.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 1216017433
            }
          },
          {
            "keyword": "Given ",
            "name": "I kill the org.signal.Signal Flatpak",
            "line": 31,
            "match": {
              "location": "features/step_definitions/flatpak.rb:77"
            },
            "result": {
              "status": "passed",
              "duration": 3403311944
            }
          },
          {
            "keyword": "And ",
            "name": "I go to the main screen of GNOME Software",
            "line": 32,
            "match": {
              "location": "features/step_definitions/flatpak.rb:45"
            },
            "result": {
              "status": "passed",
              "duration": 96836895
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall Signal Desktop using GNOME Software",
            "line": 33,
            "match": {
              "location": "features/step_definitions/flatpak.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 9118241441
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is uninstalled after at most 60 seconds",
            "line": 34,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 72045398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 7752582271
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1292375893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44079104
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3246249
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 78588947551
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 63108517
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 61924757
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 6227043259
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 852638262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16347049
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 34755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 14144367
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 33938441804
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 71028569
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 168191390
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 17957470400
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 28176771790
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1111917287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20789
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2613518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2467996
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6366684583
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 60879025
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 11940230750
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 37814501
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 306908719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1017340763
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 89697
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2012056
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1310496
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6289480521
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 45562972
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1853606757
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12003172716
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1958244675
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 36130739
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 209970917
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 799055608
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 82425
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9057
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2403425
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1907199
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6244016533
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 155936777
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1526518
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28308531
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1747281866
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11223035934
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 2558547392
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 36138303
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 361013082
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 253089929
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 546009982
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35185715
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13986
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2236144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1493206
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6303775700
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 157432619
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:963"
            },
            "result": {
              "status": "passed",
              "duration": 9303242
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 43408805927
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 176299968
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 401487793
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 681695499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 64020408
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1618721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2188313
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6378208566
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1475960052
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:963"
            },
            "result": {
              "status": "passed",
              "duration": 5775528
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "failed",
              "error_message": "can not find any of the patterns [\"TailsGreeter.png\", \"PlymouthGraphicsCardFailureMessage.png\"] on the screen (FindFailed)\n./features/support/helpers/screen.rb:248:in `rescue in wait_any'\n./features/support/helpers/screen.rb:232:in `wait_any'\n./features/step_definitions/common_steps.rb:446:in `/^the computer (?:re)?boots Tails$/'\nfeatures/time_syncing.feature:45:in `And the computer reboots Tails'",
              "duration": 93195238207
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 39693476
            }
          },
          {
            "output": [
              "SCENARIO FAILED: 'Anti-test: Changes to the hardware clock are kept when rebooting' (at time 00:18:09)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:18:09_Anti-test:_Changes_to_the_hardware_clock_are_kept_when_rebooting.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:18:09_Anti-test:_Changes_to_the_hardware_clock_are_kept_when_rebooting.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:18:09_Anti-test:_Changes_to_the_hardware_clock_are_kept_when_rebooting.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:18:09_Anti-test:_Changes_to_the_hardware_clock_are_kept_when_rebooting.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 4903006282
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5455020
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1405011
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1604464
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75878684
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:176"
            },
            "result": {
              "status": "passed",
              "duration": 11272677
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 625636831
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 30003825025
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 47461100
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 211998329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 670012563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30377791
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2788603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7341720
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6746422859
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1089923606
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31940185
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 18660465571
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 35802583
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 266184432
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1108532194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 774957
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2019671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1566683
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6397756974
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 161346990
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3955895090
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2685993
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 75670672
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27671029
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1771622298
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4790173010
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1275217135
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 15464062980
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 15622332578
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 305235329
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1088872886
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6089893841
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 335682448
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 63770277
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 238339722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 538479992
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37073636
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2159831
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2027954
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6474271193
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 130945997
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3776238892
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2169378
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 22147621
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2167751389
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 3977720179
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1320435810
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 11620973901
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 14451401474
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 268087919
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 279519269
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1108911399
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6058729010
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 416183725
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 56335761
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 221637446
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 192366632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 625007491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46573542
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12653
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2103044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1447291
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6319497672
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1064812117
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27627647
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 6943800146
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 138078
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 315164661
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 321279
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 3115794
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 254424711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 778722445
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 979246
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1739366
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6262700290
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3102610
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30532017
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1703623729
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11192309215
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 935689477
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6643096
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1082649955
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 424858184
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 510570114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29836327
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2045367
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6257948072
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3859142
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36644314
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1852229648
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10073924903
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 915774072
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4568446
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1067971854
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 318895723
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 596353478
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 73144377
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1955269
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6199221901
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2297065
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41186249
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1941919632
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 28552981652
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 910597622
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5296856
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1089025593
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 326136115
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 857714895
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51139824
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11211
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2405469
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6230117085
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 6812012
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26163053
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1937367888
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11031600411
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 996781409
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 281548160
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 5230200
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1092704815
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 314554664
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 482954581
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 759699181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37019492
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20318
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2195567
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6322461241
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2337932
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35811298
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2012877658
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1171347636
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 18742972272
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1129826273
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 16883547
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1135796805
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 292351689
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 353535514
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 959272240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43358222
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16992
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2560187
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6418454532
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2973849
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35640939
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2202495435
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1133212783
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 29283866906
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 68303562
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1188"
            },
            "result": {
              "status": "passed",
              "duration": 241340527
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 727959708
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1113917745
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6038396013
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 6425038
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 38810185
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 63,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 547938960
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 846412032
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45300054
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 34845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4990302
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6379659919
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2374962
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 42225378
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1893809295
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 65
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:801"
            },
            "result": {
              "status": "passed",
              "duration": 3845667996
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:939"
            },
            "result": {
              "status": "passed",
              "duration": 204286248
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 223427149
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 527193197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35289043
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10280
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2071524
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6463422407
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3052867
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26809229
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2023615376
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 71,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5524541614
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 541962354
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10204937691
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10312383852
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 64406228
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:430"
            },
            "result": {
              "status": "passed",
              "duration": 196856962
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 745978485
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 93586
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 37652463
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 81,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 380694352
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 573169138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40599271
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15870
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2281478
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6135531204
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2670222
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30610863
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1985486902
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 83,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 84,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5804497944
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1860929856
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10374325155
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1189438566
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 9652215328
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 22644265114
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1118435338
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 64612222
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2103165
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6251149048
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3177891
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36148767
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1982058743
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 91,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1227332102
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 21039898595
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 68271150
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1046611789
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1095898112
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6022323930
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 291729485
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 99,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 322516709
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 821355459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42427082
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2382375
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6197376926
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5339986
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46399906
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1879063980
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:823"
            },
            "result": {
              "status": "passed",
              "duration": 168985253
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 6116537682
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 7059668109
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 41890562
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 405796188
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 107,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 328647589
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 928559937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25471703
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 23655
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5603096
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6534091644
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2476282
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37834141
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2044835122
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 109,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 110,
            "match": {
              "location": "features/step_definitions/tor.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 32430617
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 111,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5805357780
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 76445147
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 2486139596
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 971879766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 34872443
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2683067
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6397566388
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2932664
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 278116477
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1654148444
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 115,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 10242492
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 117,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 6500183151
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1289"
            },
            "result": {
              "status": "passed",
              "duration": 2357041617
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 918457308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49135829
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1878425
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6148137710
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 303602554
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 2227279670
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3157064324
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 741820624
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1459 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7710849223
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 935995503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19697
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2252202
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6361265750
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 399205580
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1450 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2663253830
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1687595766
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3109452612
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 493868843
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1450 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5590000934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 954484465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20708
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9688
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1830215
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6513634260
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 314439567
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 5229489216
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1460 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2720894049
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2671933567
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2953151835
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 719136905
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1460 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5813477834
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1614"
            },
            "result": {
              "status": "passed",
              "duration": 173939091
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 695093861
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2986422659
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 496612572
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1460 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5724777587
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 744035901
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 329725
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17152
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1847086
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6140135133
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 281324836
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 32403824445
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1462 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2572213300
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1051011267
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2765739028
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 453477357
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1462 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5655459110
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1614"
            },
            "result": {
              "status": "passed",
              "duration": 4207721330
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 359443695
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2633574757
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 421594916
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1462 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6065659405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 772566262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 385050
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11211
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2056276
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6591845443
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 319991850
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 13271708001
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 1492783475
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2207578197
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 5030556
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1456 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20772378730
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3351541347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21359
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2037803
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 244618708173
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 249294862
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 10438793662
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4686966
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 21068827405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3831782059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10523027
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2544128
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6390444180
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 36370498
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2757405345
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2185320647
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 8805879737
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:168"
            },
            "result": {
              "status": "passed",
              "duration": 35407872
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 939100762
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1028439
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2299250
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6167935642
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 32967990
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 8950784641
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:174"
            },
            "result": {
              "status": "passed",
              "duration": 19435699
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2223256857
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:180"
            },
            "result": {
              "status": "passed",
              "duration": 36312854
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 139480624
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:174"
            },
            "result": {
              "status": "passed",
              "duration": 22680003
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 554926770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 347990
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2083929
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6272110294
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 41318804
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2896784708
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2200298284
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 97219257113
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "passed",
              "duration": 15554559058
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2541060313
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 54747684
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 909774106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 107783034
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2382035
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6338433194
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 26667304
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2228632574
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 96534590122
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "passed",
              "duration": 14673360788
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2590711391
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 43999447
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 777631648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 105282436
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2242945
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8285068466
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 61102755
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 34285191
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3054678187
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2193654160
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired\nLast ignored exception was: Dogtail::Failure: The Dogtail init script raised: SearchError: descendant of [application | tails-installer]: child with name='Information' roleName='alert'\nSTDOUT:\n\nSTDERR:\n\n\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:339:in `initialize'\n./features/support/helpers/dogtail.rb:268:in `new'\n./features/support/helpers/dogtail.rb:268:in `call_tree_api_method'\n./features/support/helpers/dogtail.rb:276:in `child'\n./features/step_definitions/usb.rb:272:in `block (2 levels) in <top (required)>'\n./features/support/helpers/misc_helpers.rb:78:in `block (2 levels) in try_for'\n<internal:kernel>:187:in `loop'\n./features/support/helpers/misc_helpers.rb:66:in `block in try_for'\n./features/support/helpers/misc_helpers.rb:65:in `try_for'\n./features/step_definitions/usb.rb:270:in `block in <top (required)>' (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/usb.rb:270:in `/^I (install|reinstall|upgrade) Tails( with Persistent Storage)? (?:to|on) USB drive \"([^\"]+)\" by cloning$/'\nfeatures/usb_install.feature:50:in `And I install Tails with Persistent Storage to USB drive \"install\" by cloning'",
              "duration": 912823642535
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:620"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage' (at time 00:56:11)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:56:11_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:56:11_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:56:11_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/00:56:11_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 4990028843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 135583307
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2069681
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7848690884
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 32366014
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2185540490
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 112102767328
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "passed",
              "duration": 18379099954
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2746141444
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 46963844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 841540627
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 111002330
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 21421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2408033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7999491986
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6705751879
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 729134309
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2203918080
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 96290397770
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "passed",
              "duration": 14782753235
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2583518327
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 46756557
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 921066992
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 129422201
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16310
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2897296
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8262810489
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 246022178
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:133"
            },
            "result": {
              "status": "passed",
              "duration": 14683400
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60493304287
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 222203382
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:957"
            },
            "result": {
              "status": "passed",
              "duration": 2152391122
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1381"
            },
            "result": {
              "status": "passed",
              "duration": 46960428
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 732421228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5517726
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1915113
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6427701447
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 22828216307
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 33965178
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2212940847
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1720"
            },
            "result": {
              "status": "passed",
              "duration": 29470609433
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1041345212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 119371570
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6610505
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 155441138
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 54025212774
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 194627971
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1621"
            },
            "result": {
              "status": "passed",
              "duration": 107073793
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1629"
            },
            "result": {
              "status": "passed",
              "duration": 133449781
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1638"
            },
            "result": {
              "status": "passed",
              "duration": 95383378
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1666"
            },
            "result": {
              "status": "passed",
              "duration": 48091541
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 57138080
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 47444894
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 787410782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5948649
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2136718
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1444426
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:264"
            },
            "result": {
              "status": "passed",
              "duration": 45258786465
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6670443270
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3136718581
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 2509030929
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 16264576161
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1607853370
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3823081801
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 34883002639
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 20949164463
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7665925627
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10119379937
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1688153545
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 530366159
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been installed",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 95361047
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 674823953
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 901598295
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29259640
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1566343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2850830
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76954451
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 64702514066
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 4754278041
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6233035407
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 82973175
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 77101437
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 820261677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 974391607
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11495502
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16641
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2970604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6302682
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85693881
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 98538188761
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3150952450
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2462380747
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 422107069
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11940436551
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 21130533577
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 7565566669
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2460968621
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 503835897
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3128605196
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2470919303
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 498215779
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9489133325
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 2782795272
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 623096274
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3174500525
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1337290492
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 595612616
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 319750135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 603956026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9382650
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14497
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1606418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1747532
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79375106
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 78182753333
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4580097
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 5966733347
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 4794457240
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 525080572
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4064492297
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 33943937503
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 13169839084
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 5023164
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1714"
            },
            "result": {
              "status": "passed",
              "duration": 49409094
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7105372435
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10176888657
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 34907101
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 39472562
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31233236
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12655235638
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 41099638
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1413914234
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "failed",
              "error_message": "The Dogtail init script raised: SearchError: descendant of [application | gnome-shell]: child with roleName='notification'\nSTDOUT:\n\nSTDERR:\n\n (Dogtail::Failure)\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:339:in `initialize'\n./features/support/helpers/dogtail.rb:268:in `new'\n./features/support/helpers/dogtail.rb:268:in `call_tree_api_method'\n./features/support/helpers/dogtail.rb:276:in `child'\n./features/step_definitions/additional_software_packages.rb:33:in `click_gnome_shell_notification_button'\n./features/step_definitions/additional_software_packages.rb:160:in `/^I can open the Additional Software configuration window from the notification$/'\nfeatures/additional_software_packages.feature:103:in `And I can open the Additional Software configuration window from the notification'",
              "duration": 25331117284
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 33842937
            }
          },
          {
            "output": [
              "SCENARIO FAILED: 'Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online' (at time 01:14:08)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.file_content_var_log_boot.log",
              "",
              "Content of /run/live-additional-software/log: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.file_content_run_live-additional-software_log",
              "",
              "Output of ls -la --full-time /live/persistence/tailsdata_unlocked: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.cmd_output_persistent_volume",
              "",
              "Output of ls -lar --full-time /var/cache/apt: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.cmd_output_var_cache_apt",
              "",
              "Output of ls -lar --full-time /var/lib/apt: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.cmd_output_var_lib_apt",
              "",
              "Output of mount: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.cmd_output_mount",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_17367-per-setting-dconf-persistence/11/artifact/build-artifacts/01:14:08_Recovering_in_offline_mode_after_Additional_Software_previously_failed_to_upgrade_and_then_succeed_to_upgrade_when_online.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 5202231184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18297828
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18305
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1368623
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2100982
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 117130474
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 34044733697
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 13185572613
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 41262100
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7795053523
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 7355430038
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 5712671726
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 326698640
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 226542333
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 917194578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5573871
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1441730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83616272
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19047095
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1019863583
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 14295195520
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60055173311
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:957"
            },
            "result": {
              "status": "passed",
              "duration": 1947510556
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 186946303
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 50460006
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 44740493
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 176341674
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 120658649
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1453550044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5027400
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1384012
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 96887048
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 50375818942
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 264474733
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 22992692261
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1123"
            },
            "result": {
              "status": "passed",
              "duration": 5778588576
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:656"
            },
            "result": {
              "status": "passed",
              "duration": 500767905
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4055521606
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 303633366
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5821002
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1795191
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75742699
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 62060085800
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 253650849
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 7206356566
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1083"
            },
            "result": {
              "status": "passed",
              "duration": 989828721
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 142042758
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 234024982
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1045"
            },
            "result": {
              "status": "passed",
              "duration": 1515916257
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1123"
            },
            "result": {
              "status": "passed",
              "duration": 6131361530
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4030160876
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots? (tails/tails#10330)",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1322"
            },
            "result": {
              "status": "passed",
              "duration": 11851328102
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 322872168
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6113680
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1634280
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8650106317
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11290286454
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 962857900
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2209235670
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 90956625122
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:609"
            },
            "result": {
              "status": "passed",
              "duration": 18398150022
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 112904524
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 136869900
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 571657846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20869
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2334056
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89957040
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65431212303
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 1141179301
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 181844283
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:957"
            },
            "result": {
              "status": "passed",
              "duration": 2553878584
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1129"
            },
            "result": {
              "status": "passed",
              "duration": 1070543201
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1045"
            },
            "result": {
              "status": "passed",
              "duration": 2239645741
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 479378324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24660330
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10209
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2745504
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8584475820
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1611"
            },
            "result": {
              "status": "passed",
              "duration": 70647460
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 188338222
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1487"
            },
            "result": {
              "status": "passed",
              "duration": 23158668
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1459"
            },
            "result": {
              "status": "passed",
              "duration": 216776694
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1459"
            },
            "result": {
              "status": "passed",
              "duration": 392986371
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37367585
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 13337967288
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 1703021947
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1514"
            },
            "result": {
              "status": "passed",
              "duration": 4574130068
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5327228359
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 68518177490
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1518"
            },
            "result": {
              "status": "passed",
              "duration": 5399476
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 10347678515
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1459"
            },
            "result": {
              "status": "passed",
              "duration": 229129864
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1611"
            },
            "result": {
              "status": "passed",
              "duration": 35401306
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1629"
            },
            "result": {
              "status": "passed",
              "duration": 94794646
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 163246432
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24654400
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10426910047
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 989700579
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1514"
            },
            "result": {
              "status": "passed",
              "duration": 3770713565
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2550080486
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65618684138
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1518"
            },
            "result": {
              "status": "passed",
              "duration": 5506697
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 10667804937
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1459"
            },
            "result": {
              "status": "passed",
              "duration": 359677784
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1611"
            },
            "result": {
              "status": "passed",
              "duration": 43366541
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1629"
            },
            "result": {
              "status": "passed",
              "duration": 117470495
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 197652530
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30716965
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10127188804
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 10461875741
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 3134124523
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1459"
            },
            "result": {
              "status": "passed",
              "duration": 341953034
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 634870239
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11650002
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12153
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1472608
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 35566651693
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 234805405
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1487"
            },
            "result": {
              "status": "passed",
              "duration": 54439025
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1594"
            },
            "result": {
              "status": "passed",
              "duration": 56931335
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1605"
            },
            "result": {
              "status": "passed",
              "duration": 22933
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27855874
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9627820785
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 1608025616
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 572848845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24395
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20098
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3032990
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 37353852788
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 217612510
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 4063000266
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 142249617
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19898
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2561250
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6397333231
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 289146987
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 12272206387
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2975887786
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 218406211
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 8780897873
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1446 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 690234090
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3431748107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20727
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2285655
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6259405550
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 325279977
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 5204848106
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2606927818
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 42181375
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 5402953446
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 334201315
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 9221546050
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1467 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1116884658
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3499526881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 429121
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15479
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2918487
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6336795436
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 303342137
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 31579322451
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 887516188
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 26090959
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 4949745350
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 222141217
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 8572081538
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1468 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1017382618
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3662019855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 417989
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10190
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2001466
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8090530828
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 495987712
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11274292030
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 4835533068
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 302903202
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 4825868877
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1485 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1189949587
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 90488314922
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 309666760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18886
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13034
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2137309
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 100657094
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 30549527350
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.net,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 36789556
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 33364893
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 56846324
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 54783415
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 6602270
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 782911060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43224614
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17292
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2387335
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8432454048
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5260429360
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 1137263540
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 22744810075
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1777"
            },
            "result": {
              "status": "passed",
              "duration": 6235266
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2453925846
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 186993412
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2209041927
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1873"
            },
            "result": {
              "status": "passed",
              "duration": 553907788
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3160780865
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 112129981
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3123480972
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2095635273
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 12072021323
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 112340375
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2513286618
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2341553232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 970491049
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 112069278
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 109674
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 31636275
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 69976150
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39995
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 35316
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30997373
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 2296946
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 831321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5920
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 77575
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27098748
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 55082748
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 40084
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 70882
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 42269
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32857505
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 171501
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 55243
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 61877
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 91400
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1439678
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28183
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 27480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 99396
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26102188
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9095583
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 79364128
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 42439
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 135072
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 404116737
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7121209
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 25397
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6249111
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 18204
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49960619
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 169024
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1005065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7254
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8596
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 84808
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25754379
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9798064
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 96352790
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 60512
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 81232
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 396582399
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59291271
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 138017
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49879929
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 150911
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50423684
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 127378
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 2638933
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9327
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9598
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 81121
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 33850439
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19901728
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 2900362
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2110888
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 71592
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50458470
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 187430
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 877026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7663
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 85610
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 37751206
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 20739141
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 2441926
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3634012
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 62455
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30820983
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12434
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1415310
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6944
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 138669
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 35881086
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14599554
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 22627796
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 131624
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3629613
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 397660891
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8118359
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21520
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7602476
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12464
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55954014
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 223276
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1281401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10991
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 98765
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 35177673
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13172399
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 21895118
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 150489
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3881583
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 394828937
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64132616
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 195815
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60625811
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 321099
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 62114791
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 174096
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1181324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9138
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 111789
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 43545058
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 57750295
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45194
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 6444295
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 41548
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35876818
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 184525
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1400424
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7965
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 91020
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 45150824
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 64153395
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 207247
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 22858626
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 315208
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 196055
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47512141
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 200664
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 79479
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59359
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 97973
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 973377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7815
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 106900
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 76365843
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 82218915
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 108562
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 37521487
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1090585
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 400240275
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8154588
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 42650
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5905891
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 19347
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49339150
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 223006
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1277483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8375
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 99595
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 32400862
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 59169484
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 48069
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 6170295
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 74117
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 394824487
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52653596
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 136583
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54582575
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134570
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53568372
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 258132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1839152
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13235
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 25658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 238585
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 60660106
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 75367031
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 28754
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 32882
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34437452
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 180927
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 111778
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 65883
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 60643
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 940606
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11792
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 84878
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28450130
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 72956793
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 115425
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 149038
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 129141
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42910985
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 178754
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 146504
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 67958
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 72495
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 877638
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6933
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 92813
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29825426
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 58580906
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 91356879
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 65513
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 441073
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 406334707
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7664712
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37070
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12399829
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 93475
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40836372
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 163425
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 987914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5300
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10510
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 81302
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25182180
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13982813
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 76067096
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 80019
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 267099
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 395844781
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30751213
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 153578
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29036924
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 153536
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29672029
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 243234
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1074285
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7234
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 205513
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 39997607
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 57562234
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 21561645
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 58069
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3026728
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51128650
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 300991
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1106455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7023
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 90508
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 34493537
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 77533713
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 21415463
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 81533
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2321612
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32269808
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 51537
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1633539
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19586
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 143399
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37154131
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 56145290
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16764254
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 109885
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2534210
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 395450206
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8104052
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 47229
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7322124
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21990
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54008733
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 184084
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1040802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6262
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8878
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 87953
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 58817588
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 56743727
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16758172
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 85521
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2459720
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 394046666
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55703476
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 197799
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52603482
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 162613
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50165041
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 162392
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1025545
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8154
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9968
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 86390
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 61656776
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15486779
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 89731606
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 5310860
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 61777
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2737649
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 75505628
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 232474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1089323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10970
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 77115
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28099035
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 21136271
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 64293966
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3295349
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 95148
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2349624
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37856833
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39404
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 916110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9507
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10740
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 128921
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29349438
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16494549
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 80844832
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 42891
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5759757
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 73328
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 400952915
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6677340
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 31649
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6403489
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 27492
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39861594
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 145702
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1056161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4989
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 83686
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 38722038
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 21207976
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 97278969
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 25938
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4759321
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 65854
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 391986672
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29756278
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 133009
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30399778
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134541
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28427657
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 115896
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1054398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5250
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 94636
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 49415763
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 47879
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33521063
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 197288
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 837823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7344
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9858
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 88955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 35362569
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 75460
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 100488
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 41644422
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 170839
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 77506
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71164
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1198146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8595
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9147
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 111688
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 36730912
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 121797
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 397636766
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8924955
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 138868
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8502977
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 141274
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9129426
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 136675
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1188197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8637
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12153
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 101719
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28651765
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 97602
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 392865422
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8548243
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39303
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8607491
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 32209
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8984305
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 145903
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 914987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9527
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 90628
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27337224
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 47459
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32530465
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 203780
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 768975
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5770
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 87934
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25602366
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 76401
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30469027
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 237103
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 128070
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1238171
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9548
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 128680
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 28683675
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 74449
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 46967
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31138687
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 169527
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 69639
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 62829
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1008622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8346
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 126837
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 28968417
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 98243
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33867580
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 222755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1417796
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22572
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20427
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 134091
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 32682358
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 131356
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 398989210
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9042483
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 139370
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9585928
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 118610
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8665931
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 115445
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 928072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5159
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 124433
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 28649452
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 153728
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 398311875
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9639368
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 38211
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9695683
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33132
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9812581
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134571
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1237970
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7836
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9348
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 108132
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 34318260
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 246971
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 73336
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34953415
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 188712
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 74800
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 66755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 847852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5681
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 91961
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 31449897
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 108704
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30525573
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 186899
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1138935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5921
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11581
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 110355
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 30123162
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 130803
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30842965
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 168185
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 344844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1077991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7463
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 88385
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 30633814
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 58428
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4086565
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 25097
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 792648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6351
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 93013
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 30270698
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 452815
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4785088
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 46897
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 787549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5651
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 91662
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 40066617
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 801205
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4220837
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21179
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 773113
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6302
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/celluloid.feature",
    "id": "using-celluloid",
    "keyword": "Feature",
    "name": "Using Celluloid",
    "description": "  As a Tails user\n  I want to watch local videos in Celluloid\n  And Flatpak portals should make it possible to open files in any location despite Flatpak's confinement",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1716122
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 131906617
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6442825153
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7963805692
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 37582982
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 58989108
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7472633253
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/video.mp4\" in Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1993"
            },
            "result": {
              "status": "passed",
              "duration": 5916061288
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "passed",
              "duration": 4718580629
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 2061702501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1045911
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4969143
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 149009812
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 24,
        "type": "scenario",
        "comments": [
          {
            "value": "# The next scenario is similar to the previous one, except it opens the file in another way.",
            "line": 19
          },
          {
            "value": "# Since we're dealing with desktop portals, it's not entirely obvious that",
            "line": 20
          },
          {
            "value": "# clicking on \"Open\" from within Celluloid follows the same code path as",
            "line": 21
          },
          {
            "value": "# double-clicking on a file in Files. Now we have two tests follow those",
            "line": 22
          },
          {
            "value": "# two paths.",
            "line": 23
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8004135040
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 26,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7713104759
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 35731408
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Celluloid\" via GNOME Activities Overview",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8146227504
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" in Celluloid",
            "line": 29,
            "match": {
              "location": "features/step_definitions/celluloid.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 9564556245
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 30,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "passed",
              "duration": 4716991274
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1677227823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1636803
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 21981
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3264942
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6376724095
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3538913
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35511786
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8110215277
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6789107063
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 44415391
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 155708932
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 691367388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44407396
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3532632
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6635551010
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3728247
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29177586
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9517630347
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7107460016
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 50811416
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:985"
            },
            "result": {
              "status": "passed",
              "duration": 102970998
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 364648743
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 128694069
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 707869781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 50108634
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13536
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2497901
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6312683451
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9386465237
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 11773017856
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 484201574
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 820241442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21189
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3028312
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9952862493
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9414096138
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 10421884622
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 627196870
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 889386379
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26429
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 34144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3079416
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1703379
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6321184184
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 9943866969
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:830"
            },
            "result": {
              "status": "passed",
              "duration": 172754499
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 795222495
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 231627298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 679573949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 64499
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2462134
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6486553870
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4170289629
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 1030141023
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4185220633
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 866206629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21420
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2248928
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6339020379
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 73581434
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4112312465
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 1049352915
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4178679136
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1119769322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20627
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2232086
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7801437772
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 45679635
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 42648317
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4209695386
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 925211429
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4378975248
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 704376760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18085
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9236
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2748971
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6650707922
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000150833
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 43429786
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1315"
            },
            "result": {
              "status": "passed",
              "duration": 120836609
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 414991164
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1315"
            },
            "result": {
              "status": "passed",
              "duration": 120917730
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 44812938
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 737692613
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19567
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8616
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2432670
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6344068448
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 147954624
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 162323378
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 490952068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24416
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2074011
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7839049803
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38729464
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8659079949
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6450262242
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9446628548
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1342868077
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7424459279
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 1497383806
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7718071707
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1297"
            },
            "result": {
              "status": "passed",
              "duration": 2762120088
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7460628483
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 13739051432
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 10000099715
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1713177775
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9914216604
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1899618379
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7624313578
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 2008336713
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8123277345
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1951"
            },
            "result": {
              "status": "passed",
              "duration": 3656440740
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 6873891133
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8142381566
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 2504173215
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9777889959
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1703023654
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8544933127
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 3568981791
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7667600920
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 2290121425
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1192583973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21450
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13734
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2205185
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89061091
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 35046
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 655198014
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 21923934907
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 2828476734
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 718101418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15531444
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13526
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2629628
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92156890
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 33403
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 675041862
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 20845059911
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 2621243532
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 943432094
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5943882
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2034145
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92219017
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 35957
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 653293697
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 21068222018
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 2311306838
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 545051117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5739791
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2058731
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 94278380
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7723169524
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1352237331
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 632355382
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17876852025
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1422511766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20418
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2742176
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78549166
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8147290864
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1300429660
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 609056311
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17776520575
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1049315773
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23233
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 36248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6426143
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 91186205
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7546464570
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1316150760
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 939777982
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17524072398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1094743908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22392
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3438587
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8746403607
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 213800873
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 246653058
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 747662331
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 36765322816
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8718547615
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7499942008
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 128954041
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7850630
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 521650250
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49145519
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2088308
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8061287454
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 242142741
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 247481374
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 581217548
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32965899352
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8441037981
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6932535352
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 210612407
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8903956
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 547780030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23825630
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18705
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3542250
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 127947503
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 29945
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 21505741
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1019233836
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13310937697
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 49715750553
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 453429790
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 49751597
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7205993443
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7092588588
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 143862851
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1223855352
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1212369248
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4684333
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 946348447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 124568127
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1401194
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 160709907
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 33431
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 23463032
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1020175502
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13118724962
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 53130670659
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 188356200
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 35146125
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 27153479
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 146378628
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5766793
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 758913964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 125530646
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2374431
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89053707
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 33101
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22102363
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024961138
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13005380434
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 41851387286
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 208927616
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 31061482
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 24514055
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 128466543
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4792282
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 725269282
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 139266476
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1429548
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87693007
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 27280
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 21509117
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1020625957
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 12912885175
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 53510301191
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 194312244
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 58136595
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 34813012
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 230826381
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4684691
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 642566595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 161150312
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15458
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1777116
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 100546113
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 30156
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 634356974
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 23817207160
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 12108839870
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 714596755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5411629
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1476666
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6332411103
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1578285741
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 832386644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20468
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10871
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2280365
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6395854845
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 910601226
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 831495331
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19437
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2228940
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7070078231
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25880318324
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 56186036
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14129106707
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 732147971
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49161
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4075977
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6539788499
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25430414678
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 42891978
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14385064636
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 863826010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20228
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10489
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2231343
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6443685134
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25762126513
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 39482516
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15445543616
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1117482692
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22773
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2191610
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6320406601
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25599858736
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 34244833
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14135368973
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 875669967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22512
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9839
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2277140
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6423359882
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26665067580
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 43066963
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14056678594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 580917359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20308
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2283922
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6238907627
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7030694567
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25373883096
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 59504355
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 89896527
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43280361
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10571368806
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5867028113
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5182338784
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20087806695
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 65120624
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 7595665150
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5516491211
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5201513263
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3334138508
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 306149785
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 644933823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22062
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9889
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2115847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6407138907
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6883655322
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25406321284
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 79285667
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 58077672
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26268968
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11272469202
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5310999293
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5154647582
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20364065749
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 54819072
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 11565059302
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4949231594
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5179535570
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3723052030
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 345369006
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 927540235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22412
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2445884
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6456026653
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6714933633
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10747905508
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 61436937
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 78519552
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25861566
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11177439792
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5822415441
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5176206086
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20444252606
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 61579633
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 7843107252
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 3825359113
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5142908685
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3721454823
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 287370133
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 651545653
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21721
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2064903
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6246041240
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7129778667
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26236746381
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 69411857
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 75855751
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33689232
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12696890763
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5110682674
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161183584
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20225659979
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 51990770
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 7810261105
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4656935479
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5143850261
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3165506846
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 286251853
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 717559537
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22151
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2592767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6395974713
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6931108919
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25168215261
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 85713784
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 90075484
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 42220880
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11340247419
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5964082293
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5165701952
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21134923334
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 71839629
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8477807151
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4491411760
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5165119915
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3451010000
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 311950826
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1017382897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22101
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2292699
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6617055810
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6923758801
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25870756604
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 138250227
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 94862559
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28561264
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10601238883
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4849213771
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5153146274
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 22026289092
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 73249676
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9643548156
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4607080977
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5157059194
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3853945198
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 326886368
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 771883787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22622
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10960
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3044290
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6306356411
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6758231461
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25778540468
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 91441878
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 103347382
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25416434
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12200991463
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6056295471
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5181831823
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21574808332
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 72463597
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8569133560
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5461912739
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161156866
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3192970168
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 300081143
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 922875691
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22993
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10470
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2030760
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6574652631
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7011218868
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24966838949
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 117306963
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 75304791
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36242916
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11648287850
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5232695003
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5167524893
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21068351618
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 83575725
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9379717618
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4677533696
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5166908301
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3796836884
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 486746322
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 789830014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26350
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 24977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5850746
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6517177450
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6858156191
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25903379587
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 77536826
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 91050061
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43676787
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12040082330
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5450277841
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5155920382
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20518489264
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 58377545
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8804789200
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4629213755
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5156429282
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3602019483
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 296063152
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 580479902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27001
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2606743
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6449795368
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6702999791
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25637618635
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 80905361
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 88128848
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46796227
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10442908822
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6682905327
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5163742363
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20861694736
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 70243638
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8070738482
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5164660856
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5135004590
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3723462010
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 282378322
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 653592684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22001
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2178083
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6239521908
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6687330948
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26388025264
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 78688757
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 69240215
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33577311
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11522798038
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5832231752
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5182816862
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20575973605
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 73302827
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8435482563
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4940715262
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5173042227
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3316029712
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 318568202
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 910818309
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21500
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2517338
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6545032987
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6983236368
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25000697915
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 80659086
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 76321361
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31777435
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10939089287
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5180667856
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5146582824
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20606506973
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 67647406
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8258794594
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4640682001
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5171853127
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3627363193
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 338093364
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 609666274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22111
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9659
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2182561
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 58,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6331498795
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6925943365
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25373246655
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 78202772
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 108491848
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27990237
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12325389826
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5141208176
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5154003793
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20880916367
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 85519424
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8389126317
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4704224781
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5210853328
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3572058769
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 322336080
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 609466677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22391
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2141786
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8475169578
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4468342077
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 2092862115
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5307522554
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 37778730236
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 211969524
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1037763541
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 63672506
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 68,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2206638
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 69,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8380618542
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4503192741
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2463967695
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 90239537
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4520615441
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 111908359
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3948174183
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 38492617193
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 258010101
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 941531382
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6196158227
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1939"
            },
            "result": {
              "status": "passed",
              "duration": 33629608
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 705575863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8537891
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2521986
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8696991910
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 85,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 84
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 311138504
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 35830387955
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1771"
            },
            "result": {
              "status": "passed",
              "duration": 193744397
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5454207175
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 90,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 34187052964
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 201225921
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 125267191
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 15539559437
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 574598413
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 110331333
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4545478668
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 2088160766
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2385641805
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 101195216
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2640707674
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 102,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 33493752585
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 759480928
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 277648932
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 16567725777
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 107,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 106
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 111477230
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 495035352
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 591293947
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12759838
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2303177
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6630308362
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5707680
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 8015215080
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10832050136
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31730356
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10128267419
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 67355026
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 49083895
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 194342692
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 75681793
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 64577715
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 85911302
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 463348787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51285493
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2264655
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6642801296
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2982274
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11064468855
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27896623
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12241371332
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 55065766
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 48741767
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 171336465
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 83511763
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 70539448
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 102782770
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 826942581
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36051708
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11803
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2748148
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6291452178
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3265653
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46733770
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 93672101
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11518078373
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 46945415
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 78726956
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1595967031
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 437058972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36786429
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2828898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6321208235
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2779105
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35531868
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 89376186
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10997670521
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 71535978
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 165348722
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1577864865
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 847680904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 48746253
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2454741
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6354442295
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3122796
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 44985278
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 114770148
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 136673136
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11405719403
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 53518309
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 255227034
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 75518490
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1641479260
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 576866666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 50120468
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2277259
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78531411
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1568727
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 580495056
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 30236603533
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 51257381
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 86508514
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 660066493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 64220398
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1383000
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76864058
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 45628490043
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 8074711168
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 831002514
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 560490084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19375192
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16942
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3539826
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6778830267
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 48 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 48000162608
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 269771263
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30107388
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 7977167659
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 340174126
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7041433497
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 62364386
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 691010577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3475915
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2618766
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6400787175
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:570"
            },
            "result": {
              "status": "passed",
              "duration": 8107700141
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10540680202
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 52691367
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 53395149
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000142339
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 60667068
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1226023260
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22021
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11841
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2566760
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10605212987
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8822926372
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 640719818
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 221431605
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1154268931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19306
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2571228
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 77310935664
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7426584246
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6211794373
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1867"
            },
            "result": {
              "status": "passed",
              "duration": 709373538
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 660748437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53569
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3159004
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8709078884
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 14811304096
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 214128862
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 84616128
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:656"
            },
            "result": {
              "status": "passed",
              "duration": 5520576212
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1387635131
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20168
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11131
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3054921
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8468625949
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 364233476
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 140125535
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 18059644689
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1887"
            },
            "result": {
              "status": "passed",
              "duration": 46317235
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5302353149
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 62394199375
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 178455484
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1898"
            },
            "result": {
              "status": "passed",
              "duration": 48709361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 706740560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 33714680
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2573332
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21601064958
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:396"
            },
            "result": {
              "status": "passed",
              "duration": 4338782315
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 129413343
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 4394737746
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:466"
            },
            "result": {
              "status": "passed",
              "duration": 99679750
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:443"
            },
            "result": {
              "status": "passed",
              "duration": 2436534683
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 657250423
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 9114127220
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1887"
            },
            "result": {
              "status": "passed",
              "duration": 46721561
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 953168418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23334
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2836744
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8204825416
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 316448975
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 11218850048
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1045"
            },
            "result": {
              "status": "passed",
              "duration": 1604664112
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:303"
            },
            "result": {
              "status": "passed",
              "duration": 2425117978
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 10063925022
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 6813702161
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 67191761211
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 11418439862
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 933083361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24466094
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 59311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1429777
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7685391621
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 50708581
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 58288174
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1887"
            },
            "result": {
              "status": "passed",
              "duration": 54279876
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:303"
            },
            "result": {
              "status": "passed",
              "duration": 2572098041
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 60464565
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1904"
            },
            "result": {
              "status": "passed",
              "duration": 48599064
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:303"
            },
            "result": {
              "status": "passed",
              "duration": 2459140286
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 64135316
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1898"
            },
            "result": {
              "status": "passed",
              "duration": 48206733
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 598333936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21430
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2084078
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7660357768
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 56114960
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 54571378
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:303"
            },
            "result": {
              "status": "passed",
              "duration": 2450768714
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1908"
            },
            "result": {
              "status": "passed",
              "duration": 2788537783
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 38419189
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 627025663
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20789
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2540941
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7906599130
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41983309
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9722174379
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1123"
            },
            "result": {
              "status": "passed",
              "duration": 9194661519
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1083"
            },
            "result": {
              "status": "passed",
              "duration": 971426193
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5320345359
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved? (tails/tails#10330)",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1322"
            },
            "result": {
              "status": "passed",
              "duration": 11706174099
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 404525569
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18335
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2252924
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7660213159
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26208554
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9507132190
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:985"
            },
            "result": {
              "status": "passed",
              "duration": 93935569
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5270835780
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65896158065
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3151280
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27413092
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11894286616
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 318241215
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 93440537
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 109032119
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 852074904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 84889399
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2615900
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8642686495
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1051106577
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 13642161241
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 17111658421
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 979413800
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22952
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2391883
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8787594964
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 26019040962
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1855"
            },
            "result": {
              "status": "passed",
              "duration": 13406309335
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1795"
            },
            "result": {
              "status": "passed",
              "duration": 38098192143
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 322811583
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 285628674
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 4421284275
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 22798531289
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1819"
            },
            "result": {
              "status": "passed",
              "duration": 137032251
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 6085447466
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33353901485
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 406167912
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 254202558
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 16025595657
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1855"
            },
            "result": {
              "status": "passed",
              "duration": 69254107
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 134485847
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7593542399
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1819"
            },
            "result": {
              "status": "passed",
              "duration": 123942224
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 954340603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5283549
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1476034
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8241581175
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 27243600812
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5208024178
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65054303182
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 20401506740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 793271002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5048090
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1426151
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8166574414
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 14018857841
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 80394132
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:656"
            },
            "result": {
              "status": "passed",
              "duration": 5292503009
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8647956734
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1362"
            },
            "result": {
              "status": "passed",
              "duration": 2637850093
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:614"
            },
            "result": {
              "status": "passed",
              "duration": 261933176
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 559841383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21620
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2436716
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8134505035
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1093"
            },
            "result": {
              "status": "passed",
              "duration": 67979766
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 6826964298
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63236460927
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1148"
            },
            "result": {
              "status": "passed",
              "duration": 164836723
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 758785851
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13487636
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dconf-persistence",
        "keyword": "Scenario",
        "name": "Dconf persistence",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1541207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7316388186
            }
          },
          {
            "keyword": "When ",
            "name": "I change a persisted setting for every dconf feature",
            "line": 151,
            "match": {
              "location": "features/step_definitions/usb.rb:1310"
            },
            "result": {
              "status": "passed",
              "duration": 11495617529
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 152,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5177911346
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 153,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 62335467598
            }
          },
          {
            "keyword": "Then ",
            "name": "the persisted setting for every dconf feature is still set",
            "line": 154,
            "match": {
              "location": "features/step_definitions/usb.rb:1316"
            },
            "result": {
              "status": "passed",
              "duration": 376765858
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 462052988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5158966
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 156,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1481675
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 157,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8488240062
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 158,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1785"
            },
            "result": {
              "status": "passed",
              "duration": 43038386
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 159,
            "match": {
              "location": "features/step_definitions/usb.rb:698"
            },
            "result": {
              "status": "passed",
              "duration": 1159305874
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 160,
            "match": {
              "location": "features/step_definitions/usb.rb:1941"
            },
            "result": {
              "status": "passed",
              "duration": 15029986295
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 161,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7313227477
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 162,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7711981031
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 163,
            "match": {
              "location": "features/step_definitions/usb.rb:1964"
            },
            "result": {
              "status": "passed",
              "duration": 1227192257
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:806"
            },
            "result": {
              "status": "passed",
              "duration": 9846010620
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 9538811265
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1186965338
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21230
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10529
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2308748
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 114005060286
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 28713993093
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 170,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7400912911
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 171,
            "match": {
              "location": "features/step_definitions/usb.rb:644"
            },
            "result": {
              "status": "passed",
              "duration": 520765971
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 172,
            "match": {
              "location": "features/step_definitions/usb.rb:859"
            },
            "result": {
              "status": "passed",
              "duration": 10431513599
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 639403963
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20259
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2339906
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 175,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7375691223
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:734"
            },
            "result": {
              "status": "passed",
              "duration": 23783857883
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:651"
            },
            "result": {
              "status": "passed",
              "duration": 451502282
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 518358101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18905
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2356866
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8271915374
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1991"
            },
            "result": {
              "status": "passed",
              "duration": 9708466003
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 15620705267
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:2033"
            },
            "result": {
              "status": "passed",
              "duration": 79719610
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:709"
            },
            "result": {
              "status": "passed",
              "duration": 9904618179
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 509958256
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23975
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 186,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9969
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2460611
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 187,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8327683615
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:1991"
            },
            "result": {
              "status": "passed",
              "duration": 9645659996
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 189,
            "match": {
              "location": "features/step_definitions/usb.rb:698"
            },
            "result": {
              "status": "passed",
              "duration": 1196439520
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 190,
            "match": {
              "location": "features/step_definitions/usb.rb:1949"
            },
            "result": {
              "status": "passed",
              "duration": 2446603389
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 191,
            "match": {
              "location": "features/step_definitions/usb.rb:2041"
            },
            "result": {
              "status": "passed",
              "duration": 1207926423
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 192,
            "match": {
              "location": "features/step_definitions/usb.rb:2045"
            },
            "result": {
              "status": "passed",
              "duration": 177083561
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:2033"
            },
            "result": {
              "status": "passed",
              "duration": 45498051
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:2051"
            },
            "result": {
              "status": "passed",
              "duration": 1080654358
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:709"
            },
            "result": {
              "status": "passed",
              "duration": 4437508048
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 550209137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25809
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 198,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 197
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2496799
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 199,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7925520411
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 200,
            "match": {
              "location": "features/step_definitions/usb.rb:2024"
            },
            "result": {
              "status": "passed",
              "duration": 60702268
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 201,
            "match": {
              "location": "features/step_definitions/usb.rb:698"
            },
            "result": {
              "status": "passed",
              "duration": 1173451163
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 202,
            "match": {
              "location": "features/step_definitions/usb.rb:1949"
            },
            "result": {
              "status": "passed",
              "duration": 11048445616
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 203,
            "match": {
              "location": "features/step_definitions/usb.rb:2041"
            },
            "result": {
              "status": "passed",
              "duration": 1167798287
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 204,
            "match": {
              "location": "features/step_definitions/usb.rb:1956"
            },
            "result": {
              "status": "passed",
              "duration": 21873119
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 205,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7122791226
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8107639619
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 212,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 207
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 208
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 209
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 210
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 211
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 178515150
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 213,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1051"
            },
            "result": {
              "status": "passed",
              "duration": 108527339
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 214,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1204980251
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 215,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 1096350893
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 216,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 729532889
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 710072972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20619
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 219,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 218
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 27520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2477182
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 220,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7882431665
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 221,
            "match": {
              "location": "features/step_definitions/usb.rb:1991"
            },
            "result": {
              "status": "passed",
              "duration": 10751928628
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 222,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1312068806
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 223,
            "match": {
              "location": "features/step_definitions/usb.rb:698"
            },
            "result": {
              "status": "passed",
              "duration": 1199049337
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 224,
            "match": {
              "location": "features/step_definitions/usb.rb:2059"
            },
            "result": {
              "status": "passed",
              "duration": 2051873420
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 225,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7931047219
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 226,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7408732621
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 227,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 1053981365
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 228,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 863521912
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 713514336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21921
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2505345
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8269415207
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 17297257346
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:830"
            },
            "result": {
              "status": "passed",
              "duration": 387921368
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26008194
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4742248388
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10525821279
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 852715871
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4732178
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:850"
            },
            "result": {
              "status": "passed",
              "duration": 884929915
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 6058379821
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32654119081
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 12857401852
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2615790
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7099584421
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5640293
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35431437
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4428303323
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1199526972
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1620163410
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1216035443
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5833155123
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4923204
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:850"
            },
            "result": {
              "status": "passed",
              "duration": 826478535
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 360746309
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 514983469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36567114
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1649207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7781971445
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:350"
            },
            "result": {
              "status": "passed",
              "duration": 16637244508
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:830"
            },
            "result": {
              "status": "passed",
              "duration": 402116346
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26528935
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1627021538
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10794701273
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 864385771
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5077332
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:850"
            },
            "result": {
              "status": "passed",
              "duration": 793073913
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4652841761
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33279991413
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 12772003521
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2521323
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6413512063
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 7358137
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 40790915
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4395733590
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1191310572
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1709201052
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:779"
            },
            "result": {
              "status": "passed",
              "duration": 1184650113
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 7304868548
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 478548519
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 7192819
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:850"
            },
            "result": {
              "status": "passed",
              "duration": 910034574
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 419898907
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 484503038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53211266
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89306
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 52527
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:27"
            },
            "result": {
              "status": "passed",
              "duration": 24661772
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 79999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5941
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2245700
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 148389992
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 24608262
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022760055
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13131025641
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2425748867
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 58714148370
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 57307147
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2437326196
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7032147246
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1054356006
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2392104915
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 88876
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3800085380
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2451146196
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 42768
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 100969728
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 116583469
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1664876
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6200989835
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 91392770
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 60744220
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 108892169
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 150587809
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 527686276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20349
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10479
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2244478
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21770345969
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception",
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 95887717
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 769768666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21129
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2323816
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9201362794
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 4903545923
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 512474324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21370
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2097223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 17980786127
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 53243282
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 631526987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21650
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9097
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2346549
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8548643693
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 74129194
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 618512631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19428
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2386542
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8489229735
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 24477279465
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1777"
            },
            "result": {
              "status": "passed",
              "duration": 4870315
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1781"
            },
            "result": {
              "status": "passed",
              "duration": 40652609
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7780657863
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9842691784
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2092572570
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1187638002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22701
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8596
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2334456
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6364667048
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 12317430
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7678244319
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1993"
            },
            "result": {
              "status": "passed",
              "duration": 5390813246
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2752633685
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1352442397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25438
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10370
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2032201
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10608813371
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2323143845
            }
          },
          {
            "keyword": "And ",
            "name": "I request a shutdown using the system menu",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 6427467582
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 6698656193
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 229763232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20158
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10841
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2378678
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9242032899
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2282028332
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 6318423477
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 35629768169
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3544796178
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19046
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;the-logout-button-is-not-visible",
        "keyword": "Scenario",
        "name": "The logout button is not visible",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2127098
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9750991419
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2428928580
            }
          },
          {
            "keyword": "Then ",
            "name": "the logout button is not visible",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:953"
            },
            "result": {
              "status": "passed",
              "duration": 3469744656
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 504203926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19677
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2274584
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1399922
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9301119395
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 30457541
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 236398227
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5839371669
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 1212294793
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 6481222
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 224602442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 834996735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 78666
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2346789
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1697477
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9299818086
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 133205434
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 70282466
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5785805428
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1577992216
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 256326515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 574488308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 703552
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2086954
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1465484
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 77886854695
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 23367134
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 22963506250
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1800184911
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 879063039
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2271721715
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1637512893
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1052988921
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10374558984
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:248"
            },
            "result": {
              "status": "passed",
              "duration": 466641681
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1475817956
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 949929065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8192123
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2580174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2500836
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9254091922
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 29160329
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 22554692434
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2298448168
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 107842908
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 8002273393
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 177680676
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 178495755
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 15762701252
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5419210765
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1166233604
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4992569259
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:256"
            },
            "result": {
              "status": "passed",
              "duration": 419043845
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1452227645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 831471780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7896632
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13776
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2999776
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6313931155
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8801768524
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1247"
            },
            "result": {
              "status": "passed",
              "duration": 1232727632
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 478944727
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 747424604
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 1133303429
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 1903249288
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 559461495
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22962
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2715084
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6311660448
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35515707
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1819090736
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:556"
            },
            "result": {
              "status": "passed",
              "duration": 3975996978
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1178849629
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:899"
            },
            "result": {
              "status": "passed",
              "duration": 98109150
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 682638972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20267
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2437147
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6145461245
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 952741027
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26099611
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1099131367
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 850615363
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1237547532
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1157838299
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 26545045771
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:474"
            },
            "result": {
              "status": "passed",
              "duration": 10603642448
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 140539437
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 5400789982
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 4648999373
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 121155023
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 819723071
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 35676077
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1100410232
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4667691165
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 554297750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 676653
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2562761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10170824833
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 40241163
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 167157604
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:145"
            },
            "result": {
              "status": "passed",
              "duration": 49386915
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 48044450
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 668788390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21070
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9638
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2609860
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9248038482
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3103610
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6684153971
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 7172895746
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 314711724
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 125422045
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 622764566
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 55212754
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2776940
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9202560454
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5386699
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 93869994
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 175599117
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 126336862
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 536095146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29179198
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10800
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2494403
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9203444192
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2978147
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 98029143
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 111324177
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 100645203
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 615657808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42547256
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2508189
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9341106725
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3629462
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 87140869
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4048859704
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 103415160
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 528833088
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57406046
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2568091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4466314
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9257280735
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 196691846
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 41447
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 97737609
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 234782989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 839443091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 79719
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2578601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1413968
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9291760670
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 5318319614
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 41629
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 94639765
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 241390914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 727357666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 80800
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 59,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3213847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 60,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6156071130
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 5024804
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46661048
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9607905908
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 7273811
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 838713384
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20509
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10700
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2427899
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3887533
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9172379085
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 45811373
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:385"
            },
            "result": {
              "status": "passed",
              "duration": 80267062
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 10005934896
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 236166820
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 870656785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 71002
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3150077
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2330818
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9221390638
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 51317406
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:392"
            },
            "result": {
              "status": "passed",
              "duration": 2342281131
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 5986537
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 239726821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 813839711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 73265
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2482881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1893623
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21017625010
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 44882459
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:399"
            },
            "result": {
              "status": "passed",
              "duration": 32029417667
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 8532418
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 272375984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1138291201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 88736
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2301163
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1864598
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9270351526
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 39114410
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8567815558
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 6979571006
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:611"
            },
            "result": {
              "status": "passed",
              "duration": 196179407
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 37815466
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 295425364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 821451729
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 270617
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3012299
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9347878404
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1342"
            },
            "result": {
              "status": "passed",
              "duration": 1018704160
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2009509
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7474729658
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1411"
            },
            "result": {
              "status": "passed",
              "duration": 3826275119
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:386"
            },
            "result": {
              "status": "passed",
              "duration": 124037315
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1415"
            },
            "result": {
              "status": "passed",
              "duration": 70475775
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 838270356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37081627
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2584082
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2022353
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9294256703
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 37137311
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 17318120300
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7584242865
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 4128047661
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 3220131488
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 228348872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 916119664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75100
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2410446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1653193
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9133104073
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7412246193
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:348"
            },
            "result": {
              "status": "passed",
              "duration": 11399993554
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:369"
            },
            "result": {
              "status": "passed",
              "duration": 304604710
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 259231605
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 619618250
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 264884
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12835
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2487349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1653826
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9335698749
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7440030577
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:410"
            },
            "result": {
              "status": "passed",
              "duration": 37069644435
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 597478959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 963699331
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3097207
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2619246
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1655378
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9298118389
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 6904430482
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:429"
            },
            "result": {
              "status": "passed",
              "duration": 6985685205
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 245021423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 709121020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 92292
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9337
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2539457
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9211026292
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 44956857
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 47381963
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 34549172
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 35921722
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 41337647
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 44355577
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 21439075
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1431"
            },
            "result": {
              "status": "passed",
              "duration": 105882828
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7409854859
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3896930434
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 292193151
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 50102747
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3896796945
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 267776752
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3754724004
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 287679310
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3583999885
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 271247428
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3506634659
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 289457228
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 560204270
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20869
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2353801
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9393552429
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7552729110
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:312"
            },
            "result": {
              "status": "passed",
              "duration": 509382201
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 727256480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20998
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2433380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1746359
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9403850159
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7517680654
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 6396965941
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:398"
            },
            "result": {
              "status": "passed",
              "duration": 110351755
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 64158099
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:674"
            },
            "result": {
              "status": "passed",
              "duration": 3181579556
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 1329804366
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 95514965
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 244783207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1167273070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75220
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9558
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2742827
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9321772554
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 6960525672
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 7100363964
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:611"
            },
            "result": {
              "status": "passed",
              "duration": 338227008
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 1328542972
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 621552758
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21911
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2679730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9195339241
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7352500240
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 6647560211
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:404"
            },
            "result": {
              "status": "passed",
              "duration": 101546948
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 6547977867
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:398"
            },
            "result": {
              "status": "passed",
              "duration": 239268881
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 584474579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20839
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6821977
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8080764233
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26913468
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9209381416
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 31063109
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7294768787
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 16786948312
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9126408727
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:348"
            },
            "result": {
              "status": "passed",
              "duration": 10606120628
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:369"
            },
            "result": {
              "status": "passed",
              "duration": 220250373
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 6986079127
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 493063365
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 8821470968
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 615852760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19897
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14147
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2773680
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6180156407
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 60939149
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15676021908
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10030067282
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6734082632
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 980833308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23594
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9899
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2697282
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6288484905
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 33415225
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15553450656
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10245561582
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6820808293
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 762674509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21190
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11381
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2970211
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6282447267
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 104438706
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 17742777045
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9838995224
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6867252553
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 848596925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20649
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9247
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2662988
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6321737306
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 50304510
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15779155839
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9841293955
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6693272082
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 981424447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21140
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2634955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6285202550
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 33581937
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15695812440
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10235251821
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6938854124
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 934979258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17643
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3511500
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7866706125
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:786"
            },
            "result": {
              "status": "passed",
              "duration": 10027642191
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 158679797
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 214842024
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1045"
            },
            "result": {
              "status": "passed",
              "duration": 1523624805
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 13031070955
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 8031214264
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 5775770380
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33047485978
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:729"
            },
            "result": {
              "status": "passed",
              "duration": 15100650217
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7045105399
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8130864856
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 6505662954
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 827614693
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 982258531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18333159
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1933776
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1585307
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9321111459
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4954223705
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 133541723
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 232405125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 498063813
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75982
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13355
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2931579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1977908
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 20970049416
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 160555124
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@lizard.tails.boum.org:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 7642416785
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 153761620
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 218494165
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 657141690
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 86350
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9628
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2590072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4586006
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 20941836318
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 247389138
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 55925
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 22042
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 250395764
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 660957671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 94036
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13776
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2470179
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1528311
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9343312845
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 150422333
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 65962
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 14808
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 212723200
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 929643986
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 77584
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2280475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3522331
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9252915715
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;transparent-proxying-through-tor",
        "keyword": "Scenario",
        "name": "Transparent proxying through Tor",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9612071685
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 8.8.8.8 on port 53",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 225565136
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified TCP connection succeeds",
            "line": 20,
            "match": {
              "location": "features/step_definitions/tor.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 69862
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 236138380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 790963977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 81992
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9858
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2684228
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7184624012
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 17123714
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11725786071
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8720117356
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 53052046
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1226155085
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 8304045989
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1380480207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19787
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2240491
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6490569870
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 17142650
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11070185524
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8028902006
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 35073619
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1997"
            },
            "result": {
              "status": "passed",
              "duration": 1152581000
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 10328617034
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 744174572
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22512
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2448869
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6249884310
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:587"
            },
            "result": {
              "status": "passed",
              "duration": 7900876859
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9725767678
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25568016
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7876525348
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 52580637
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 1076104027
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 732158906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19517
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2304218
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9360875018
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1342"
            },
            "result": {
              "status": "passed",
              "duration": 1018908681
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7547369435
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1411"
            },
            "result": {
              "status": "passed",
              "duration": 3895185250
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 141495528
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 696680492
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 528154
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9839
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3231969
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9551012605
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7444376644
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:334"
            },
            "result": {
              "status": "passed",
              "duration": 155203558
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 320430196
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 354409894
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4162128274
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 3813602771
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:312"
            },
            "result": {
              "status": "passed",
              "duration": 410106264
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 921352152
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19946
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2288488
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9397715654
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6648990344
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 6690109852
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 352771468
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 49816021
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 523848521
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20107
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11211
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2353831
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9308414177
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6562268145
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 120992358
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 760568608
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 62859423
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 980714447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20188
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2745712
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9158143079
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6824949664
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000157192
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 65556475
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1105641486
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 839849445
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21080
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2428120
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9194068448
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 83454052
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6765573639
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 4081942368
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:386"
            },
            "result": {
              "status": "passed",
              "duration": 143906696
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 914977516
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 61666
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 38631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 7854923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7049882
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9221432064
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3891119
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 18661213
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 4651156
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7008230402
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 120000177008
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 355187448
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 248404144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 816788272
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47853196
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2424163
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 32649770791
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:154"
            },
            "result": {
              "status": "passed",
              "duration": 21011285
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000146809
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 79732433
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3877772971
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 685638126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 34475
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2433830
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6094767473
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 9583433617
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1472725678
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 4607196306
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1752428733
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 95002167
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1208125393
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 84492963
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 733867524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 376994
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2286955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6127248783
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17141743004
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1523090687
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5517337958
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1877410152
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 104995849
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1232360790
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 82329878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 527313898
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 360021
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2357257
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6197135461
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8327621831
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5737719918
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1908446737
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 224784371
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1244092896
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 98632861
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 934115686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 433078
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10198
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2434091
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6299362844
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24105498433
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 7090799054
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1656384391
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 256879034
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1215436230
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 88580706
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 978973419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9795741
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2355825
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6176966763
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 16798102013
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1510936018
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 9151350906
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1633072057
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 96794087
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1188008689
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 83982928
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 472352324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 296965
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8406
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2385519
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6268986113
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17174353271
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 842447649
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 7357507239
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1869330107
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 122441520
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1252874878
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 70211410
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 712144294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 373969
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2465609
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6140458211
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 23577653629
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 18567900951
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1820094924
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 115289607
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1259758674
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 69440022
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 606776847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9511433
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2547282
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6266261265
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24063145803
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16708220232
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1819205678
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 234178987
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1233357616
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 105908597
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 691987351
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11004027
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12203
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2763765
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6202758956
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8210599445
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 15025994239
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1750638587
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 97439380
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1235605588
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 95946684
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 511826346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 498950
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2411388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1370005
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80961502
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 19907
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 652503058
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29045234000
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 131947379
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 5886978513
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8094775692
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30939061
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4207258275
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 31140868176
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 21563121988
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 37507245
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 344342396
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 525142254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38993377
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 33802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 8709246
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89601489
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 26060
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 644081759
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 28660177592
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 109921955
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6232987761
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7854478729
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30912172
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4170463859
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4005053637
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 126366221
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 722645675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5528072
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13625
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1385985
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6248729584
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1848"
            },
            "result": {
              "status": "passed",
              "duration": 52247701
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 861546117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18124
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2977122
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6184603676
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1843"
            },
            "result": {
              "status": "passed",
              "duration": 616921510
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 858850639
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22612
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2285644
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6247248782
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8427982357
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 1995659993
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1211123804
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20469
            }
          }
        ]
      }
    ]
  }
]