diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 0c127ab..b8fa614 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -17,7 +17,7 @@ repos:
       - id: trailing-whitespace
 
   - repo: https://github.com/psf/black
-    rev: 22.6.0
+    rev: 22.8.0
     hooks:
       - id: black
         args: ["--line-length", "100"]
@@ -60,13 +60,13 @@ repos:
         stages: [manual]
 
   - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v8.22.0
+    rev: v8.23.0
     hooks:
       - id: eslint
         stages: [manual]
 
   - repo: https://github.com/sirosen/check-jsonschema
-    rev: 0.17.1
+    rev: 0.18.2
     hooks:
       - id: check-jsonschema
         name: "Check GitHub Workflows"
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..0830e94
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,128 @@
+Metadata-Version: 2.1
+Name: ipykernel
+Version: 6.15.2
+Summary: IPython Kernel for Jupyter
+Project-URL: Homepage, https://ipython.org
+Author-email: IPython Development Team <ipython-dev@scipy.org>
+License: # Licensing terms
+        
+        This project is licensed under the terms of the Modified BSD License
+        (also known as New or Revised or 3-Clause BSD), as follows:
+        
+        - Copyright (c) 2015, IPython Development Team
+        
+        All rights reserved.
+        
+        Redistribution and use in source and binary forms, with or without
+        modification, are permitted provided that the following conditions are met:
+        
+        Redistributions of source code must retain the above copyright notice, this
+        list of conditions and the following disclaimer.
+        
+        Redistributions in binary form must reproduce the above copyright notice, this
+        list of conditions and the following disclaimer in the documentation and/or
+        other materials provided with the distribution.
+        
+        Neither the name of the IPython Development Team nor the names of its
+        contributors may be used to endorse or promote products derived from this
+        software without specific prior written permission.
+        
+        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+        ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+        WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+        
+        ## About the IPython Development Team
+        
+        The IPython Development Team is the set of all contributors to the IPython project.
+        This includes all of the IPython subprojects.
+        
+        The core team that coordinates development on GitHub can be found here:
+        https://github.com/ipython/.
+        
+        ## Our Copyright Policy
+        
+        IPython uses a shared copyright model. Each contributor maintains copyright
+        over their contributions to IPython. But, it is important to note that these
+        contributions are typically only changes to the repositories. Thus, the IPython
+        source code, in its entirety is not the copyright of any single person or
+        institution. Instead, it is the collective copyright of the entire IPython
+        Development Team. If individual contributors want to maintain a record of what
+        changes/contributions they have specific copyright on, they should indicate
+        their copyright in the commit message of the change, when they commit the
+        change to one of the IPython repositories.
+        
+        With this in mind, the following banner should be used in any source code file
+        to indicate the copyright and license terms:
+        
+            # Copyright (c) IPython Development Team.
+            # Distributed under the terms of the Modified BSD License.
+Keywords: Interactive,Interpreter,Shell,Web
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Science/Research
+Classifier: Intended Audience :: System Administrators
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Requires-Python: >=3.7
+Requires-Dist: appnope; platform_system == 'Darwin'
+Requires-Dist: debugpy>=1.0
+Requires-Dist: ipython>=7.23.1
+Requires-Dist: jupyter-client>=6.1.12
+Requires-Dist: matplotlib-inline>=0.1
+Requires-Dist: nest-asyncio
+Requires-Dist: packaging
+Requires-Dist: psutil
+Requires-Dist: pyzmq>=17
+Requires-Dist: tornado>=6.1
+Requires-Dist: traitlets>=5.1.0
+Provides-Extra: test
+Requires-Dist: flaky; extra == 'test'
+Requires-Dist: ipyparallel; extra == 'test'
+Requires-Dist: pre-commit; extra == 'test'
+Requires-Dist: pytest-cov; extra == 'test'
+Requires-Dist: pytest-timeout; extra == 'test'
+Requires-Dist: pytest>=6.0; extra == 'test'
+Description-Content-Type: text/markdown
+
+# IPython Kernel for Jupyter
+
+This package provides the IPython kernel for Jupyter.
+
+## Installation from source
+
+1. `git clone`
+2. `cd ipykernel`
+3. `pip install -e ".[test]"`
+
+After that, all normal `ipython` commands will use this newly-installed version of the kernel.
+
+## Running tests
+
+Follow the instructions from `Installation from source`.
+
+and then from the root directory
+
+```bash
+pytest ipykernel
+```
+
+## Running tests with coverage
+
+Follow the instructions from `Installation from source`.
+
+and then from the root directory
+
+```bash
+pytest ipykernel -vv -s --cov ipykernel --cov-branch --cov-report term-missing:skip-covered --durations 10
+```
diff --git a/debian/changelog b/debian/changelog
index 12bba1d..8d69879 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ipykernel (6.15.2+git20220905.1.cce9b7d+ds-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 07 Sep 2022 06:43:41 -0000
+
 ipykernel (6.15.2-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/patches/0002-test_simple_print-may-produce-stderr-content-when-ex.patch b/debian/patches/0002-test_simple_print-may-produce-stderr-content-when-ex.patch
index c6509d4..3acbd47 100644
--- a/debian/patches/0002-test_simple_print-may-produce-stderr-content-when-ex.patch
+++ b/debian/patches/0002-test_simple_print-may-produce-stderr-content-when-ex.patch
@@ -6,9 +6,11 @@ Subject: test_simple_print may produce stderr content when executed in sbuild
  ipykernel/tests/test_kernel.py | 1 -
  1 file changed, 1 deletion(-)
 
+Index: ipykernel/ipykernel/tests/test_kernel.py
+===================================================================
 --- ipykernel.orig/ipykernel/tests/test_kernel.py
 +++ ipykernel/ipykernel/tests/test_kernel.py
-@@ -54,7 +54,6 @@
+@@ -54,7 +54,6 @@ def test_simple_print():
          msg_id, content = execute(kc=kc, code="print('hi')")
          stdout, stderr = assemble_output(kc.get_iopub_msg)
          assert stdout == "hi\n"
diff --git a/debian/patches/0003-Made-build-reproducible-patch-by-Daniel-Shahaf.patch b/debian/patches/0003-Made-build-reproducible-patch-by-Daniel-Shahaf.patch
index 12fd7d1..2cf105f 100644
--- a/debian/patches/0003-Made-build-reproducible-patch-by-Daniel-Shahaf.patch
+++ b/debian/patches/0003-Made-build-reproducible-patch-by-Daniel-Shahaf.patch
@@ -6,9 +6,11 @@ Subject: Made build reproducible -- patch by Daniel Shahaf
  ipykernel/kernelspec.py | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
+Index: ipykernel/ipykernel/kernelspec.py
+===================================================================
 --- ipykernel.orig/ipykernel/kernelspec.py
 +++ ipykernel/ipykernel/kernelspec.py
-@@ -87,7 +87,7 @@
+@@ -87,7 +87,7 @@ def write_kernel_spec(path=None, overrid
      if overrides:
          kernel_dict.update(overrides)
      with open(pjoin(path, "kernel.json"), "w") as f:
diff --git a/debian/patches/disable_shutdown_subprocesses_test.patch b/debian/patches/disable_shutdown_subprocesses_test.patch
index 896f818..b46d91b 100644
--- a/debian/patches/disable_shutdown_subprocesses_test.patch
+++ b/debian/patches/disable_shutdown_subprocesses_test.patch
@@ -2,9 +2,11 @@ Description: disable a test failing for unknown reasons
 Author: Julien Puydt
 Forwarded: no, it's too dirty
 
+Index: ipykernel/ipykernel/tests/test_kernel.py
+===================================================================
 --- ipykernel.orig/ipykernel/tests/test_kernel.py
 +++ ipykernel/ipykernel/tests/test_kernel.py
-@@ -532,8 +532,8 @@
+@@ -532,8 +532,8 @@ def _start_children():
  
  
  @pytest.mark.skipif(
diff --git a/debian/patches/fix_asyncio.patch b/debian/patches/fix_asyncio.patch
index b6572f9..87bdb66 100644
--- a/debian/patches/fix_asyncio.patch
+++ b/debian/patches/fix_asyncio.patch
@@ -2,9 +2,11 @@ Description: get rid of "There is no current event loop in..." error
 Author: Julien Puydt
 Forwarded: https://github.com/ipython/ipykernel/issues/929
 
+Index: ipykernel/ipykernel/inprocess/client.py
+===================================================================
 --- ipykernel.orig/ipykernel/inprocess/client.py
 +++ ipykernel/ipykernel/inprocess/client.py
-@@ -179,8 +179,7 @@
+@@ -179,8 +179,7 @@ class InProcessKernelClient(KernelClient
          stream = kernel.shell_stream
          self.session.send(stream, msg)
          msg_parts = stream.recv_multipart()
@@ -14,9 +16,11 @@ Forwarded: https://github.com/ipython/ipykernel/issues/929
          idents, reply_msg = self.session.recv(stream, copy=False)
          self.shell_channel.call_handlers_later(reply_msg)
  
+Index: ipykernel/pyproject.toml
+===================================================================
 --- ipykernel.orig/pyproject.toml
 +++ ipykernel/pyproject.toml
-@@ -97,6 +97,7 @@
+@@ -97,6 +97,7 @@ warn_return_any = true
  warn_unused_ignores = true
  
  [tool.pytest.ini_options]
diff --git a/ipykernel/resources/logo-svg.svg b/ipykernel/resources/logo-svg.svg
new file mode 100644
index 0000000..467b07b
--- /dev/null
+++ b/ipykernel/resources/logo-svg.svg
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   version="1.0"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+   sodipodi:docname="python-logo-only.svg"
+   width="83.371017pt"
+   height="101.00108pt"
+   inkscape:export-filename="python-logo-only.png"
+   inkscape:export-xdpi="232.44"
+   inkscape:export-ydpi="232.44"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <metadata
+     id="metadata371">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="2080"
+     inkscape:window-width="1976"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="2.1461642"
+     inkscape:cx="91.558698"
+     inkscape:cy="47.9926"
+     inkscape:window-x="1092"
+     inkscape:window-y="72"
+     inkscape:current-layer="svg2"
+     width="210mm"
+     height="40mm"
+     units="mm"
+     inkscape:showpageshadow="2"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="pt"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient2795">
+      <stop
+         style="stop-color:#b8b8b8;stop-opacity:0.49803922;"
+         offset="0"
+         id="stop2797" />
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:0;"
+         offset="1"
+         id="stop2799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2787">
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:0.5;"
+         offset="0"
+         id="stop2789" />
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:0;"
+         offset="1"
+         id="stop2791" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3676">
+      <stop
+         style="stop-color:#b2b2b2;stop-opacity:0.5;"
+         offset="0"
+         id="stop3678" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:0;"
+         offset="1"
+         id="stop3680" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3236">
+      <stop
+         style="stop-color:#f4f4f4;stop-opacity:1"
+         offset="0"
+         id="stop3244" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop3240" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4671">
+      <stop
+         style="stop-color:#ffd43b;stop-opacity:1;"
+         offset="0"
+         id="stop4673" />
+      <stop
+         style="stop-color:#ffe873;stop-opacity:1"
+         offset="1"
+         id="stop4675" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4689">
+      <stop
+         style="stop-color:#5a9fd4;stop-opacity:1;"
+         offset="0"
+         id="stop4691" />
+      <stop
+         style="stop-color:#306998;stop-opacity:1;"
+         offset="1"
+         id="stop4693" />
+    </linearGradient>
+    <linearGradient
+       x1="224.23996"
+       y1="144.75717"
+       x2="-65.308502"
+       y2="144.75717"
+       id="linearGradient2987"
+       xlink:href="#linearGradient4671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)" />
+    <linearGradient
+       x1="172.94208"
+       y1="77.475983"
+       x2="26.670298"
+       y2="76.313133"
+       id="linearGradient2990"
+       xlink:href="#linearGradient4689"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4689"
+       id="linearGradient2587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)"
+       x1="172.94208"
+       y1="77.475983"
+       x2="26.670298"
+       y2="76.313133" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4671"
+       id="linearGradient2589"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)"
+       x1="224.23996"
+       y1="144.75717"
+       x2="-65.308502"
+       y2="144.75717" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4689"
+       id="linearGradient2248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)"
+       x1="172.94208"
+       y1="77.475983"
+       x2="26.670298"
+       y2="76.313133" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4671"
+       id="linearGradient2250"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(100.2702,99.61116)"
+       x1="224.23996"
+       y1="144.75717"
+       x2="-65.308502"
+       y2="144.75717" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4671"
+       id="linearGradient2255"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
+       x1="224.23996"
+       y1="144.75717"
+       x2="-65.308502"
+       y2="144.75717" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4689"
+       id="linearGradient2258"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
+       x1="172.94208"
+       y1="76.176224"
+       x2="26.670298"
+       y2="76.313133" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2795"
+       id="radialGradient2801"
+       cx="61.518883"
+       cy="132.28575"
+       fx="61.518883"
+       fy="132.28575"
+       r="29.036913"
+       gradientTransform="matrix(1,0,0,0.177966,0,108.7434)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4671"
+       id="linearGradient1475"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
+       x1="150.96111"
+       y1="192.35176"
+       x2="112.03144"
+       y2="137.27299" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4689"
+       id="linearGradient1478"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
+       x1="26.648937"
+       y1="20.603781"
+       x2="135.66525"
+       y2="114.39767" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2795"
+       id="radialGradient1480"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7490565e-8,-0.23994696,1.054668,3.7915457e-7,-83.7008,142.46201)"
+       cx="61.518883"
+       cy="132.28575"
+       fx="61.518883"
+       fy="132.28575"
+       r="29.036913" />
+  </defs>
+  <path
+     style="fill:url(#linearGradient1478);fill-opacity:1"
+     d="M 54.918785,9.1927421e-4 C 50.335132,0.02221727 45.957846,0.41313697 42.106285,1.0946693 30.760069,3.0991731 28.700036,7.2947714 28.700035,15.032169 v 10.21875 h 26.8125 v 3.40625 h -26.8125 -10.0625 c -7.792459,0 -14.6157588,4.683717 -16.7499998,13.59375 -2.46181998,10.212966 -2.57101508,16.586023 0,27.25 1.9059283,7.937852 6.4575432,13.593748 14.2499998,13.59375 h 9.21875 v -12.25 c 0,-8.849902 7.657144,-16.656248 16.75,-16.65625 h 26.78125 c 7.454951,0 13.406253,-6.138164 13.40625,-13.625 v -25.53125 c 0,-7.2663386 -6.12998,-12.7247771 -13.40625,-13.9374997 C 64.281548,0.32794397 59.502438,-0.02037903 54.918785,9.1927421e-4 Z m -14.5,8.21875012579 c 2.769547,0 5.03125,2.2986456 5.03125,5.1249996 -2e-6,2.816336 -2.261703,5.09375 -5.03125,5.09375 -2.779476,-1e-6 -5.03125,-2.277415 -5.03125,-5.09375 -10e-7,-2.826353 2.251774,-5.1249996 5.03125,-5.1249996 z"
+     id="path1948" />
+  <path
+     style="fill:url(#linearGradient1475);fill-opacity:1"
+     d="m 85.637535,28.657169 v 11.90625 c 0,9.230755 -7.825895,16.999999 -16.75,17 h -26.78125 c -7.335833,0 -13.406249,6.278483 -13.40625,13.625 v 25.531247 c 0,7.266344 6.318588,11.540324 13.40625,13.625004 8.487331,2.49561 16.626237,2.94663 26.78125,0 6.750155,-1.95439 13.406253,-5.88761 13.40625,-13.625004 V 86.500919 h -26.78125 v -3.40625 h 26.78125 13.406254 c 7.792461,0 10.696251,-5.435408 13.406241,-13.59375 2.79933,-8.398886 2.68022,-16.475776 0,-27.25 -1.92578,-7.757441 -5.60387,-13.59375 -13.406241,-13.59375 z m -15.0625,64.65625 c 2.779478,3e-6 5.03125,2.277417 5.03125,5.093747 -2e-6,2.826354 -2.251775,5.125004 -5.03125,5.125004 -2.76955,0 -5.03125,-2.29865 -5.03125,-5.125004 2e-6,-2.81633 2.261697,-5.093747 5.03125,-5.093747 z"
+     id="path1950" />
+  <ellipse
+     style="opacity:0.44382;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15.4174;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     id="path1894"
+     cx="55.816761"
+     cy="127.70079"
+     rx="35.930977"
+     ry="6.9673119" />
+</svg>