prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  [Other] Update name to paperless-ngx in docs
  https://github.com/paperless-ngx/paperless-ngx/issues/4#issuecomment-1039890021
  
  > I would go through the places where the project name is mentioned and add the x to it. Only actually code (variable names) could remain unchanged for backwards compatibility.
  
  </issue>
  <code>
  [start of src/paperless/urls.py]
  1 from django.conf.urls import include
  2 from django.contrib import admin
  3 from django.contrib.auth.decorators import login_required
  4 from django.urls import path, re_path
  5 from django.views.decorators.csrf import csrf_exempt
  6 from django.views.generic import RedirectView
  7 from rest_framework.authtoken import views
  8 from rest_framework.routers import DefaultRouter
  9 
  10 from django.utils.translation import gettext_lazy as _
  11 
  12 from django.conf import settings
  13 
  14 from paperless.consumers import StatusConsumer
  15 from documents.views import (
  16     CorrespondentViewSet,
  17     UnifiedSearchViewSet,
  18     LogViewSet,
  19     TagViewSet,
  20     DocumentTypeViewSet,
  21     IndexView,
  22     SearchAutoCompleteView,
  23     StatisticsView,
  24     PostDocumentView,
  25     SavedViewViewSet,
  26     BulkEditView,
  27     SelectionDataView,
  28     BulkDownloadView,
  29 )
  30 from paperless.views import FaviconView
  31 
  32 api_router = DefaultRouter()
  33 api_router.register(r"correspondents", CorrespondentViewSet)
  34 api_router.register(r"document_types", DocumentTypeViewSet)
  35 api_router.register(r"documents", UnifiedSearchViewSet)
  36 api_router.register(r"logs", LogViewSet, basename="logs")
  37 api_router.register(r"tags", TagViewSet)
  38 api_router.register(r"saved_views", SavedViewViewSet)
  39 
  40 
  41 urlpatterns = [
  42     re_path(
  43         r"^api/",
  44         include(
  45             [
  46                 re_path(
  47                     r"^auth/",
  48                     include(
  49                         ("rest_framework.urls", "rest_framework"),
  50                         namespace="rest_framework",
  51                     ),
  52                 ),
  53                 re_path(
  54                     r"^search/autocomplete/",
  55                     SearchAutoCompleteView.as_view(),
  56                     name="autocomplete",
  57                 ),
  58                 re_path(r"^statistics/", StatisticsView.as_view(), name="statistics"),
  59                 re_path(
  60                     r"^documents/post_document/",
  61                     PostDocumentView.as_view(),
  62                     name="post_document",
  63                 ),
  64                 re_path(
  65                     r"^documents/bulk_edit/", BulkEditView.as_view(), name="bulk_edit"
  66                 ),
  67                 re_path(
  68                     r"^documents/selection_data/",
  69                     SelectionDataView.as_view(),
  70                     name="selection_data",
  71                 ),
  72                 re_path(
  73                     r"^documents/bulk_download/",
  74                     BulkDownloadView.as_view(),
  75                     name="bulk_download",
  76                 ),
  77                 path("token/", views.obtain_auth_token),
  78             ]
  79             + api_router.urls
  80         ),
  81     ),
  82     re_path(r"^favicon.ico$", FaviconView.as_view(), name="favicon"),
  83     re_path(r"admin/", admin.site.urls),
  84     re_path(
  85         r"^fetch/",
  86         include(
  87             [
  88                 re_path(
  89                     r"^doc/(?P<pk>\d+)$",
  90                     RedirectView.as_view(
  91                         url=settings.BASE_URL + "api/documents/%(pk)s/download/"
  92                     ),
  93                 ),
  94                 re_path(
  95                     r"^thumb/(?P<pk>\d+)$",
  96                     RedirectView.as_view(
  97                         url=settings.BASE_URL + "api/documents/%(pk)s/thumb/"
  98                     ),
  99                 ),
  100                 re_path(
  101                     r"^preview/(?P<pk>\d+)$",
  102                     RedirectView.as_view(
  103                         url=settings.BASE_URL + "api/documents/%(pk)s/preview/"
  104                     ),
  105                 ),
  106             ]
  107         ),
  108     ),
  109     re_path(
  110         r"^push$",
  111         csrf_exempt(
  112             RedirectView.as_view(url=settings.BASE_URL + "api/documents/post_document/")
  113         ),
  114     ),
  115     # Frontend assets TODO: this is pretty bad, but it works.
  116     path(
  117         "assets/<path:path>",
  118         RedirectView.as_view(
  119             url=settings.STATIC_URL + "frontend/en-US/assets/%(path)s"
  120         ),
  121     ),
  122     # TODO: with localization, this is even worse! :/
  123     # login, logout
  124     path("accounts/", include("django.contrib.auth.urls")),
  125     # Root of the Frontent
  126     re_path(r".*", login_required(IndexView.as_view()), name="base"),
  127 ]
  128 
  129 
  130 websocket_urlpatterns = [
  131     re_path(r"ws/status/$", StatusConsumer.as_asgi()),
  132 ]
  133 
  134 # Text in each page's <h1> (and above login form).
  135 admin.site.site_header = "Paperless-ng"
  136 # Text at the end of each page's <title>.
  137 admin.site.site_title = "Paperless-ng"
  138 # Text at the top of the admin index page.
  139 admin.site.index_title = _("Paperless-ng administration")
  140
  [end of src/paperless/urls.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/src/paperless/urls.py b/src/paperless/urls.py
  --- a/src/paperless/urls.py
  +++ b/src/paperless/urls.py
  @@ -132,8 +132,8 @@
   ]
   
   # Text in each page's <h1> (and above login form).
  -admin.site.site_header = "Paperless-ng"
  +admin.site.site_header = "Paperless-ngx"
   # Text at the end of each page's <title>.
  -admin.site.site_title = "Paperless-ng"
  +admin.site.site_title = "Paperless-ngx"
   # Text at the top of the admin index page.
  -admin.site.index_title = _("Paperless-ng administration")
  +admin.site.index_title = _("Paperless-ngx administration")
  
