{
 "reveal": {
  "minCharsPerSec": 40,
  "catchUpMs": 400,
  "finishMs": 250,
  "maxWord": 16
 },
 "steps": [
  {
   "pos": 0,
   "available": 1000,
   "dtMs": 16.6667,
   "done": false,
   "expect": 41.66675
  },
  {
   "pos": 0,
   "available": 5,
   "dtMs": 16.6667,
   "done": false,
   "expect": 0.6666679999999999
  },
  {
   "pos": 10,
   "available": 10,
   "dtMs": 16,
   "done": false,
   "expect": 10
  },
  {
   "pos": 9.9,
   "available": 10,
   "dtMs": 1000,
   "done": false,
   "expect": 10
  },
  {
   "pos": 50,
   "available": 10,
   "dtMs": 16,
   "done": false,
   "expect": 10
  },
  {
   "pos": 0,
   "available": 100,
   "dtMs": 16,
   "done": true,
   "expect": 6.4
  },
  {
   "pos": 3.25,
   "available": 480,
   "dtMs": 8.3333,
   "done": false,
   "expect": 13.182251937499998
  },
  {
   "pos": 120,
   "available": 121,
   "dtMs": 33,
   "done": true,
   "expect": 121
  }
 ],
 "cuts": [
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 0,
   "expect": 0
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 3,
   "expect": 3
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 6,
   "expect": 3
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 9,
   "expect": 3
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 12,
   "expect": 3
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 15,
   "expect": 13
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 18,
   "expect": 13
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 21,
   "expect": 20
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 24,
   "expect": 20
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 27,
   "expect": 25
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 30,
   "expect": 28
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 33,
   "expect": 28
  },
  {
   "text": "The **ocean** covers most of Earth.",
   "pos": 36,
   "expect": 35
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 0,
   "expect": 0
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 3,
   "expect": 1
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 6,
   "expect": 5
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 9,
   "expect": 7
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 12,
   "expect": 11
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 15,
   "expect": 13
  },
  {
   "text": "- one\n- two\n- three",
   "pos": 18,
   "expect": 13
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 0,
   "expect": 0
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 3,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 6,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 9,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 12,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 15,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 18,
   "expect": 3
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 21,
   "expect": 21
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 24,
   "expect": 24
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 27,
   "expect": 27
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 30,
   "expect": 30
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 33,
   "expect": 33
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 36,
   "expect": 36
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 39,
   "expect": 39
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 42,
   "expect": 42
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 45,
   "expect": 45
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 48,
   "expect": 48
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 51,
   "expect": 51
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 54,
   "expect": 54
  },
  {
   "text": "see https://example.com/a/very/long/path/that/keeps/going",
   "pos": 57,
   "expect": 57
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 0,
   "expect": 0
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 3,
   "expect": 2
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 6,
   "expect": 2
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 9,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 12,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 15,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 18,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 21,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 24,
   "expect": 8
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 27,
   "expect": 27
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 30,
   "expect": 29
  },
  {
   "text": "😀 emoji 😀😀😀😀😀😀😀😀😀😀 end",
   "pos": 33,
   "expect": 33
  },
  {
   "text": "a b\tc\r\nd",
   "pos": 0,
   "expect": 0
  },
  {
   "text": "a b\tc\r\nd",
   "pos": 3,
   "expect": 3
  },
  {
   "text": "a b\tc\r\nd",
   "pos": 6,
   "expect": 6
  },
  {
   "text": "a b\tc\r\nd",
   "pos": 9,
   "expect": 8
  }
 ]
}
