[utils] Support Python 3.10
diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index be932275a28..8111d17899a 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -10,7 +10,7 @@ jobs:
       matrix:
         os: [ubuntu-18.04]
         # py3.9 is in quick-test
-        python-version: [3.7, 3.8, pypy-3.6, pypy-3.7]
+        python-version: [3.7, 3.8, 3.10-dev, pypy-3.6, pypy-3.7]
         run-tests-ext: [sh]
         include:
         # atleast one of the tests must be in windows
diff --git a/.github/workflows/download.yml b/.github/workflows/download.yml
index 9e650d2dc48..f27cf2142a7 100644
--- a/.github/workflows/download.yml
+++ b/.github/workflows/download.yml
@@ -9,7 +9,7 @@ jobs:
       fail-fast: true
       matrix:
         os: [ubuntu-18.04]
-        python-version: [3.7, 3.8, 3.9, pypy-3.6, pypy-3.7]
+        python-version: [3.7, 3.8, 3.9, 3.10-dev, pypy-3.6, pypy-3.7]
         run-tests-ext: [sh]
         include:
         - os: windows-latest
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 4d12c0a8e2d..4ff53573f1f 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -3964,7 +3964,7 @@ def detect_exe_version(output, version_re=None, unrecognized='present'):
         return unrecognized
 
 
-class LazyList(collections.Sequence):
+class LazyList(collections.abc.Sequence):
     ''' Lazy immutable list from an iterable
     Note that slices of a LazyList are lists and not LazyList'''
 
@@ -6313,4 +6313,4 @@ def traverse_dict(dictn, keys, casesense=True):
 
 
 def variadic(x, allowed_types=(str, bytes)):
-    return x if isinstance(x, collections.Iterable) and not isinstance(x, allowed_types) else (x,)
+    return x if isinstance(x, collections.abc.Iterable) and not isinstance(x, allowed_types) else (x,)

## Please follow the guide below

- You will be asked some questions, please read them **carefully** and answer honestly
- Put an `x` into all the boxes [ ] relevant to your *pull request* (like that [x])
- Use *Preview* tab to see how your *pull request* will actually look like

---

### Before submitting a *pull request* make sure you have:
- [x] At least skimmed through [adding new extractor tutorial](https://github.com/ytdl-org/youtube-dl#adding-support-for-a-new-site) and [youtube-dl coding conventions](https://github.com/ytdl-org/youtube-dl#youtube-dl-coding-conventions) sections
- [x] [Searched](https://github.com/yt-dlp/yt-dlp/search?q=is%3Apr&type=Issues) the bugtracker for similar pull requests
- [x] Checked the code with [flake8](https://pypi.python.org/pypi/flake8)

### In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under [Unlicense](http://unlicense.org/). Check one of the following options:
- [x] I am the original author of this code and I am willing to release it under [Unlicense](http://unlicense.org/)
- [ ] I am not the original author of this code but it is in public domain or released under [Unlicense](http://unlicense.org/) (provide reliable evidence)

### What is the purpose of your *pull request*?
- [x] Bug fix
- [ ] Improvement
- [ ] New extractor
- [ ] New feature

---

### Description of your *pull request* and other information

Use `collections.abc.Sequence` instead of `collections.Sequence`

Note that this change is incompatible with Python 3.4.x or earlier.