verification_info: {"golden_diff": "diff --git a/src/paperless/urls.py b/src/paperless/urls.py\n--- a/src/paperless/urls.py\n+++ b/src/paperless/urls.py\n@@ -132,8 +132,8 @@\n ]\n \n # Text in each page's <h1> (and above login form).\n-admin.site.site_header = \"Paperless-ng\"\n+admin.site.site_header = \"Paperless-ngx\"\n # Text at the end of each page's <title>.\n-admin.site.site_title = \"Paperless-ng\"\n+admin.site.site_title = \"Paperless-ngx\"\n # Text at the top of the admin index page.\n-admin.site.index_title = _(\"Paperless-ng administration\")\n+admin.site.index_title = _(\"Paperless-ngx administration\")\n", "issue": "[Other] Update name to paperless-ngx in docs\nhttps://github.com/paperless-ngx/paperless-ngx/issues/4#issuecomment-1039890021\r\n\r\n> I would go through the places where the project name is mentioned and add the x to it. Only actually code (variable names) could remain unchanged for backwards compatibility.\n", "before_files": [{"content": "from django.conf.urls import include\nfrom django.contrib import admin\nfrom django.contrib.auth.decorators import login_required\nfrom django.urls import path, re_path\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.views.generic import RedirectView\nfrom rest_framework.authtoken import views\nfrom rest_framework.routers import DefaultRouter\n\nfrom django.utils.translation import gettext_lazy as _\n\nfrom django.conf import settings\n\nfrom paperless.consumers import StatusConsumer\nfrom documents.views import (\n    CorrespondentViewSet,\n    UnifiedSearchViewSet,\n    LogViewSet,\n    TagViewSet,\n    DocumentTypeViewSet,\n    IndexView,\n    SearchAutoCompleteView,\n    StatisticsView,\n    PostDocumentView,\n    SavedViewViewSet,\n    BulkEditView,\n    SelectionDataView,\n    BulkDownloadView,\n)\nfrom paperless.views import FaviconView\n\napi_router = DefaultRouter()\napi_router.register(r\"correspondents\", CorrespondentViewSet)\napi_router.register(r\"document_types\", DocumentTypeViewSet)\napi_router.register(r\"documents\", UnifiedSearchViewSet)\napi_router.register(r\"logs\", LogViewSet, basename=\"logs\")\napi_router.register(r\"tags\", TagViewSet)\napi_router.register(r\"saved_views\", SavedViewViewSet)\n\n\nurlpatterns = [\n    re_path(\n        r\"^api/\",\n        include(\n            [\n                re_path(\n                    r\"^auth/\",\n                    include(\n                        (\"rest_framework.urls\", \"rest_framework\"),\n                        namespace=\"rest_framework\",\n                    ),\n                ),\n                re_path(\n                    r\"^search/autocomplete/\",\n                    SearchAutoCompleteView.as_view(),\n                    name=\"autocomplete\",\n                ),\n                re_path(r\"^statistics/\", StatisticsView.as_view(), name=\"statistics\"),\n                re_path(\n                    r\"^documents/post_document/\",\n                    PostDocumentView.as_view(),\n                    name=\"post_document\",\n                ),\n                re_path(\n                    r\"^documents/bulk_edit/\", BulkEditView.as_view(), name=\"bulk_edit\"\n                ),\n                re_path(\n                    r\"^documents/selection_data/\",\n                    SelectionDataView.as_view(),\n                    name=\"selection_data\",\n                ),\n                re_path(\n                    r\"^documents/bulk_download/\",\n                    BulkDownloadView.as_view(),\n                    name=\"bulk_download\",\n                ),\n                path(\"token/\", views.obtain_auth_token),\n            ]\n            + api_router.urls\n        ),\n    ),\n    re_path(r\"^favicon.ico$\", FaviconView.as_view(), name=\"favicon\"),\n    re_path(r\"admin/\", admin.site.urls),\n    re_path(\n        r\"^fetch/\",\n        include(\n            [\n                re_path(\n                    r\"^doc/(?P<pk>\\d+)$\",\n                    RedirectView.as_view(\n                        url=settings.BASE_URL + \"api/documents/%(pk)s/download/\"\n                    ),\n                ),\n                re_path(\n                    r\"^thumb/(?P<pk>\\d+)$\",\n                    RedirectView.as_view(\n                        url=settings.BASE_URL + \"api/documents/%(pk)s/thumb/\"\n                    ),\n                ),\n                re_path(\n                    r\"^preview/(?P<pk>\\d+)$\",\n                    RedirectView.as_view(\n                        url=settings.BASE_URL + \"api/documents/%(pk)s/preview/\"\n                    ),\n                ),\n            ]\n        ),\n    ),\n    re_path(\n        r\"^push$\",\n        csrf_exempt(\n            RedirectView.as_view(url=settings.BASE_URL + \"api/documents/post_document/\")\n        ),\n    ),\n    # Frontend assets TODO: this is pretty bad, but it works.\n    path(\n        \"assets/<path:path>\",\n        RedirectView.as_view(\n            url=settings.STATIC_URL + \"frontend/en-US/assets/%(path)s\"\n        ),\n    ),\n    # TODO: with localization, this is even worse! :/\n    # login, logout\n    path(\"accounts/\", include(\"django.contrib.auth.urls\")),\n    # Root of the Frontent\n    re_path(r\".*\", login_required(IndexView.as_view()), name=\"base\"),\n]\n\n\nwebsocket_urlpatterns = [\n    re_path(r\"ws/status/$\", StatusConsumer.as_asgi()),\n]\n\n# Text in each page's <h1> (and above login form).\nadmin.site.site_header = \"Paperless-ng\"\n# Text at the end of each page's <title>.\nadmin.site.site_title = \"Paperless-ng\"\n# Text at the top of the admin index page.\nadmin.site.index_title = _(\"Paperless-ng administration\")\n", "path": "src/paperless/urls.py"}]}