]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Merge branch 'dev'
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Mon, 5 Dec 2022 09:25:11 +0000 (01:25 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Mon, 5 Dec 2022 09:35:42 +0000 (01:35 -0800)
commit fb9d3f736bebadd528aa47fb3a3c643f3f6d8574
Merge: 4d4d5453 049dc179
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Dec 4 16:47:58 2022 -0800

    Merge pull request #2000 from paperless-ngx/feature-frontend-paperless-mail

    Feature: frontend paperless mail

commit 4d4d545343b8f44cb4377bd4292948b0a6428a87
Merge: 2704bcb9 4b31e5d0
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 16:34:41 2022 -0800

    Merge pull request #848 from p-h-a-i-l/feature-consume-eml

    Feature ability to consume mails and eml files

commit 049dc17902c11456323e3a68327963dfd3cd5f1c
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 16:33:07 2022 -0800

    Moves where the mail views live and puts the ordering on those

commit 4b31e5d0b46639c5cb68005149e2e2f0dc13ca94
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 14:00:59 2022 -0800

    Fixes my broken formatting

commit 8076ebd78ca61b8b4369ed03d462962e03b76708
Merge: fe2db4db 2704bcb9
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 13:55:46 2022 -0800

    Merge remote-tracking branch 'upstream/dev' into feature-consume-eml

commit 2704bcb979d7fa6b357f008413394f24dc950cc0
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 13:06:18 2022 -0800

    Resets to -dev versioning

commit 59f6074093e7156661044941b571a6d1fca5524f
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 12:58:03 2022 -0800

    Bumps version to 1.10.2

commit b1da7f34913fc247d1b4c333cdb98547f5816ff9
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 12:57:19 2022 -0800

    Probably fixes the changelog step not working

commit adde88e7b90ff218eff7ae98dd21eb06c945d173
Merge: a8f3c4be 8e876ef2
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 12:55:55 2022 -0800

    Merge branch 'dev'

commit 8e876ef2d15b3dd5fe055e3b389e1ccb532b2017
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Dec 4 10:20:48 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 2ea0f83a91cb666710e782a53db5aba798c6f98e
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 05:12:02 2022 -0800

    New translations messages.xlf (Italian)
    [ci skip]

commit 05d8ea5a9db8636b11e546cb2eec984126de77d0
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:09:05 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 967248233fcd1b17a0a4e0d037cd67910c666ab1
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:09:04 2022 -0800

    New translations messages.xlf (French)
    [ci skip]

commit b4c4b9fb6a608473aac85f37198e0d9786d7ed39
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:09:03 2022 -0800

    New translations messages.xlf (Spanish)
    [ci skip]

commit adb6483abc4d68770019a5c8b6e05db4d8ee1d82
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:09:01 2022 -0800

    New translations messages.xlf (Arabic)
    [ci skip]

commit 908db55bb7545ab91af4e28db0a2b35fb9f2b490
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:09:00 2022 -0800

    New translations messages.xlf (Belarusian)
    [ci skip]

commit 610f20de286f26535c0dd21b322c4c9e386a7348
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:59 2022 -0800

    New translations messages.xlf (Czech)
    [ci skip]

commit b2513a5cde2e0b590f70d2076b8a41c906224295
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:57 2022 -0800

    New translations messages.xlf (Danish)
    [ci skip]

commit bfa1c13d01838886b44525e8e4a444a4f8f977ab
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:56 2022 -0800

    New translations messages.xlf (Finnish)
    [ci skip]

commit 12aaff431f64229037eefbcb93d7996787b54ddf
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:55 2022 -0800

    New translations messages.xlf (Hebrew)
    [ci skip]

commit 547e5ea55e86548142abe348bb26b00ebaaeee9c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:54 2022 -0800

    New translations messages.xlf (Italian)
    [ci skip]

commit c301127096b6a70ca9f6f595ed9183ecb01dad16
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:52 2022 -0800

    New translations messages.xlf (Dutch)
    [ci skip]

commit 19147855e715d29bce9d8c0312fd596932276409
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:51 2022 -0800

    New translations messages.xlf (Romanian)
    [ci skip]

commit 4e7c7ea1d66be890845f899efe7c3fef2736c038
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:49 2022 -0800

    New translations messages.xlf (Norwegian)
    [ci skip]

commit fcf8a49160702f9cb50552fefccfa20011e6bdca
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:48 2022 -0800

    New translations messages.xlf (Portuguese)
    [ci skip]

commit c6d658a954adca50c71016305e5cf652bf7c16da
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:47 2022 -0800

    New translations messages.xlf (Russian)
    [ci skip]

commit a78cd6526ca4955b56823fdbe1760978c1fa3e13
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:45 2022 -0800

    New translations messages.xlf (Slovenian)
    [ci skip]

commit bf895b54f4de8ff686dd308e38fc4327437de48a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:44 2022 -0800

    New translations messages.xlf (Swedish)
    [ci skip]

commit e5f84ef5837508071147f01bfde5d707a1fe3588
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:43 2022 -0800

    New translations messages.xlf (Turkish)
    [ci skip]

commit 8c690a9a51ea3f11ec9b560a544b6280f4c1b4e7
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:41 2022 -0800

    New translations messages.xlf (Chinese Simplified)
    [ci skip]

commit 56526b970ad2539133196ac832750fee7f4dbb73
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:40 2022 -0800

    New translations messages.xlf (Portuguese, Brazilian)
    [ci skip]

commit 94fbf929167049cd0319f89c4f9b7d017297f0c9
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:38 2022 -0800

    New translations messages.xlf (Croatian)
    [ci skip]

commit 37f5e46d092617708578b19ef1968cd98a48a91a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:37 2022 -0800

    New translations messages.xlf (Luxembourgish)
    [ci skip]

commit 38be817637ebc06a6237900241ccb23110fcc5bf
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:36 2022 -0800

    New translations messages.xlf (Polish)
    [ci skip]

commit 17303f41dadfd1ad8719a613e5e2d94284fcd492
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Dec 3 02:08:34 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit 55ef0d4a1b62c3abe8500cad97ddeecf9f746b84
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Dec 4 08:44:35 2022 -0800

    Fixes language code checks around two part languages

commit a8f3c4be5494303ed16b04ff0b4a78325302f558
Merge: fa62ae82 1b9de2be
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 18:47:09 2022 -0800

    Merge pull request #1947 from alexander-bauer/helm

    Take ownership of k8s-at-home Helm chart,

commit 1b9de2be5ab799c74953068e91c06c8fa57f5275
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 18:46:19 2022 -0800

    Use checkout v3

commit 0e8265f1aec188ea245b8a8aa4d831c95e9dd410
Merge: ea38eb01 5b45a140
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 18:44:28 2022 -0800

    Merge pull request #2109 from paperless-ngx/fix/redis-socket-parsing

    Bugfix: Redis socket compatibility didn't handle URLs with ports

commit 5b45a140b93c27b10302b2c3577fdcfd81b3a8b3
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sat Dec 3 18:30:21 2022 -0800

    Fixes issue when the Redis URL also specifies a port

commit 72fb9a475d1f48c5e3e6ac9a057e65989a0ddbf5
Author: Alexander Bauer <sasha@linux.com>
Date:   Thu Nov 10 02:24:04 2022 +0000

    Ignore end-of-lines on generated Chart README

commit bf97f5807f6f5458ebe9d3b8336cf1b32d1f440c
Author: Alexander Bauer <sasha@linux.com>
Date:   Thu Nov 10 02:21:29 2022 +0000

    Ignore non-yaml Helm chart template

commit a707818b4da0e477026c39ddd9a2081513995d7b
Author: Alexander Bauer <sasha@linux.com>
Date:   Thu Nov 10 01:54:35 2022 +0000

    Change Helm chart releaser to use version tags only

commit fb46c1b96a1d72cc77b795df1bbbc1cbd5edfadd
Author: Alexander Bauer <sasha@linux.com>
Date:   Thu Nov 10 01:52:02 2022 +0000

    Ignore generated Helm chart README from prettier

commit 3226d8b25b7af149f8dbf69525cff9015e3676dd
Author: Alexander Bauer <sasha@linux.com>
Date:   Tue Nov 8 00:46:27 2022 +0000

    fixup! Add mostly-unchanged Helm chart from k8s-at-home

commit 5c4363cbea46630a682ed5f10bf7146f0fa24950
Author: Alexander Bauer <sasha@linux.com>
Date:   Tue Nov 8 00:24:04 2022 +0000

    Add mostly-unchanged Helm chart from k8s-at-home

    - Add the chart from k8s-at-home with some modifications
    - Add the Apache 2.0 license to the new charts/paperless-ngx
      subdirectory, the license under which the chart was distributed by
      k8s-at-home. I believe the chart will have to maintain this license.

    - Update the maintainers section and contact information to point to
      Paperless-ngx.
    - Regenerate the README (using helm-docs)

    - Add a GitHub actions configuration to publish the chart using GitHub
      pages. This makes the GitHub Pages page rendered by this repository
      usable as a Helm repository, without affecting potential future uses
      of the Pages site.

    These are in response to discussion #1790.

commit fa62ae820bdeb402f751e91f1f4d6b17b8248a21
Merge: bcc029a2 17891baf
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 14:19:36 2022 -0800

    Merge pull request #2106 from tooomm/docs/edit

    Docs: Some more small MkDocs updates

commit 17891bafaf8bd7dfcbfc949efddb6bd2d61ec62b
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Sat Dec 3 20:02:40 2022 +0100

    lint

commit 15fdadadef30b40811dcac54bf9fabbde277e759
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Sat Dec 3 19:36:49 2022 +0100

    open demo in new page

commit ce9f604d81820a4fba83ec38e5f58e6317165814
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 09:29:34 2022 -0800

    Explicit default ordering for rule / account views

commit 4f876db5d1d1407a8660aa1c58322fc8e36701e2
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 21:38:52 2022 -0800

    prevent loss of unsaved changes to settings on tab nav

commit 5e5f56dc67c0ba6b516a9ec7e27ca3bf653df548
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 20:39:03 2022 -0800

    Re-org where some of the new classes are found

commit 93fab8bb95661343981fbcab055de3bae9482702
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 12:53:20 2022 -0800

    Apply code suggestions from @stumpylog

commit 35ca2195feb1c32633d88da5972cc5652bc3ebf2
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 15:51:39 2022 -0800

    frontend mail rule validation

    Display non-field validation errors, hide action param field if not needed

commit 7ace66d7fd9f75ed1b66d7242622b8dee478534c
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 13:58:37 2022 -0800

    fix edit dialog getters

commit 4f9a31244b3916b7205388fcae46b2d59cca10f7
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 20:23:40 2022 -0800

    Add settings routing

commit 14cf4f709521123fcb8c9472c5f6b3c663ffc5c8
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 19:38:49 2022 -0800

    Update frontend strings

commit 8bd7c2782621c66703aff65dcf95704a83d72bf9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 17:11:15 2022 -0800

    Hide order parameter, fix imap port

commit 8c4f486fe984e1b5ebd19e314c49ae7277ae7178
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 14:22:07 2022 -0800

    API mail rule & account tests

    and fix use of assign_tags

commit 284941444519e44b2d4322e0af2c9edd408d2b7a
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 14:21:31 2022 -0800

    one-way imap password setting via API, ObfuscatedPasswordField

commit ea1ea0816fbd4d17d9c62fe21e983f1fa62ca4d9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Nov 18 14:10:17 2022 -0800

    Fix mail account / rule delete

commit 52d3a8703c383d414298f8814a1bc3957ce89ec5
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 15:14:58 2022 -0800

    Dynamically load mail rules / accounts settings

commit 4cb4d6adcd33c917c370fd480687fdcecf09230b
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 15:15:59 2022 -0800

    update settings tests to not wait on data which is now on-demand

commit 24444237f2216ce42e1b2484de7e56296fe62a63
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 14:46:57 2022 -0800

    dynamic loading of settings tab contents

commit 40c8629aef6f0b971d17a190ad48e6c6680e4d30
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Nov 10 21:04:29 2022 -0800

    Update welcome tour, move admin button

commit 98cdf614a576618a96035ff7dcc93849199ea52d
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 9 19:59:35 2022 -0800

    Mail form tweaks

    Include add button

    Include add button

commit 2eb2d99a913f4b1dcb8a2d55393e5e96794cb17b
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 9 03:43:57 2022 -0800

    Update frontend fixtures & tests for compatibility

commit 18ad9bcbf2865f27ca8a04bc37b210c9c8c3eb86
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 12:18:47 2022 -0800

    Working mail rule & account edit

commit 997bff4917d5ef8c9426d3751927b4afcf9d2e6f
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 9 02:40:45 2022 -0800

    Update deprecated edit-dialog rxjs

commit 78f9a8089585dd24ea53cf0ac2492de54083ecc7
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 12:09:16 2022 -0800

    mail account + rule deletion

commit 9231df7a4a9e0a4df28b11a5c4bd34fbcf9defe3
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 11:50:57 2022 -0800

    Mail rule edit dialog

commit 6f25917c86a5152ae1ec3988cd42f4dc7b76df66
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 11:11:35 2022 -0800

    Mail account edit dialog

commit c41d1a78a86d1ac585ac03e424d733087ca3fe09
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 10:53:41 2022 -0800

    remove unused toastService from edit dialogs and add confirmation

commit c3331086d55661f9f1a973194cef951d2ccd05d9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 8 03:39:54 2022 -0800

    Basic data retrieval

commit 6bd9ccd8f69e163acb522833bb65b9a07763b1ce
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Sat Dec 3 18:30:02 2022 +0100

    update default edit path

commit 68c7cecb07967b5fbfdc2fd0f900a938a5225b14
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Sat Dec 3 18:29:14 2022 +0100

    add mkdocs site to gitignore

commit bcc029a2c763e8dcc759a815cb7332af1b90bbb9
Merge: 9d418055 1727eb00
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 09:00:02 2022 -0800

    Merge pull request #2104 from paperless-ngx/docs-cleanup

    Chore: Cleans up documentation links

commit ea38eb01b21844aadc99956b54cd3b65ffd458a1
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Fri Dec 2 13:54:15 2022 -0800

    Adds support for database number specification

commit 01d070b882ef9027bef9a046852c2060119edd5d
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Fri Dec 2 09:34:59 2022 -0800

    Adds a layer to translate between differing formats of socket based Redis URLs

commit 1727eb00cc7f98a52125a6ebdb87dad16483de3a
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Fri Dec 2 19:34:43 2022 -0800

    Cleans up a number of internal links

commit 9d4180553c972a813e4f83d4d65858c989eb20b5
Merge: 7c614264 8049af4b
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 07:58:12 2022 -0800

    Merge pull request #2102 from tooomm/patch-1

    Fix doc links in contributing

commit 8049af4b22ae1cd51d3c122eb3afd9c30beea24d
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Sat Dec 3 14:38:55 2022 +0100

    Fix doc links in contributing

commit 7c6142643d054228e0902a213abdea26ff0ad063
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 02:08:51 2022 -0800

    Update more docs references

commit 2e8706f4e2fb97a70494029354c359db356c9d64
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 02:05:49 2022 -0800

    Update frontend translation strings

commit d39d32d55573d2790524db396a35ce92cfe8b695
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 02:04:30 2022 -0800

    Fix docs references

commit 6f52945449d9ddda8167597acc7d5f9165fd9d65
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 01:47:04 2022 -0800

    docs index formatting error

commit 37025297b5d03df42ac98a7b82d04f7502ab6db9
Merge: aa023ea2 dc9e9e3b
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 01:33:31 2022 -0800

    Merge pull request #2095 from paperless-ngx/update-readme-doc-links

    Documentation: Update docs links and screenshot in readme, add favicon

commit aa023ea2e355b5f40fd5d5c1f80efdb45987c09c
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Dec 3 01:30:07 2022 -0800

    correct docs deploy domain

commit 78bf0b63a5ca666742970eb08704284550805e44
Merge: 29391c1c a96ecd67
Author: Felix E <felix@eckhofer.com>
Date:   Sat Dec 3 09:10:20 2022 +0100

    Merge pull request #2087 from Ricks-ha/main

    Add examples to URL and TIME_ZONE

commit dc9e9e3b48b644fb598c20e3949de09b666e31ef
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 20:06:51 2022 -0800

    add favicon

commit ab29c49b7a6855a3884ed1ffa1e00010924fc99f
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 19:09:19 2022 -0800

    Update docs links and screenshot in readme

commit 1c0ac474b85889b0c75875323734dc05b4f5ddf9
Merge: 25fb8d9c 29391c1c
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Fri Dec 2 19:05:28 2022 -0800

    Merge branch 'main' into dev

commit 29391c1c7b6c3adbd96a09d66b5a2b02e392b050
Merge: 58a01a57 69383497
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 15:22:39 2022 -0800

    Merge pull request #2067 from paperless-ngx/material-docs

    [WIP] Feature: Move docs to material-mkdocs

commit 693834971c7413098321800b150c56417e7142c6
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 20:00:23 2022 -0800

    Add v1.10.1 changelog

commit 97376d4b7229b9cdd05d151c3b61a404053c59f9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 09:09:29 2022 -0800

    update ci for documentation build vs deploy

commit 3ee1d2a9a9a3a78e9254850f0d4a9f98664cc5dd
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 29 21:20:45 2022 -0800

    Add changes from #2069

commit 605f885e19136ec1c728e6c8497c0ac76eaa285e
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 29 12:49:23 2022 -0800

    Move docs to material-mkdocs

commit 25fb8d9c3be66e778f6215fc5c4b1377b9b526b9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 08:30:42 2022 -0800

    Update dev version string

commit a96ecd673be07db1304d76037faec056ae170b41
Author: Ricks-ha <ricks@ricksha.eu>
Date:   Fri Dec 2 13:27:57 2022 +0100

    Add examples to URL and TIME_ZONE

commit 58a01a57ee6e018918d7b4d1d01e0d36cb351a50
Merge: a96f79f6 c18fc03e
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Dec 2 03:36:55 2022 -0800

    Merge pull request #2082 from paperless-ngx/v1.10.1-changelog

    Chore: Add v1.10.1 changelong

commit c18fc03ef3c684075ec4ade333c20bc792282bfe
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 20:00:23 2022 -0800

    Add v1.10.1 changelong

commit a96f79f6a33c08d090ec33a2021996cd56df407d
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 18:54:00 2022 -0800

    Bump version to 1.10.1

commit d6f1d004a34d34b7e974393820b04d021bcca41d
Merge: 88cf6ef8 da72d357
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 18:52:35 2022 -0800

    Merge branch 'dev'

commit da72d3571be02b71ffc5650d0031e4ba2143cc78
Merge: 8241da0e 86592928
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 18:52:06 2022 -0800

    Merge pull request #2050 from paperless-ngx/l10n_dev

    New Crowdin updates

commit 8241da0eb3c1c105beecdb4204276d139a514a43
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 17:01:22 2022 -0800

    fix broken npm package-lock

commit 51562667bfe3f05e185ff878268d04af5cd63cdf
Merge: 1aee2988 97eeae65
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 16:40:07 2022 -0800

    Merge pull request #2076 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/tslib-2.4.1

    Bump tslib from 2.4.0 to 2.4.1 in /src-ui

commit 97eeae65a3a0590a95e2ab77afd94a9ba2b48319
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Fri Dec 2 00:39:26 2022 +0000

    Bump tslib from 2.4.0 to 2.4.1 in /src-ui

    Bumps [tslib](https://github.com/Microsoft/tslib) from 2.4.0 to 2.4.1.
    - [Release notes](https://github.com/Microsoft/tslib/releases)
    - [Commits](https://github.com/Microsoft/tslib/compare/2.4.0...2.4.1)

    ---
    updated-dependencies:
    - dependency-name: tslib
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...

Signed-off-by: dependabot[bot] <support@github.com>
commit 1aee2988f739634b49abcd84a31860301fb19dbd
Merge: a63a8dd4 6f0077ef
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 16:39:24 2022 -0800

    Merge pull request #2079 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular-builders/jest-14.1.0

    Bump @angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui

commit a63a8dd488a8af00b4783ec40a53600fe1689b42
Merge: 06a9df6d 39be68a1
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 16:38:38 2022 -0800

    Merge pull request #2078 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-preset-angular-12.2.3

    Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui

commit 06a9df6dbd10f7c4931a1dec4e81aee32625647d
Merge: 49933bb5 7d7d9630
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 16:37:25 2022 -0800

    Merge pull request #2080 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-file-drop-14.0.2

    Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui

commit 49933bb5a82dbf143acdd004493c03a6e0b2450c
Merge: 02c782a1 ac69babf
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 16:18:07 2022 -0800

    Merge pull request #2077 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngneat/dirty-check-forms-3.0.3

    Bump @ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui

commit 7d7d9630c193c119c90235751339b34142ea6dc8
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Thu Dec 1 20:03:32 2022 +0000

    Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui

    Bumps [ngx-file-drop](https://github.com/georgipeltekov/ngx-file-drop) from 14.0.1 to 14.0.2.
    - [Release notes](https://github.com/georgipeltekov/ngx-file-drop/releases)
    - [Changelog](https://github.com/georgipeltekov/ngx-file-drop/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/georgipeltekov/ngx-file-drop/compare/v14.0.1...v14.0.2)

    ---
    updated-dependencies:
    - dependency-name: ngx-file-drop
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...

Signed-off-by: dependabot[bot] <support@github.com>
commit 6f0077efac2cb8d7ecf28fa1f1cb8464f26bbb8c
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Thu Dec 1 20:03:05 2022 +0000

    Bump @angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui

    Bumps [@angular-builders/jest](https://github.com/just-jeb/angular-builders/tree/HEAD/packages/jest) from 14.0.1 to 14.1.0.
    - [Release notes](https://github.com/just-jeb/angular-builders/releases)
    - [Changelog](https://github.com/just-jeb/angular-builders/blob/master/packages/jest/CHANGELOG.md)
    - [Commits](https://github.com/just-jeb/angular-builders/commits/@angular-builders/jest@14.1.0/packages/jest)

    ---
    updated-dependencies:
    - dependency-name: "@angular-builders/jest"
      dependency-type: direct:development
      update-type: version-update:semver-minor
    ...

Signed-off-by: dependabot[bot] <support@github.com>
commit 39be68a1a4dc7a5dc7a29a416c4eb62b34f86262
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Thu Dec 1 20:02:39 2022 +0000

    Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui

    Bumps [jest-preset-angular](https://github.com/thymikee/jest-preset-angular) from 12.2.2 to 12.2.3.
    - [Release notes](https://github.com/thymikee/jest-preset-angular/releases)
    - [Changelog](https://github.com/thymikee/jest-preset-angular/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/thymikee/jest-preset-angular/compare/v12.2.2...v12.2.3)

    ---
    updated-dependencies:
    - dependency-name: jest-preset-angular
      dependency-type: direct:development
      update-type: version-update:semver-patch
    ...

Signed-off-by: dependabot[bot] <support@github.com>
commit ac69babfce90f55486749ce32c56bf29fba17b5e
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Thu Dec 1 20:02:11 2022 +0000

    Bump @ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui

    Bumps [@ngneat/dirty-check-forms](https://github.com/ngneat/dirty-check-forms) from 3.0.2 to 3.0.3.
    - [Release notes](https://github.com/ngneat/dirty-check-forms/releases)
    - [Changelog](https://github.com/ngneat/dirty-check-forms/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/ngneat/dirty-check-forms/compare/v3.0.2...v3.0.3)

    ---
    updated-dependencies:
    - dependency-name: "@ngneat/dirty-check-forms"
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...

Signed-off-by: dependabot[bot] <support@github.com>
commit 02c782a1273ff7411f53a27c3b2f4c807f4f1358
Merge: 4e90fda8 9b602a4b
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Dec 1 08:19:59 2022 -0800

    Merge pull request #2073 from paperless-ngx/fix-frontend-tasks-display

    Fix: frontend tasks display in 1.10.0

commit 4e90fda80f651d67016795d8b273f34a44da880f
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 20:06:56 2022 -0800

    Expands documentation around the permissions of the custom scripts and the folder

commit 88e3e556a1ded458ea2172cbc329a3ac54470b8b
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 20:05:08 2022 -0800

    Fixes the custom scripts not running as root

commit 88cf6ef843ffe428e164f3c7c57cdf1a856c3180
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 30 15:14:21 2022 -0800

    add demo badge

commit 9b602a4bf016ffa6c7731269f8b3a358b1a1fba0
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 30 13:55:51 2022 -0800

    Fix frontend tasks display

commit fe2db4dbf7bbc21b287fd72cd124545160eaa7c0
Author: phail <phail@hacknology.de>
Date:   Wed Nov 30 10:16:39 2022 +0100

    adapt compose file for eml parsing

commit 47c88a6bdd154a343b64ca8ae5073fa58897fa7b
Merge: 4aa31859 a3bc3b78
Author: phail <phail@hacknology.de>
Date:   Wed Nov 30 10:10:57 2022 +0100

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit a3bc3b78d53af7cb58456fe4b3de40258a411744
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 14:34:12 2022 -0800

    Also display the container logs

commit fed7d3e9933202c6ccdc2de7c1203a7bf2af69a0
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 13:59:48 2022 -0800

    Use docker compose to start and stop containers which match directly to our command overrides

commit 3a74f24e49e2e0aeaf17897d2fe504ae3f06377c
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 12:44:53 2022 -0800

    Adds libatomic1 for supporting armv7 better

commit 52afab39cfbd38234aa9c69cd0e1554702c0d991
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 29 12:16:51 2022 -0800

    Organizes the system packages a little bit more

commit 8659292852acaeb07df4a0cadc8cf09649b93961
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Nov 29 00:29:45 2022 -0800

    New translations django.po (Norwegian)
    [ci skip]

commit ce73f159fd23159531c5786b381d4407c6550df9
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 14:13:54 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 71382e9c620d25cca435a234c9a91fb7d352dab2
Merge: 5d3a6e23 a1a802fc
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 14:05:57 2022 -0800

    Merge pull request #2062 from paperless-ngx/fix/2053-long-names-too-quiet

    Bugfix: Don't silence an exception when trying to handle file naming

commit a1a802fc92359e2686497f32e53fb6247ad78886
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 28 13:44:17 2022 -0800

    Don't silence an exception when trying to handle file naming

commit 4200fc610dbed1a70fecbf8ade96ea8501d69e12
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 13:17:22 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 32d212cd9f11962346f828bdb6935c522bc38a81
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 11:17:07 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit 5d3a6e230d5e673c4ce61945098c68222b3b760f
Merge: b33fcc11 f0497e77
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 28 11:04:44 2022 -0800

    Merge pull request #2057 from paperless-ngx/fix/2044-lang-code-diffs

    Bugfix: Some tesseract languages aren't detected as installed.

commit b33fcc117e03b768d4fbfa7ee34470fccf2c940b
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 28 09:25:03 2022 -0800

    Transition to a maintained upload release assert

commit e96d65f9451a1b92aaec0085654c21a50d581adc
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 14 15:38:35 2022 -0800

    Allows parsing of WebP format images

commit cfeed0ce6eec797dc122d692bda7329d60d7045d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 08:30:32 2022 -0800

    New translations django.po (Polish)
    [ci skip]

commit b89ecf7d7764c4b88c1f4caccc161c786aa306d4
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 05:28:39 2022 -0800

    New translations messages.xlf (Luxembourgish)
    [ci skip]

commit 5ca25d44baa9e086781d7c7d03bdb608839ab093
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 28 04:27:31 2022 -0800

    New translations messages.xlf (Luxembourgish)
    [ci skip]

commit 1e11c12d96f79b9822d96a419574b6784a41770e
Merge: e74d7dad 3e22e8e0
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Nov 27 21:16:50 2022 -0800

    Merge branch 'main' into dev

commit 3e22e8e0b96a3d072c85c735639176bd5b23114f
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 19:22:59 2022 -0800

    prepends the latest changelog

commit dba45f93a4de843edba2bfb6641a14ce3f269fe4
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 19:22:03 2022 -0800

    Fixes the pre-commit command

commit 18f3f44ae918dddaed969dc563db8d7895a3148f
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:25 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 85a6a271dc9608518ae584a1a130ea32cef1aa0b
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:23 2022 -0800

    New translations messages.xlf (French)
    [ci skip]

commit abb515d4ea0ef75008b6b90294185ff0b1ccb2d6
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:22 2022 -0800

    New translations messages.xlf (Spanish)
    [ci skip]

commit 309d1f2b6785c9b8905aea1d28a1dc7804a712a0
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:21 2022 -0800

    New translations messages.xlf (Arabic)
    [ci skip]

commit fa2f09bc4b279e22df9679ce1b6801eaa9bc9177
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:19 2022 -0800

    New translations messages.xlf (Belarusian)
    [ci skip]

commit c51590cd1264835ce7cadb43b3c4c70e4712a36d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:18 2022 -0800

    New translations messages.xlf (Czech)
    [ci skip]

commit 8e01406acfed5d06b8904f68bcebe933e938ca54
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:17 2022 -0800

    New translations messages.xlf (Danish)
    [ci skip]

commit 7cce2f0fe60b82c50159d25cb91bf2e87e0cc6c0
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:16 2022 -0800

    New translations messages.xlf (Finnish)
    [ci skip]

commit 95091c2f393808870c91038c54036579eaa024c6
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:14 2022 -0800

    New translations messages.xlf (Hebrew)
    [ci skip]

commit 4a0aa12bd99d1c99dfbf6ebf8751038f1d933169
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:13 2022 -0800

    New translations messages.xlf (Italian)
    [ci skip]

commit 9a0329746a07b7307f7ddd868b4259cce38532cb
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:11 2022 -0800

    New translations messages.xlf (Dutch)
    [ci skip]

commit 8392a6fd4a3777ae6d432af7c4a39e62e744511a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:10 2022 -0800

    New translations messages.xlf (Romanian)
    [ci skip]

commit 8fa18bb8a6c2065fed25f35cbb047cc1e2231979
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:09 2022 -0800

    New translations messages.xlf (Norwegian)
    [ci skip]

commit 0095b593fb7ec30ce33a57931bc1c0a0ab3a87de
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:08 2022 -0800

    New translations messages.xlf (Portuguese)
    [ci skip]

commit b1e5135e2126a133e1ccdb10c703996e4e20860e
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:05 2022 -0800

    New translations messages.xlf (Russian)
    [ci skip]

commit e88755e7ac6b7824001ec6c7f0ca4932b9412182
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:04 2022 -0800

    New translations messages.xlf (Slovenian)
    [ci skip]

commit c58294729132949a6f0b4cf0baba0bbabb60254d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:02 2022 -0800

    New translations messages.xlf (Swedish)
    [ci skip]

commit 98fe3a2cb71a2345e4c7d29eaec4428095ba5857
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:58:01 2022 -0800

    New translations messages.xlf (Turkish)
    [ci skip]

commit 61647606fa2d571c82f93a3f0c6f50894e314f23
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:59 2022 -0800

    New translations messages.xlf (Chinese Simplified)
    [ci skip]

commit 95a1e5c6454a52d446b6b88f7b9721b247558300
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:58 2022 -0800

    New translations messages.xlf (Portuguese, Brazilian)
    [ci skip]

commit 8ead77f128eec14ae790bbd08880cd295a58621a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:57 2022 -0800

    New translations messages.xlf (Croatian)
    [ci skip]

commit b9e9e82f33122d4e501e906cdcb6f68131bea0cd
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:55 2022 -0800

    New translations messages.xlf (Luxembourgish)
    [ci skip]

commit 487fd3a5dd4eafa8ccad1fdd7d0df0532294f273
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:54 2022 -0800

    New translations messages.xlf (Polish)
    [ci skip]

commit 657786a2febe3e57b16ee021b1e968706e426a7a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sun Nov 27 17:57:52 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit e74d7dadfb69d5b5c7e77342cb81608a6a55845a
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 17:43:46 2022 -0800

    Adds the -dev back to the UI version

commit a2937cd54d1ceb60bcecdfa70edc19b769f01a26
Merge: 9b01aa92 7b3ce628
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 17:42:41 2022 -0800

    Merge branch 'main' into dev

commit 7b3ce6289fa2a3588ea92af9988e7ef034237c40
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 17:21:12 2022 -0800

    Bumps version number to 1.10.0

commit a16e8324bef12eed7ecab64d5b814aa514cf9b3c
Merge: 34a0111f 39de531d
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 17:18:08 2022 -0800

    Merge pull request #1960 from paperless-ngx/beta

    [Beta] Paperless-ngx v1.10.0 Release Candidate

commit 39de531df5baed7ef3b2d6eec05db0b6eb87f987
Merge: 4764d4fd c9d6c208
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Nov 27 14:47:14 2022 -0800

    Merge pull request #2041 from paperless-ngx/l10n_dev

    New Crowdin updates

commit 4764d4fd2b774857d4651e71456d7c0bc3a6cc13
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 26 12:28:51 2022 -0800

    New translations django.po (German)
    [ci skip]

commit e147d4571f43a47c0312c4170f62c1746543b130
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 26 09:54:00 2022 -0800

    New translations django.po (German)
    [ci skip]

commit dc9aaa64727e5f1cdb9f26b8da8c34ccb822522e
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Nov 22 15:21:31 2022 -0800

    New translations django.po (German)
    [ci skip]

commit 8a061c4ac219a60720d5ec6ca20aec8e13a54a10
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Nov 22 15:21:30 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit d051c5c2824dd7cf01e3a0d068264e2340e26808
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 08:48:48 2022 -0800

    Remove ar-SA

commit 9e60810a8bc3c7b570f4157080ec77a6f21ed3ba
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 12 08:33:08 2022 -0800

    New translations messages.xlf (Arabic)
    [ci skip]

commit 96ee7990b2bc3ac1ebfe10d1048a4dcf697da3f1
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Fri Nov 11 13:59:54 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 224bfeb72e18256b79afc5eff4894a30331b8090
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Fri Nov 11 13:04:01 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit f0497e77449bcb18ede3452e26fc001dfd3feaf4
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 27 08:28:22 2022 -0800

    Fixes how a language code like chi-sim is treated in the checks

commit c9d6c208afe5d56035cd2f10c51ed530a8371c40
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 26 12:28:51 2022 -0800

    New translations django.po (German)
    [ci skip]

commit 9f2b8b1734ece2a5c51be743760098b33c9e9bfe
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 26 09:54:00 2022 -0800

    New translations django.po (German)
    [ci skip]

commit a04b9e37552b7a5f4b6f26078c38fc93041d1110
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Nov 22 15:21:31 2022 -0800

    New translations django.po (German)
    [ci skip]

commit a81d4c5e9dad6e8f49c20c316513cca27d99a032
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Nov 22 15:21:30 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit 2140d4209825252bd9106ac9ade6dc1ba4e507dd
Merge: a5283525 2a5dc4de
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 22 14:35:34 2022 -0800

    Merge pull request #2025 from paperless-ngx/fix-redo-ocr-message

    Add info that re-do OCR doesnt automatically refresh content

commit 43325371fc79726f2fbad6b00d24b4e4614fea9b
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 08:48:48 2022 -0800

    Remove ar-SA

commit d10721089e21d6a2c16f1da8b63e7e19ee22788d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 12 08:33:08 2022 -0800

    New translations messages.xlf (Arabic)
    [ci skip]

commit f1a1a2da8b89a6c30a837e8d96d8efccb678a05b
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Fri Nov 11 13:59:54 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 612e0a1163b8fb1143108b8615097f05f0a81b15
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Fri Nov 11 13:04:01 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit 2a5dc4de3865823dca78f6042a9cbfb526950667
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 22 14:16:04 2022 -0800

    Add info that re-do OCR doesnt automatically refresh content

commit a5283525bc6b26f4f7b03f09ea1fe5e43cef440a
Merge: f0155565 de98d748
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Nov 22 13:53:08 2022 -0800

    Merge pull request #2023 from paperless-ngx/fix/2019-create-date

    Bugfix: Fix created_date being a string

commit de98d748a9548e420be3cef3fde58eb4ce777940
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Tue Nov 22 10:11:27 2022 -0800

    If override_date is provided, coerce it into a datetime

commit f015556562ffa291f41076f49938111a674f3a60
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 21 14:56:14 2022 -0800

    Adds a test to cover this edge case

commit b897d6de2e3fbd26c6b6bcd9c09932e99e14fead
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 21 14:45:20 2022 -0800

    Don't use the sidecar file when redoing the OCR, it only contains new text

commit 54f20b381e675ddab881e16a9a8ee2181591e979
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 21 12:59:14 2022 -0800

    Documents some issues and the required manual fixes for MariaDB

commit c0d42480216bc4df0caed097713f960f644e4d76
Merge: 27f7f0a9 870e295a
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Nov 21 22:19:02 2022 -0800

    Merge pull request #1973 from paperless-ngx/l10n_dev

    New Crowdin updates

commit 870e295aaeb0950cebed77e651df786b321c313b
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Mon Nov 21 21:43:54 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit 4aa318598fd0dc6c5d4e08dd2a13e7bf614511ec
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 23:26:20 2022 +0100

    add test comments

commit 00f39d8b581c358f2484680275222f6ad909758c
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 22:49:42 2022 +0100

    add test comments

commit 0b1a16908fbbb88728301fa708d221a9138539ce
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 20:33:07 2022 +0100

    Include .eml reference in docs

commit d9796e5003b9a5bba80f4f1167d07524edb6aa3a
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 20:24:36 2022 +0100

    change order of elements in parsed Texts

commit 3599bb52c05a05132bedf8e641dbd2bcb1ef3410
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 20:12:41 2022 +0100

    minor test improvements

commit af8a6c3764659efa285b24ede4759aeb99eb6bcb
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 19:53:57 2022 +0100

    fix filenames

commit 6d37ebf79ea655197239982d19193c17dd534b46
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 20 09:15:06 2022 -0800

    Fixes one more place which used manual size formatting

commit f6a70b85f4cff8d490884a2a11ba45f44c286a98
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 20 09:13:08 2022 -0800

    Use Django templating engine

commit 538a4219bd951a03c403133087954ac64d4b53a2
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 20 09:10:44 2022 -0800

    Fixes missing return

commit 85c41b79be2033bdec5226c9687a153d7f4edc06
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Sun Nov 20 08:02:06 2022 -0800

    Adds the new packages without updating other dependencies

commit 25d014d8ef8a8dcc7f9cef0ae446eb1418ef0754
Merge: 9ec89762 27f7f0a9
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Nov 20 07:48:55 2022 -0800

    Merge branch 'beta' into l10n_dev

commit 9b01aa9202ccd5ac361ab8b23ff006dcf54aa1ea
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 14 15:47:22 2022 -0800

    Fixes the link for flake8 to the new (?) GitHub repo

commit df101f5e7a9eb97521d752e9755806a510e12d89
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 16:09:46 2022 +0100

    split handle_message function

commit 1fa735eb23afe98d156b5ba6bf7560cc65397202
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 15:44:43 2022 +0100

    use imagehash instead of bitwise hashing

commit ebe21a01140aa5d492c34fc88be63cdfcc57b025
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 14:22:30 2022 +0100

    eml parsing requires tika

commit d132eba1431fd2c8a9dd57904cb019c26dbcc2e2
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 12:48:03 2022 +0100

    optimize regex

commit 073c3c8fed873e96a674d227f67ec96e169fbc1d
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 12:36:49 2022 +0100

    use html.escape instead of some self build functions

commit e3c1bde79334940bb70d8ed5235de85bbafc15ca
Author: phail <phail@hacknology.de>
Date:   Sun Nov 20 12:06:35 2022 +0100

    remove log mocking, replace pytest raises, use humanfriendly

commit 27f7f0a9411e85710824037d63f0e961c5a1fb4a
Merge: 9f5fd6c3 914661fd
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Nov 17 14:31:46 2022 -0800

    Merge pull request #1998 from paperless-ngx/fix/1993-date-overflow

    Bugfix: Don't allow exceptions during date parsing to fail consume

commit 9f5fd6c3ba93f08d1982c33e8c861bf1164272d0
Merge: 0ae82005 3dfeee93
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Nov 17 14:30:23 2022 -0800

    Merge pull request #1967 from paperless-ngx/feature-scripts-output

    Feature: Capture stdout & stderr of the pre/post consume scripts

commit 914661fdbb7adfd62481013a0bc759c920c1289d
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Thu Nov 17 13:37:37 2022 -0800

    Don't allow an exception when trying to parse a date cause complete failure

commit 0ae8200593e6c92f92004c2bf13f1e19d930775e
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Mon Nov 14 15:47:22 2022 -0800

    Fixes the link for flake8 to the new (?) GitHub repo

commit b68906b14ed89832705397b6822cf4001de87626
Author: phail <phail@hacknology.de>
Date:   Sun Nov 13 22:49:52 2022 +0100

    merge pipfile

commit 681eecc46ee042ef54f4f27b92df12685576d153
Merge: 1578e8de d4712234
Author: phail <phail@hacknology.de>
Date:   Sun Nov 13 22:43:55 2022 +0100

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 1578e8de2dab940849975b4664b329000568edc3
Author: phail <phail@hacknology.de>
Date:   Sun Nov 13 22:33:26 2022 +0100

    fix live tests

commit 023c931401db7236d2d1f10def76c1855f465917
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Nov 13 07:11:45 2022 -0800

    Fix top search not working due to missing button type

commit 9ec89762a35e19e7415374e9e24c20b2d16235ac
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 12 09:31:54 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit fa47595ac8b5e411bf68b72dc98f2bfb335ae6d9
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 08:58:01 2022 -0800

    remove ar_SA

    [ci skip]

commit 79f5019b40dd15effe66ef94a9ca1854908e9937
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Sat Nov 12 08:53:52 2022 -0800

    New Crowdin updates (#1971)

    * New translations messages.xlf (Serbian (Latin))
    [ci skip]

    * New translations messages.xlf (Serbian (Latin))
    [ci skip]

    * New translations messages.xlf (Italian)
    [ci skip]

    * New translations django.po (Italian)
    [ci skip]

    * New translations django.po (Serbian (Latin))
    [ci skip]

    * New translations messages.xlf (Russian)
    [ci skip]

    * New translations messages.xlf (Polish)
    [ci skip]

    * New translations messages.xlf (Serbian (Latin))
    [ci skip]

    * New translations messages.xlf (Luxembourgish)
    [ci skip]

    * New translations messages.xlf (Croatian)
    [ci skip]

    * New translations messages.xlf (Portuguese, Brazilian)
    [ci skip]

    * New translations messages.xlf (Chinese Simplified)
    [ci skip]

    * New translations messages.xlf (Turkish)
    [ci skip]

    * New translations messages.xlf (Swedish)
    [ci skip]

    * New translations messages.xlf (Slovenian)
    [ci skip]

    * New translations messages.xlf (Portuguese)
    [ci skip]

    * New translations messages.xlf (Norwegian)
    [ci skip]

    * New translations messages.xlf (German)
    [ci skip]

    * New translations messages.xlf (Dutch)
    [ci skip]

    * New translations messages.xlf (Italian)
    [ci skip]

    * New translations messages.xlf (Hebrew)
    [ci skip]

    * New translations messages.xlf (Finnish)
    [ci skip]

    * New translations messages.xlf (Danish)
    [ci skip]

    * New translations messages.xlf (Czech)
    [ci skip]

    * New translations messages.xlf (Belarusian)
    [ci skip]

    * New translations messages.xlf (Spanish)
    [ci skip]

    * New translations messages.xlf (French)
    [ci skip]

    * New translations messages.xlf (Romanian)
    [ci skip]

    * New translations messages.xlf (Arabic)
    [ci skip]

    * Remove ar-SA

    * remote ar other than ar-ar

Co-authored-by: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
commit 756ce2f9d81a9a281e4b219999f0a35de9c536d1
Merge: 50a211f3 d4712234
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 08:33:43 2022 -0800

    Merge branch 'dev' into beta

commit d47122340a20ab429187b4bdbc74a1172da0b1dc
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Nov 12 08:31:25 2022 -0800

    Add translation strings for welcome tour buttons

commit b01cbc9aa08a51a63b1719e71335d140ce73a432
Author: phail <phail@hacknology.de>
Date:   Sat Nov 12 15:48:30 2022 +0100

    add conditions to unittests

commit 3dfeee9332f4436467056178d7ddc3ff3a2aa8a8
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Fri Nov 11 10:09:56 2022 -0800

    Don't do decoding work if not needed

commit 057f6016cc92f6d21b04b9a16dc6f0b255c8b401
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Fri Nov 11 08:58:49 2022 -0800

    Adds further testing to cover scripts with non-zero exit codes

commit c4965580deebe97b40bfddaa9e0301d0ba108078
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Thu Nov 10 17:40:36 2022 -0800

    Fixes stderr appearing to have content when it doesn't

commit 9a47963fd5aa54c5bf463110603a19527a057ca3
Author: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
Date:   Wed Nov 9 20:11:36 2022 -0800

    Captures the stdout and stderr of the pre/post scripts into the log

commit 50a211f36767a3aee9f679c77ba81f41cc0dea07
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Thu Nov 10 17:25:39 2022 -0800

    Fixes an issue with the install of languages and read-only variable

commit 5f278d7fbbe1cf690a8215d59339b9cac2b7422c
Merge: e5106bdc a17d2519
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Nov 9 21:37:29 2022 -0800

    Merge pull request #1956 from paperless-ngx/l10n_dev

    New Crowdin updates

commit a17d251913ac65f852aa8e80b63a306358956533
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:37 2022 -0800

    New translations django.po (Serbian (Latin))
    [ci skip]

commit 1cbf08865698a05301d88275bbad485ea325a92a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:36 2022 -0800

    New translations messages.xlf (Serbian (Latin))
    [ci skip]

commit d3254d6bcfffc0e3abe95b86a9b1912c6616b77e
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:35 2022 -0800

    New translations messages.xlf (Luxembourgish)
    [ci skip]

commit 1543729c7be2684d47a1e7a28e8b7647f01801de
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:34 2022 -0800

    New translations messages.xlf (Croatian)
    [ci skip]

commit ef2a96c34b9de59bb0cd7f9e98b721ce3848a076
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:32 2022 -0800

    New translations messages.xlf (Portuguese, Brazilian)
    [ci skip]

commit 656b1e150ffd10527b0139ed3ea554ca6435d8c5
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:31 2022 -0800

    New translations messages.xlf (Chinese Simplified)
    [ci skip]

commit e0f61003cfeb46543bd68ccaa067977078149c35
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:30 2022 -0800

    New translations messages.xlf (Turkish)
    [ci skip]

commit 1ca98678cd592670a3366fcda0dd2fd06dda950f
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:28 2022 -0800

    New translations messages.xlf (Swedish)
    [ci skip]

commit 9919cc19567ea753552e09626795c07c45b9a737
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:27 2022 -0800

    New translations messages.xlf (Slovenian)
    [ci skip]

commit d2096e3c0593af1149f9a5395536cf309f450826
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:26 2022 -0800

    New translations messages.xlf (Portuguese)
    [ci skip]

commit 5f2b508b7a3800936fb2fbbb403a641d7550c97c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:24 2022 -0800

    New translations messages.xlf (Polish)
    [ci skip]

commit 752d4f424900a72c92306b0151b474672b22c99d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:23 2022 -0800

    New translations django.po (German)
    [ci skip]

commit 72e7d5150e724b63fd3ae6f34fb443375a939e04
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:22 2022 -0800

    New translations messages.xlf (Norwegian)
    [ci skip]

commit 42a9e05a7fe1fd16a471fe006f2185b6d34ed658
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:21 2022 -0800

    New translations messages.xlf (Italian)
    [ci skip]

commit b4add2ed55b346fdf3bb00dc5e4ea88457e9fbdc
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:19 2022 -0800

    New translations messages.xlf (Hebrew)
    [ci skip]

commit ed7d9295bd291626ef52a0f3f498884da04d4d3a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:18 2022 -0800

    New translations messages.xlf (Finnish)
    [ci skip]

commit 5b7b1b2349db8daf23b3f89af865109c8fde99cc
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:16 2022 -0800

    New translations messages.xlf (Danish)
    [ci skip]

commit d5c930acc955e4ebbb5cdc6e1f35da32c99fc729
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:15 2022 -0800

    New translations messages.xlf (Czech)
    [ci skip]

commit 4c93d6d7e616c4bdb8cc205d50b918433626fc07
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:14 2022 -0800

    New translations messages.xlf (Belarusian)
    [ci skip]

commit 066f3264fbf760158c2a8d65645a86666b9f2811
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:12 2022 -0800

    New translations messages.xlf (Spanish)
    [ci skip]

commit 88a803f94950523b62cf7ea412642363fbaeb7b5
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:11 2022 -0800

    New translations messages.xlf (French)
    [ci skip]

commit e69615dc0665db8897004050ee7476df11cccbde
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:10 2022 -0800

    New translations messages.xlf (Romanian)
    [ci skip]

commit a1e0840e2486faacd3dcc492def43106922ca18d
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:08 2022 -0800

    New translations messages.xlf (Dutch)
    [ci skip]

commit d814353e830bdd442cd381fd546ed02103ce31a8
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:07 2022 -0800

    New translations messages.xlf (German)
    [ci skip]

commit 06d7845ecae8cba3bf4219ab8bf9194f6e6c3a3a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:04 2022 -0800

    New translations django.po (Dutch)
    [ci skip]

commit ae8682c7a53d224f672aa6e2444a2b32c3e428d8
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:03 2022 -0800

    New translations django.po (Romanian)
    [ci skip]

commit c9c0b3d43031b01b38ace9ee345f97c9835964c6
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:02 2022 -0800

    New translations django.po (Luxembourgish)
    [ci skip]

commit cc46fc7e4ba09f785abb39ec9c3ef4c9109a6707
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:01 2022 -0800

    New translations django.po (Croatian)
    [ci skip]

commit d1b1ba21cd3b0b7038e62936818352c77f67a12b
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:12:00 2022 -0800

    New translations django.po (Portuguese, Brazilian)
    [ci skip]

commit a009417a996401622db2a336e94312fe7480364c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:59 2022 -0800

    New translations django.po (Chinese Simplified)
    [ci skip]

commit 775da720ec5dde3562d2b01c536e0ff4ffc4351b
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:58 2022 -0800

    New translations django.po (Turkish)
    [ci skip]

commit aeae6ea0d349f3bbf4ebbb9b7b14652537b1a48c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:57 2022 -0800

    New translations django.po (Swedish)
    [ci skip]

commit 0ae46d2269c503327071c3667946aa060c433ad8
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:56 2022 -0800

    New translations django.po (Slovenian)
    [ci skip]

commit 0e7f1ec0dee2a2b3513e901f3489d1f3bd564ab7
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:55 2022 -0800

    New translations django.po (Russian)
    [ci skip]

commit 13cd55b96fac9bd5c1b61e93fc19d4556e6b0b5a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:53 2022 -0800

    New translations django.po (Portuguese)
    [ci skip]

commit 9139e807ecb7115663e1e65ac3b855c58c57ab6a
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:52 2022 -0800

    New translations messages.xlf (Arabic)
    [ci skip]

commit 53616f6625663d97437d781cdede1281dac5c062
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:51 2022 -0800

    New translations django.po (Polish)
    [ci skip]

commit 526fdf11535f87d67c88e5b02d1e9fd89e451fb2
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:50 2022 -0800

    New translations django.po (Italian)
    [ci skip]

commit fc4aceb0eea83800aff0c0f3bde9711e1393b79e
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:49 2022 -0800

    New translations django.po (Hebrew)
    [ci skip]

commit 3d8421b718e997b8b1e4913f1279847242817d70
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:48 2022 -0800

    New translations django.po (Finnish)
    [ci skip]

commit 6cebceda15ee35410ddb2bfbd50415cbafb4a466
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:47 2022 -0800

    New translations django.po (Danish)
    [ci skip]

commit e1fd6bda19fff639daa17b7273616f714af37f9f
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:46 2022 -0800

    New translations django.po (Czech)
    [ci skip]

commit fd34414b1725f52b9834dc6d633f4cf01666f819
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:45 2022 -0800

    New translations django.po (Belarusian)
    [ci skip]

commit 3ce1886a545db3d46356a65670776bc32bd6cc3c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:44 2022 -0800

    New translations django.po (Arabic)
    [ci skip]

commit 8ed43779a878fb04ba47d03722ea206bc9d4340c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:43 2022 -0800

    New translations django.po (Spanish)
    [ci skip]

commit a7949b3e229f3c224684ee49f8fdcafa7f7cd95f
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:42 2022 -0800

    New translations django.po (French)
    [ci skip]

commit 19c293c3e6d80e386699aef33c0c96de07e4300c
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:41 2022 -0800

    New translations django.po (Norwegian)
    [ci skip]

commit ccb1ec4ff5fec68579d3d4e173ee5fc4509d3a23
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Wed Nov 9 15:11:40 2022 -0800

    New translations messages.xlf (Russian)
    [ci skip]

commit e5106bdca0811d313a6b7894a27aa301a7b3cf90
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Wed Nov 9 14:00:09 2022 -0800

    Updates the version strings to 1.10.0

commit ba1366f49a01c7e2723e1ae4e05650e9ddae6744
Merge: 34a0111f f3b3db30
Author: Trenton H <797416+stumpylog@users.noreply.github.com>
Date:   Wed Nov 9 13:51:10 2022 -0800

    Merge branch 'dev' into beta

commit acd383241777e16e923ecceece9f2b669adb1ef3
Author: phail <phail@hacknology.de>
Date:   Thu Nov 3 21:08:15 2022 +0100

    merge Pipfile.lock

commit 82b2ba3cc2a3fb7a692f54d6c05d2395350b136f
Merge: 3de6e0bc 7e3e0a0f
Author: phail <phail@hacknology.de>
Date:   Thu Nov 3 21:00:01 2022 +0100

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 3de6e0bcf1b6e0e7afe578e37fd67f5b455c1987
Author: phail <phail@hacknology.de>
Date:   Thu Nov 3 00:58:36 2022 +0100

    put parser into setup
    make test using convert optional
    Gotenberg live testing

commit 34a0111ff5ca7dd096d69d0b4a11b97dd6121ea1
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Oct 31 13:06:17 2022 -0700

    update logs section

commit b511b084d08e6e33964649f6eb1d2fadcc7cc844
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Oct 30 06:48:41 2022 -0700

    Update matrix url

    [ci skip]

commit 6df73ae940420eed2b1f5c300b90992d0becb013
Author: phail <phail@hacknology.de>
Date:   Sat Oct 29 23:20:35 2022 +0200

    gotenberg with modified cmd

commit 4a24ba51c5dadf5a99e060c6147f00210c954004
Merge: 87472b31 d5fb98b7
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Oct 28 22:22:08 2022 -0700

    Merge pull request #1876 from astubenbord/main

    Added new application to list of affiliated projects

commit d5fb98b7c43e607bc89602d680772d5278133a55
Author: Anton Stubenbord <79228196+astubenbord@users.noreply.github.com>
Date:   Fri Oct 28 11:07:42 2022 +0200

    Added new application to list of affiliated projects

commit 2204090151dbb34f57af8482366db1b3a4153ad8
Author: phail <phail@hacknology.de>
Date:   Thu Oct 27 23:53:47 2022 +0200

    fix string

commit 3c81a7468b47cdf5a2df0826429df99ab21f769b
Author: phail <phail@hacknology.de>
Date:   Thu Oct 27 23:41:29 2022 +0200

    replace thumbnail creation with mock

commit 5ef86f9489a43204b7ff840172a80bd0783ac260
Merge: 90cb0836 9b82ab95
Author: phail <phail@hacknology.de>
Date:   Thu Oct 27 23:12:51 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 90cb0836bb5d5f06b205290c2431efa7527b7c72
Author: phail <phail@hacknology.de>
Date:   Thu Oct 27 23:11:41 2022 +0200

    Downgrade pdf validation to text only

commit ef1d4264b53d4eea2df6897c98cc31d883e35073
Author: phail <phail@hacknology.de>
Date:   Thu Oct 27 00:27:15 2022 +0200

    improve test coverage a little

commit e1fa59122dbf3224c5c5100dccee369c43a7fb8a
Merge: 5bf26369 3357fa19
Author: phail <phail@hacknology.de>
Date:   Wed Oct 26 20:59:49 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 5bf26369e2b215e4418c49180c8393fc09365eea
Author: phail <phail@hacknology.de>
Date:   Tue Oct 25 21:17:40 2022 +0200

    remove erroring paramerter

commit 36239ba09f0ffc6e30cb5014f26e3edc0f7dd862
Author: phail <phail@hacknology.de>
Date:   Mon Oct 24 22:15:33 2022 +0200

    rename help text

commit 318c1d2fbd4eb9cd000ccb39dcce5eb060647eee
Merge: e7c40fc3 f8ce6285
Author: phail <phail@hacknology.de>
Date:   Mon Oct 24 21:12:35 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit e7c40fc3dc645d4fbe9665d82595aff71060b071
Author: phail <phail@hacknology.de>
Date:   Sun Oct 23 22:02:11 2022 +0200

    Update Pipfile

commit 0da0b1c062138ec0bc8117fcfec5cd05074ac771
Author: phail <phail@hacknology.de>
Date:   Sun Oct 23 21:39:15 2022 +0200

    update variable names

commit 08988e11f81c4db9411109cd5f48d365c9c30c11
Merge: 30372b0e 8be6c707
Author: phail <phail@hacknology.de>
Date:   Sun Oct 23 20:37:22 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 30372b0e8564ab7de6986e8acd132a3b6df0ceb4
Author: phail <phail@hacknology.de>
Date:   Sun Oct 23 17:18:10 2022 +0200

    add tests for mail_to_html and generate_pdf_from_mail

commit 567e89d1c7a8fea4f66b717d3ba4cb9680fba0da
Author: phail <phail@hacknology.de>
Date:   Sat Oct 22 02:25:23 2022 +0200

    test for broken eml, add test_generate_pdf

commit f1f5227ccdbb75fff2f6af8ed1992e384939bcc5
Author: phail <phail@hacknology.de>
Date:   Sat Oct 22 00:44:32 2022 +0200

    add unittest for external images

commit 09b5bd17f2123db0679b10abd8c819b2c2a903ce
Author: phail <phail@hacknology.de>
Date:   Wed Oct 19 23:19:33 2022 +0200

    add unittest for generate_pdf_from_html

commit e384bd78c5eeb97fce8652dde24a44e71c040d39
Author: phail <phail@hacknology.de>
Date:   Tue Oct 18 23:48:07 2022 +0200

    add unittest for transform_inline_html

commit fda844f64cce6247f484dd8d14038ea36db9f934
Author: phail <phail@hacknology.de>
Date:   Sat Oct 15 15:41:43 2022 +0200

    add unittest for parse

commit daf90399bddd5cf85e25204a50860995eb55efaf
Author: phail <phail@hacknology.de>
Date:   Sat Oct 15 13:13:29 2022 +0200

    Add unitest for tika_parse()

commit 3d37e49c1a41f117518d73165311710d79045d8f
Author: phail <phail@hacknology.de>
Date:   Fri Oct 14 15:43:43 2022 +0200

    add 2 more tests

commit 261c6fb9904e5365ca5c8f61a944ffff1c448d5c
Author: phail <phail@hacknology.de>
Date:   Thu Oct 13 01:03:09 2022 +0200

    add unittest for get_thumbnail

commit 87472b31d27be1fff304377ec3260268f3ecc44d
Merge: 430c5c3b 1024d7e6
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Oct 11 19:59:46 2022 -0700

    Merge pull request #1780 from paperless-ngx/fix/issue-1647

    Documentation: Add note re MS exchange servers

commit 1024d7e6e23c1fd64e29959faa97c69af53caf80
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Oct 11 15:12:22 2022 -0700

    Add note re MS exchange servers

commit 430c5c3b87cab852bb556fca83dc737fc30f7c23
Merge: 0b5c6d35 b7c33550
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Oct 7 23:45:51 2022 -0700

    Merge pull request #1761 from paperless-ngx/docs/lsio-tweak

    Documentation: Tweak LinuxServer

commit b7c335507ff9a38c316f1c4a727a9b2128f05069
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Thu Oct 6 18:24:25 2022 -0700

    Fixes the LSIO migration setting for the media root

commit 0b5c6d3532d364258f5c93ddfdcc5e8054ba0fbb
Merge: fdac108c 5fd39472
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Oct 6 13:22:58 2022 -0700

    Merge pull request #1731 from paperless-ngx/fix/1624

    Documentation: Adds troubleshooting note about Kubernetes and ports

commit fdac108cab86d3d9504994f0454a7611576c45a9
Merge: 5639659b 821c14fb
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Oct 3 17:07:06 2022 -0700

    Merge pull request #1733 from paperless-ngx/docs-lsio-migrate

    Documentation: LinuxServer.io Migration

commit 821c14fbce0e776e26317366c7a4e1ed0bc449d0
Author: Trenton H <holmes.trenton@gmail.com>
Date:   Mon Oct 3 11:14:18 2022 -0700

    Corrects how the link to example compose files looks

commit 8c03d9c63837a47f328711d33d154a33aae8685b
Author: Trenton H <holmes.trenton@gmail.com>
Date:   Mon Oct 3 11:11:51 2022 -0700

    Corrects a re-numbered step

commit 174a609449d4ed7d9210175d98f33407ac2f0533
Author: Trenton H <holmes.trenton@gmail.com>
Date:   Mon Oct 3 10:16:53 2022 -0700

    Adds a few steps for migration from the LinuxServer.io image

commit 5fd394726ee1718d762c71efb4203f0e66c1df54
Author: Trenton H <holmes.trenton@gmail.com>
Date:   Mon Oct 3 09:01:07 2022 -0700

    Adds troubleshooting note for Kubernetes about needing to set the port again

commit 5639659b6384fc675569fbec044bc2757a6696f5
Merge: 807b7130 7ba9cdbe
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Sep 28 09:48:20 2022 -0700

    Merge pull request #1683 from paperless-ngx/fix/issue-1660

    Mariadb compose files should use `PAPERLESS_DBPASS`

commit 7ba9cdbe23365082a958856f5f52bae2908b3e14
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Sep 28 09:07:30 2022 -0700

    Mariadb compose files should use `PAPERLESS_DBPASS`

commit 807b7130e5bb422d1ae418d65a9203076db262cb
Merge: 9d117ee1 e2d593c0
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Sep 27 16:50:23 2022 -0700

    Merge pull request #1671 from paperless-ngx/v1.9.2-changelog

    [Documentation] Add v1.9.2 changelog

commit e2d593c023ea12853e777d70d01db201db7e38e4
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Sep 27 10:04:41 2022 -0700

    Fix formatting, add note about 1.9.1 version string

commit 74559631244a906fe38ba050fe391d9efeb1f343
Author: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Tue Sep 27 17:01:37 2022 +0000

    Changelog  - GHA

commit cdd2b99b6b29cfb1fd8e9c3ceeb367d3237fd665
Merge: d0a0ae91 72ce4405
Author: phail <phail@hacknology.de>
Date:   Mon Jul 11 23:58:21 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit d0a0ae91c416cad9ccdb01fc9ed93e6f8c4214fc
Merge: c04b9fd7 feaf2da8
Author: phail <phail@hacknology.de>
Date:   Fri May 20 19:29:52 2022 +0200

    Merge branch 'dev' into feature-consume-eml

commit c04b9fd7f6a63c2889c59e0168956d89369c4876
Author: phail <phail@hacknology.de>
Date:   Thu May 19 22:51:17 2022 +0200

    switch to From: Header instead of date to compensate for older libmagic versions

commit 6809b15ce13c9d07d24a8308ed97e3b42cc5eae4
Author: phail <phail@hacknology.de>
Date:   Sat May 14 16:47:12 2022 +0200

    workaround for wrong mime detection of .eml files

commit c317eca1ca40cf94e83873112c7dede513574714
Author: phail <phel@hacknology.de>
Date:   Thu May 5 00:20:32 2022 +0200

    add attachment size to pdf

commit 466afa820352a0da59fc60b3d0e08fcc037ac11b
Author: phail <phel@hacknology.de>
Date:   Wed May 4 23:42:59 2022 +0200

    fix consumption of mails without html
    split pdf generation functions

commit c2e3dc76d94d02d86d9005d08962e9e4acff3b0c
Author: phail <phel@hacknology.de>
Date:   Tue May 3 23:21:33 2022 +0200

    add parsing of inline attachments
    remove insecure chromium option
    fix html parsing

commit 5a899664f804eb44055221b02a561ad632638158
Author: phail <phel@hacknology.de>
Date:   Tue May 3 18:02:08 2022 +0200

    remove .eml parser from tika

commit 990e905a04c78d356b0c5c3e8f53a15151af2d5d
Merge: 6b7155a8 98ebb095
Author: phail <phel@hacknology.de>
Date:   Tue May 3 17:42:56 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 6b7155a8498241f707b73d5659168ac687d7d4a1
Author: phail <phel@hacknology.de>
Date:   Sat Apr 30 17:33:12 2022 +0200

    merge migrations

commit 47851ddd3f54fcddb34af370e002e927eaa431b8
Merge: 47189643 0f1e3164
Author: phail <phel@hacknology.de>
Date:   Fri Apr 29 23:52:56 2022 +0200

    Merge remote-tracking branch 'paperless/dev' into feature-consume-eml

commit 47189643ff07059e9c9c256f725bdf837c481811
Author: phail <phel@hacknology.de>
Date:   Fri Apr 29 22:58:11 2022 +0200

    add eml parser to paperless_mail

commit c1efe11cf3908aa6920e795a785451fd11c2eb71
Author: phail <phel@hacknology.de>
Date:   Wed Apr 27 23:32:10 2022 +0200

    improve pdf generation

commit 0e40ef5f352ca3e6ffe5b76374481f2a888e24dd
Author: phail <phel@hacknology.de>
Date:   Wed Apr 27 19:52:59 2022 +0200

    add css for pdf generation

commit c8081595c4450780eade4921a81d0b1bd08105cc
Author: phail <phel@hacknology.de>
Date:   Tue Apr 26 23:25:48 2022 +0200

    improve pdf generation

commit a2b5b3b2530daf7e88600d88803eb4ee43ab8dad
Author: phail <phel@hacknology.de>
Date:   Tue Apr 26 23:12:36 2022 +0200

    moved files

commit 790bcf05ed7f478dd497a8f4fcb47c10063a7859
Author: phail <phel@hacknology.de>
Date:   Mon Apr 25 20:55:00 2022 +0200

    add prototype archive pdf

commit d8d2d53c59c4902f94b9ac76f16a370662b9086e
Author: phail <phel@hacknology.de>
Date:   Tue Apr 19 20:14:31 2022 +0200

    fix Mail actions mixup

commit 027897ff0309423f524626b894981298a3606c8b
Author: phail <phel@hacknology.de>
Date:   Tue Apr 19 00:39:00 2022 +0200

    work in progress Mail parsing

commit cca576f5182fddcdeb132832fdf3fae0edfe4bfd
Author: phail <phel@hacknology.de>
Date:   Fri Apr 15 14:40:02 2022 +0200

    add feature to consume imap mail als .eml

commit 5fcf1b5434f42a55ebe4dd083d3021f27234d0cf
Author: phail <phel@hacknology.de>
Date:   Thu Apr 14 00:19:30 2022 +0200

    remove uneeded print and fix merge fail

commit 942b5aa9df53a1e0362ad4a0f65b64863829ac64
Merge: c05b39a0 cc936160
Author: phail <phel@hacknology.de>
Date:   Wed Apr 13 23:55:38 2022 +0200

    Merge branch 'dev' into fix-mail-starttls

commit c05b39a05640fa00d43de9a8c1f96f737c3a2f45
Author: phail <phel@hacknology.de>
Date:   Wed Apr 13 23:37:21 2022 +0200

    fix unittest

commit 3c8196527f73fdcbdd8da9fdc5d199184b78a254
Author: phail <phel@hacknology.de>
Date:   Sat Apr 9 13:07:14 2022 +0200

    adapt to starttls interface change in imap_tools
    pin imap-tools version to avoid breaking changes
    improve mail log

Update settings.component.ts

Update settings.component.ts

229 files changed:
.github/ISSUE_TEMPLATE/bug-report.yml
.github/PULL_REQUEST_TEMPLATE.md
.github/workflows/ci.yml
.github/workflows/release-chart.yml [new file with mode: 0644]
.gitignore
.pre-commit-config.yaml
.readthedocs.yml [deleted file]
CONTRIBUTING.md
Dockerfile
Pipfile
Pipfile.lock
README.md
charts/paperless-ngx/.helmignore [new file with mode: 0644]
charts/paperless-ngx/Chart.yaml [new file with mode: 0644]
charts/paperless-ngx/LICENSE [new file with mode: 0644]
charts/paperless-ngx/README.md [new file with mode: 0644]
charts/paperless-ngx/README_CONFIG.md.gotmpl [new file with mode: 0644]
charts/paperless-ngx/ci/ct-values.yaml [new file with mode: 0644]
charts/paperless-ngx/templates/NOTES.txt [new file with mode: 0644]
charts/paperless-ngx/templates/common.yaml [new file with mode: 0644]
charts/paperless-ngx/values.yaml [new file with mode: 0644]
docker/compose/docker-compose.ci-test.yml [new file with mode: 0644]
docker/compose/docker-compose.mariadb-tika.yml
docker/compose/docker-compose.mariadb.yml
docker/compose/docker-compose.postgres-tika.yml
docker/compose/docker-compose.sqlite-tika.yml
docker/docker-entrypoint.sh
docker/docker-prepare.sh
docs/Makefile [deleted file]
docs/_static/css/custom.css [deleted file]
docs/_static/js/darkmode.js [deleted file]
docs/_static/screenshots/mail-rules-edited.png [deleted file]
docs/_templates/layout.html [deleted file]
docs/administration.md [new file with mode: 0644]
docs/administration.rst [deleted file]
docs/advanced_usage.md [new file with mode: 0644]
docs/advanced_usage.rst [deleted file]
docs/api.md [new file with mode: 0644]
docs/api.rst [deleted file]
docs/assets/.keep [moved from docs/_static/.keep with 100% similarity]
docs/assets/extra.css [new file with mode: 0644]
docs/assets/favicon.png [new file with mode: 0644]
docs/assets/logo.svg [new file with mode: 0644]
docs/assets/logo_full_black.svg [new file with mode: 0644]
docs/assets/logo_full_white.svg [new file with mode: 0644]
docs/assets/recommended_workflow.png [moved from docs/_static/recommended_workflow.png with 100% similarity]
docs/assets/screenshots/bulk-edit.png [moved from docs/_static/screenshots/bulk-edit.png with 100% similarity]
docs/assets/screenshots/correspondents.png [moved from docs/_static/screenshots/correspondents.png with 100% similarity]
docs/assets/screenshots/dashboard.png [moved from docs/_static/screenshots/dashboard.png with 100% similarity]
docs/assets/screenshots/documents-filter.png [moved from docs/_static/screenshots/documents-filter.png with 100% similarity]
docs/assets/screenshots/documents-largecards.png [moved from docs/_static/screenshots/documents-largecards.png with 100% similarity]
docs/assets/screenshots/documents-smallcards-dark.png [moved from docs/_static/screenshots/documents-smallcards-dark.png with 100% similarity]
docs/assets/screenshots/documents-smallcards.png [moved from docs/_static/screenshots/documents-smallcards.png with 100% similarity]
docs/assets/screenshots/documents-table.png [moved from docs/_static/screenshots/documents-table.png with 100% similarity]
docs/assets/screenshots/documents-wchrome-dark.png [moved from docs/_static/screenshots/documents-wchrome-dark.png with 100% similarity]
docs/assets/screenshots/documents-wchrome.png [moved from docs/_static/screenshots/documents-wchrome.png with 100% similarity]
docs/assets/screenshots/editing.png [moved from docs/_static/screenshots/editing.png with 100% similarity]
docs/assets/screenshots/logs.png [moved from docs/_static/screenshots/logs.png with 100% similarity]
docs/assets/screenshots/mail-rules-edited.png [new file with mode: 0644]
docs/assets/screenshots/mobile.png [moved from docs/_static/screenshots/mobile.png with 100% similarity]
docs/assets/screenshots/new-tag.png [moved from docs/_static/screenshots/new-tag.png with 100% similarity]
docs/assets/screenshots/search-preview.png [moved from docs/_static/screenshots/search-preview.png with 100% similarity]
docs/assets/screenshots/search-results.png [moved from docs/_static/screenshots/search-results.png with 100% similarity]
docs/changelog.md
docs/conf.py [deleted file]
docs/configuration.md [new file with mode: 0644]
docs/configuration.rst [deleted file]
docs/development.md [new file with mode: 0644]
docs/extending.rst [deleted file]
docs/faq.md [new file with mode: 0644]
docs/faq.rst [deleted file]
docs/index.md [new file with mode: 0644]
docs/index.rst [deleted file]
docs/requirements.txt [deleted file]
docs/scanners.rst [deleted file]
docs/screenshots.rst [deleted file]
docs/setup.md [new file with mode: 0644]
docs/setup.rst [deleted file]
docs/troubleshooting.md [new file with mode: 0644]
docs/troubleshooting.rst [deleted file]
docs/usage.md [new file with mode: 0644]
docs/usage_overview.rst [deleted file]
install-paperless-ngx.sh
mkdocs.yml [new file with mode: 0644]
paperless.conf.example
scripts/start_services.sh
src-ui/cypress/e2e/settings/settings.cy.ts
src-ui/cypress/e2e/tasks/tasks.cy.ts
src-ui/cypress/fixtures/mail_accounts/mail_accounts.json [new file with mode: 0644]
src-ui/cypress/fixtures/mail_rules/mail_rules.json [new file with mode: 0644]
src-ui/cypress/fixtures/saved_views/savedviews.json
src-ui/cypress/fixtures/tasks/tasks.json
src-ui/messages.xlf
src-ui/package-lock.json
src-ui/package.json
src-ui/src/app/app-routing.module.ts
src-ui/src/app/app.component.ts
src-ui/src/app/app.module.ts
src-ui/src/app/components/app-frame/app-frame.component.html
src-ui/src/app/components/app-frame/app-frame.component.ts
src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts
src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts [new file with mode: 0644]
src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html
src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts
src-ui/src/app/components/common/input/number/number.component.html
src-ui/src/app/components/common/input/number/number.component.ts
src-ui/src/app/components/common/input/password/password.component.html [new file with mode: 0644]
src-ui/src/app/components/common/input/password/password.component.scss [new file with mode: 0644]
src-ui/src/app/components/common/input/password/password.component.ts [new file with mode: 0644]
src-ui/src/app/components/common/input/tags/tags.component.html
src-ui/src/app/components/common/input/tags/tags.component.ts
src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
src-ui/src/app/components/document-detail/document-detail.component.ts
src-ui/src/app/components/manage/management-list/management-list.component.ts
src-ui/src/app/components/manage/settings/settings.component.html
src-ui/src/app/components/manage/settings/settings.component.ts
src-ui/src/app/components/manage/tasks/tasks.component.html
src-ui/src/app/data/paperless-mail-account.ts [new file with mode: 0644]
src-ui/src/app/data/paperless-mail-rule.ts [new file with mode: 0644]
src-ui/src/app/data/paperless-task.ts
src-ui/src/app/guards/dirty-form.guard.ts
src-ui/src/app/services/rest/mail-account.service.ts [new file with mode: 0644]
src-ui/src/app/services/rest/mail-rule.service.ts [new file with mode: 0644]
src-ui/src/environments/environment.prod.ts
src-ui/src/locale/messages.ar_SA.xlf [new file with mode: 0644]
src-ui/src/locale/messages.be_BY.xlf
src-ui/src/locale/messages.cs_CZ.xlf
src-ui/src/locale/messages.da_DK.xlf
src-ui/src/locale/messages.de_DE.xlf
src-ui/src/locale/messages.es_ES.xlf
src-ui/src/locale/messages.fi_FI.xlf
src-ui/src/locale/messages.fr_FR.xlf
src-ui/src/locale/messages.he_IL.xlf
src-ui/src/locale/messages.hr_HR.xlf
src-ui/src/locale/messages.it_IT.xlf
src-ui/src/locale/messages.lb_LU.xlf
src-ui/src/locale/messages.nl_NL.xlf
src-ui/src/locale/messages.no_NO.xlf
src-ui/src/locale/messages.pl_PL.xlf
src-ui/src/locale/messages.pt_BR.xlf
src-ui/src/locale/messages.pt_PT.xlf
src-ui/src/locale/messages.ro_RO.xlf
src-ui/src/locale/messages.ru_RU.xlf
src-ui/src/locale/messages.sl_SI.xlf
src-ui/src/locale/messages.sr_CS.xlf
src-ui/src/locale/messages.sv_SE.xlf
src-ui/src/locale/messages.tr_TR.xlf
src-ui/src/locale/messages.zh_CN.xlf
src-ui/src/styles.scss
src/documents/consumer.py
src/documents/parsers.py
src/documents/signals/handlers.py
src/documents/tasks.py
src/documents/templates/index.html
src/documents/tests/test_consumer.py
src/locale/ar_BH/LC_MESSAGES/django.po [deleted file]
src/locale/ar_EG/LC_MESSAGES/django.po [deleted file]
src/locale/ar_YE/LC_MESSAGES/django.po [deleted file]
src/locale/be_BY/LC_MESSAGES/django.po
src/locale/cs_CZ/LC_MESSAGES/django.po
src/locale/da_DK/LC_MESSAGES/django.po
src/locale/de_DE/LC_MESSAGES/django.po
src/locale/es_ES/LC_MESSAGES/django.po
src/locale/fi_FI/LC_MESSAGES/django.po
src/locale/fr_FR/LC_MESSAGES/django.po
src/locale/he_IL/LC_MESSAGES/django.po
src/locale/hr_HR/LC_MESSAGES/django.po
src/locale/it_IT/LC_MESSAGES/django.po
src/locale/lb_LU/LC_MESSAGES/django.po
src/locale/nl_NL/LC_MESSAGES/django.po
src/locale/no_NO/LC_MESSAGES/django.po
src/locale/pl_PL/LC_MESSAGES/django.po
src/locale/pt_BR/LC_MESSAGES/django.po
src/locale/pt_PT/LC_MESSAGES/django.po
src/locale/ro_RO/LC_MESSAGES/django.po
src/locale/ru_RU/LC_MESSAGES/django.po
src/locale/sl_SI/LC_MESSAGES/django.po
src/locale/sr_CS/LC_MESSAGES/django.po
src/locale/sv_SE/LC_MESSAGES/django.po
src/locale/tr_TR/LC_MESSAGES/django.po
src/locale/zh_CN/LC_MESSAGES/django.po
src/paperless/settings.py
src/paperless/tests/test_settings.py
src/paperless/urls.py
src/paperless/version.py
src/paperless_mail/admin.py
src/paperless_mail/apps.py
src/paperless_mail/mail.py
src/paperless_mail/migrations/0016_mailrule_consumption_scope.py [new file with mode: 0644]
src/paperless_mail/models.py
src/paperless_mail/parsers.py [new file with mode: 0644]
src/paperless_mail/serialisers.py [new file with mode: 0644]
src/paperless_mail/signals.py [new file with mode: 0644]
src/paperless_mail/templates/email_msg_template.html [new file with mode: 0644]
src/paperless_mail/templates/input.css [new file with mode: 0644]
src/paperless_mail/templates/output.css [new file with mode: 0644]
src/paperless_mail/templates/package-lock.json [new file with mode: 0644]
src/paperless_mail/templates/package.json [new file with mode: 0644]
src/paperless_mail/templates/tailwind.config.js [new file with mode: 0644]
src/paperless_mail/tests/samples/broken.eml [new file with mode: 0644]
src/paperless_mail/tests/samples/first.pdf [new file with mode: 0644]
src/paperless_mail/tests/samples/html.eml [new file with mode: 0644]
src/paperless_mail/tests/samples/html.eml.html [new file with mode: 0644]
src/paperless_mail/tests/samples/html.eml.pdf [new file with mode: 0644]
src/paperless_mail/tests/samples/html.eml.pdf.webp [new file with mode: 0644]
src/paperless_mail/tests/samples/sample.html [new file with mode: 0644]
src/paperless_mail/tests/samples/sample.html.pdf [new file with mode: 0644]
src/paperless_mail/tests/samples/sample.html.pdf.webp [new file with mode: 0644]
src/paperless_mail/tests/samples/sample.png [new file with mode: 0644]
src/paperless_mail/tests/samples/second.pdf [new file with mode: 0644]
src/paperless_mail/tests/samples/simple_text.eml [new file with mode: 0644]
src/paperless_mail/tests/samples/simple_text.eml.pdf [new file with mode: 0644]
src/paperless_mail/tests/samples/simple_text.eml.pdf.webp [new file with mode: 0644]
src/paperless_mail/tests/test_api.py [new file with mode: 0644]
src/paperless_mail/tests/test_parsers.py [new file with mode: 0644]
src/paperless_mail/tests/test_parsers_live.py [new file with mode: 0644]
src/paperless_mail/views.py [new file with mode: 0644]
src/paperless_tesseract/checks.py
src/paperless_tesseract/parsers.py
src/paperless_tesseract/signals.py
src/paperless_tesseract/tests/samples/document.webp [new file with mode: 0755]
src/paperless_tesseract/tests/samples/single-page-mixed.pdf [new file with mode: 0644]
src/paperless_tesseract/tests/test_checks.py
src/paperless_tesseract/tests/test_parser.py

index 1ad06f12eaa69c51644141c5b8c1142566f2c5be..20de107efdfd3f798dce3bffe5915abf9c7bc709 100644 (file)
@@ -10,8 +10,8 @@ body:
 
         Before opening an issue, please double check:
 
-        - [The troubleshooting documentation](https://paperless-ngx.readthedocs.io/en/latest/troubleshooting.html).
-        - [The installation instructions](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation).
+        - [The troubleshooting documentation](https://docs.paperless-ngx.com/troubleshooting/).
+        - [The installation instructions](https://docs.paperless-ngx.com/setup/#installation).
         - [Existing issues and discussions](https://github.com/paperless-ngx/paperless-ngx/search?q=&type=issues).
         - Disable any customer container initialization scripts, if using any
 
@@ -42,7 +42,15 @@ body:
     id: logs
     attributes:
       label: Webserver logs
-      description: If available, post any logs from the web server related to your issue.
+      description: Logs from the web server related to your issue.
+      render: bash
+    validations:
+      required: true
+  - type: textarea
+    id: logs_browser
+    attributes:
+      label: Browser logs
+      description: Logs from the web browser related to your issue, if needed
       render: bash
   - type: input
     id: version
index 9e9a9d493d9348a4e115d5c726a3aea17fd05a9d..1a652da816c16637065b52292800f99b3c992307 100644 (file)
@@ -26,7 +26,7 @@ NOTE: Please check only one box!
 
 - [ ] I have read & agree with the [contributing guidelines](https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md).
 - [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
-- [ ] If applicable, I have checked that all tests pass, see [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html#back-end-development).
-- [ ] I have run all `pre-commit` hooks, see [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html#code-formatting-with-pre-commit-hooks).
+- [ ] If applicable, I have checked that all tests pass, see [documentation](https://docs.paperless-ngx.com/development/#back-end-development).
+- [ ] I have run all `pre-commit` hooks, see [documentation](https://docs.paperless-ngx.com/development/#code-formatting-with-pre-commit-hooks).
 - [ ] I have made corresponding changes to the documentation as needed.
 - [ ] I have checked my modifications for any breaking changes.
index 8ccc93df2014fa30f1049f03eab6112ea87221c3..23ace6a3a688cd78fd0bdaf28643294d9e04ec77 100644 (file)
@@ -49,7 +49,7 @@ jobs:
         name: Set up Python
         uses: actions/setup-python@v4
         with:
-          python-version: 3.9
+          python-version: 3.8
           cache: "pipenv"
           cache-dependency-path: 'Pipfile.lock'
       -
@@ -63,14 +63,32 @@ jobs:
       -
         name: Make documentation
         run: |
-          cd docs/
-          pipenv run make html
+          pipenv run mkdocs build --config-file ./mkdocs.yml
       -
         name: Upload artifact
         uses: actions/upload-artifact@v3
         with:
           name: documentation
-          path: docs/_build/html/
+          path: site/
+
+  documentation-deploy:
+    name: "Deploy Documentation"
+    runs-on: ubuntu-20.04
+    if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+    needs:
+      - documentation
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v3
+      -
+        name: Deploy docs
+        uses: mhausenblas/mkdocs-deploy-gh-pages@master
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          CUSTOM_DOMAIN: docs.paperless-ngx.com
+          CONFIG_FILE: mkdocs.yml
+          EXTRA_PACKAGES: build-base
 
   tests-backend:
     name: "Tests (${{ matrix.python-version }})"
@@ -81,15 +99,6 @@ jobs:
       matrix:
         python-version: ['3.8', '3.9', '3.10']
       fail-fast: false
-    services:
-      tika:
-        image: ghcr.io/paperless-ngx/tika:latest
-        ports:
-          - "9998:9998/tcp"
-      gotenberg:
-        image: docker.io/gotenberg/gotenberg:7.6
-        ports:
-          - "3000:3000/tcp"
     env:
       # Enable Tika end to end testing
       TIKA_LIVE: 1
@@ -97,12 +106,21 @@ jobs:
       PAPERLESS_MAIL_TEST_HOST: ${{ secrets.TEST_MAIL_HOST }}
       PAPERLESS_MAIL_TEST_USER: ${{ secrets.TEST_MAIL_USER }}
       PAPERLESS_MAIL_TEST_PASSWD: ${{ secrets.TEST_MAIL_PASSWD }}
+      # Skip Tests which require convert
+      PAPERLESS_TEST_SKIP_CONVERT: 1
+      # Enable Gotenberg end to end testing
+      GOTENBERG_LIVE: 1
     steps:
       -
         name: Checkout
         uses: actions/checkout@v3
         with:
           fetch-depth: 0
+      -
+        name: Start containers
+        run: |
+          docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml pull --quiet
+          docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml up --detach
       -
         name: Install pipenv
         run: |
@@ -154,6 +172,12 @@ jobs:
         run: |
           cd src/
           pipenv run coveralls --service=github
+      -
+        name: Stop containers
+        if: always()
+        run: |
+          docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml logs
+          docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml down
 
   tests-frontend:
     name: "Tests Frontend"
@@ -478,10 +502,9 @@ jobs:
       -
         name: Upload release archive
         id: upload-release-asset
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        uses: shogo82148/actions-upload-release-asset@v1
         with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
           upload_url: ${{ steps.create-release.outputs.upload_url }}
           asset_path: ./paperless-ngx.tar.xz
           asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
@@ -523,7 +546,7 @@ jobs:
           CURRENT_CHANGELOG=`tail --lines +2 changelog.md`
           echo -e "$CURRENT_CHANGELOG" >> changelog-new.md
           mv changelog-new.md changelog.md
-          pipenv run pre-commit --files changelog.md
+          pipenv run pre-commit run --files changelog.md || true
           git config --global user.name "github-actions"
           git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
           git commit -am "Changelog ${{ needs.publish-release.outputs.version }} - GHA"
diff --git a/.github/workflows/release-chart.yml b/.github/workflows/release-chart.yml
new file mode 100644 (file)
index 0000000..9e21850
--- /dev/null
@@ -0,0 +1,31 @@
+---
+name: Release Charts
+
+on:
+  push:
+    tags:
+      - v*
+
+jobs:
+  release_chart:
+    name: "Release Chart"
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+      - name: Configure Git
+        run: |
+          git config user.name "$GITHUB_ACTOR"
+          git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
+      - name: Install Helm
+        uses: azure/setup-helm@v3
+        with:
+          version: v3.10.0
+
+      - name: Run chart-releaser
+        uses: helm/chart-releaser-action@v1.4.1
+        env:
+          CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
index a93b8139a10ed39369835f1b946c8f22a1c2168a..ff17f9e33a5b70933aaf3e26a01e8c4dede2769d 100644 (file)
@@ -51,8 +51,8 @@ coverage.xml
 # Django stuff:
 *.log
 
-# Sphinx documentation
-docs/_build/
+# MkDocs documentation
+site/
 
 # PyBuilder
 target/
index c9f70ee81aac4b0e61e4d4bae1f782b90fb8eb82..eb45f72247bd4be5c51f14df411ba3396067d5a4 100644 (file)
@@ -11,13 +11,14 @@ repos:
       - id: check-json
         exclude: "tsconfig.*json"
       - id: check-yaml
+        exclude: "charts/paperless-ngx/templates/common.yaml"
       - id: check-toml
       - id: check-executables-have-shebangs
       - id: end-of-file-fixer
         exclude_types:
           - svg
           - pofile
-        exclude: "(^LICENSE$)"
+        exclude: "^(LICENSE|charts/paperless-ngx/README.md)$"
       - id: mixed-line-ending
         args:
           - "--fix=lf"
@@ -34,7 +35,7 @@ repos:
           - javascript
           - ts
           - markdown
-        exclude: "(^Pipfile\\.lock$)"
+        exclude: "(^Pipfile\\.lock$)|(^charts/paperless-ngx/README.md$)"
   # Python hooks
   - repo: https://github.com/asottile/reorder_python_imports
     rev: v3.9.0
diff --git a/.readthedocs.yml b/.readthedocs.yml
deleted file mode 100644 (file)
index 42b4af4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# .readthedocs.yml
-# Read the Docs configuration file
-# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
-
-# Required
-version: 2
-
-# Build documentation in the docs/ directory with Sphinx
-sphinx:
-  configuration: docs/conf.py
-
-# Optionally set the version of Python and requirements required to build your docs
-python:
-  version: "3.8"
-  install:
-    - requirements: docs/requirements.txt
index 68fc44b84c1e1439dcd42a9d3fb05d09852927d5..1e04ca4aa8df2b01facac6b6598f907e7df40109 100644 (file)
@@ -27,11 +27,11 @@ Please format and test your code! I know it's a hassle, but it makes sure that y
 
 To test your code, execute `pytest` in the src/ directory. This also generates a html coverage report, which you can use to see if you missed anything important during testing.
 
-Before you can run `pytest`, ensure to [properly set up your local environment](https://paperless-ngx.readthedocs.io/en/latest/extending.html#initial-setup-and-first-start).
+Before you can run `pytest`, ensure to [properly set up your local environment](https://docs.paperless-ngx.com/development/#initial-setup-and-first-start).
 
 ## More info:
 
-... is available in the documentation. https://paperless-ngx.readthedocs.io/en/latest/extending.html
+... is available [in the documentation](https://docs.paperless-ngx.com/development).
 
 # Merging PRs
 
index 8b562e73e18eda04a161d4d531d7adaf9efbac3f..2cb25c0c37a2b98a6d39d7941f3371a8b468ce0c 100644 (file)
@@ -52,7 +52,7 @@ RUN set -eux \
 FROM python:3.9-slim-bullseye as main-app
 
 LABEL org.opencontainers.image.authors="paperless-ngx team <hello@paperless-ngx.com>"
-LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/"
+LABEL org.opencontainers.image.documentation="https://docs.paperless-ngx.com/"
 LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperless-ngx"
 LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx"
 LABEL org.opencontainers.image.licenses="GPL-3.0-only"
@@ -72,34 +72,37 @@ COPY --from=jbig2enc-builder /usr/src/jbig2enc/src/*.h /usr/local/include/
 
 # Packages need for running
 ARG RUNTIME_PACKAGES="\
+  # Python
+  python3 \
+  python3-pip \
+  python3-setuptools \
+  # General utils
   curl \
-  file \
+  # Docker specific
+  gosu \
+  # Timezones support
+  tzdata \
   # fonts for text file thumbnail generation
   fonts-liberation \
   gettext \
   ghostscript \
   gnupg \
-  gosu \
   icc-profiles-free \
   imagemagick \
-  media-types \
+  # Image processing
   liblept5 \
-  libpq5 \
-  libxml2 \
   liblcms2-2 \
   libtiff5 \
-  libxslt1.1 \
   libfreetype6 \
   libwebp6 \
   libopenjp2-7 \
   libimagequant0 \
   libraqm0 \
-  libgnutls30 \
   libjpeg62-turbo \
-  python3 \
-  python3-pip \
-  python3-setuptools \
+  # PostgreSQL
+  libpq5 \
   postgresql-client \
+  # MySQL / MariaDB
   mariadb-client \
   # For Numpy
   libatlas3-base \
@@ -110,17 +113,23 @@ ARG RUNTIME_PACKAGES="\
   tesseract-ocr-fra \
   tesseract-ocr-ita \
   tesseract-ocr-spa \
-  # Suggested for OCRmyPDF
+  unpaper \
   pngquant \
-  # Suggested for pikepdf
+  # pikepdf / qpdf
   jbig2dec \
-  tzdata \
-  unpaper \
+  libxml2 \
+  libxslt1.1 \
+  libgnutls30 \
   # Mime type detection
+  file \
+  libmagic1 \
+  media-types \
   zlib1g \
   # Barcode splitter
   libzbar0 \
-  poppler-utils"
+  poppler-utils \
+  # RapidFuzz on armv7
+  libatomic1"
 
 # Install basic runtime packages.
 # These change very infrequently
diff --git a/Pipfile b/Pipfile
index b94110478480d776d847caf38186695a5bfbb1ab..e7702898a1b8cb64376f089abeb33d722d9579d8 100644 (file)
--- a/Pipfile
+++ b/Pipfile
@@ -60,6 +60,9 @@ setproctitle = "*"
 nltk = "*"
 pdf2image = "*"
 flower = "*"
+bleach = "*"
+# https://www.piwheels.org/project/cryptography/ last built version
+cryptography = "==38.0.1"
 
 [dev-packages]
 coveralls = "*"
@@ -71,10 +74,10 @@ pytest-django = "*"
 pytest-env = "*"
 pytest-sugar = "*"
 pytest-xdist = "*"
-sphinx = "~=5.3"
-sphinx_rtd_theme = "*"
 tox = "*"
 black = "*"
 pre-commit = "*"
 sphinx-autobuild = "*"
 myst-parser = "*"
+imagehash = "*"
+mkdocs-material = "*"
index b6d73906f403a3ed57b1bdfad9f3ae94e01629a3..8446689132ab3ac8f7acd5b95214e4420d7ebfa9 100644 (file)
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "9fefc737155e789ced61b41750b4273c7780ac7801c50cf36dc5925be3b85783"
+            "sha256": "cbfe9920231de6e7f993962efb3cc371abdb6b08975232d4cf64d1bad1b53d7a"
         },
         "pipfile-spec": 6,
         "requires": {},
@@ -99,6 +99,7 @@
                 "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac",
                 "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"
             ],
+            "index": "pypi",
             "markers": "python_version < '3.9'",
             "version": "==0.2.1"
         },
             ],
             "version": "==3.6.4.0"
         },
+        "bleach": {
+            "hashes": [
+                "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a",
+                "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"
+            ],
+            "index": "pypi",
+            "version": "==5.0.1"
+        },
         "celery": {
             "extras": [
                 "redis"
             ],
             "version": "==0.2.5"
         },
+        "webencodings": {
+            "hashes": [
+                "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
+                "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
+            ],
+            "version": "==0.5.1"
+        },
         "websockets": {
             "hashes": [
                 "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41",
             "version": "==0.4.6"
         },
         "coverage": {
+            "extras": [],
             "hashes": [
                 "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79",
                 "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a",
             "index": "pypi",
             "version": "==3.8.0"
         },
+        "ghp-import": {
+            "hashes": [
+                "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619",
+                "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"
+            ],
+            "version": "==2.1.0"
+        },
         "identify": {
             "hashes": [
                 "sha256:48b7925fe122720088aeb7a6c34f17b27e706b72c61070f27fe3789094233440",
             "markers": "python_version >= '3.5'",
             "version": "==3.4"
         },
+        "imagehash": {
+            "hashes": [
+                "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5",
+                "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70"
+            ],
+            "index": "pypi",
+            "version": "==4.3.1"
+        },
         "imagesize": {
             "hashes": [
                 "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b",
             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
             "version": "==1.4.1"
         },
+        "importlib-metadata": {
+            "hashes": [
+                "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b",
+                "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"
+            ],
+            "markers": "python_version < '3.10'",
+            "version": "==5.1.0"
+        },
         "iniconfig": {
             "hashes": [
                 "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
             ],
             "version": "==2.6.3"
         },
+        "markdown": {
+            "hashes": [
+                "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874",
+                "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"
+            ],
+            "markers": "python_version >= '3.6'",
+            "version": "==3.3.7"
+        },
         "markdown-it-py": {
             "hashes": [
                 "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27",
             "markers": "python_version >= '3.7'",
             "version": "==0.1.2"
         },
+        "mergedeep": {
+            "hashes": [
+                "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8",
+                "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"
+            ],
+            "markers": "python_version >= '3.6'",
+            "version": "==1.3.4"
+        },
+        "mkdocs": {
+            "hashes": [
+                "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5",
+                "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"
+            ],
+            "markers": "python_version >= '3.7'",
+            "version": "==1.4.2"
+        },
+        "mkdocs-material": {
+            "hashes": [
+                "sha256:b0ea0513fd8cab323e8a825d6692ea07fa83e917bb5db042e523afecc7064ab7",
+                "sha256:c907b4b052240a5778074a30a78f31a1f8ff82d7012356dc26898b97559f082e"
+            ],
+            "index": "pypi",
+            "version": "==8.5.11"
+        },
+        "mkdocs-material-extensions": {
+            "hashes": [
+                "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93",
+                "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"
+            ],
+            "markers": "python_version >= '3.7'",
+            "version": "==1.1.1"
+        },
         "mypy-extensions": {
             "hashes": [
                 "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'",
             "version": "==1.7.0"
         },
+        "numpy": {
+            "hashes": [
+                "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8",
+                "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735",
+                "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd",
+                "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810",
+                "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db",
+                "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962",
+                "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79",
+                "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911",
+                "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d",
+                "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488",
+                "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5",
+                "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0",
+                "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f",
+                "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f",
+                "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2",
+                "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0",
+                "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68",
+                "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3",
+                "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6",
+                "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71",
+                "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894",
+                "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f",
+                "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329",
+                "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba",
+                "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c",
+                "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e",
+                "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef",
+                "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7"
+            ],
+            "index": "pypi",
+            "version": "==1.23.4"
+        },
         "packaging": {
             "hashes": [
                 "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
             "markers": "python_version >= '3.7'",
             "version": "==0.10.1"
         },
+        "pillow": {
+            "hashes": [
+                "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040",
+                "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8",
+                "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65",
+                "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2",
+                "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627",
+                "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07",
+                "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef",
+                "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535",
+                "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c",
+                "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc",
+                "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3",
+                "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1",
+                "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c",
+                "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa",
+                "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32",
+                "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502",
+                "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4",
+                "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f",
+                "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812",
+                "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636",
+                "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20",
+                "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c",
+                "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91",
+                "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe",
+                "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b",
+                "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad",
+                "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9",
+                "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72",
+                "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4",
+                "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de",
+                "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29",
+                "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee",
+                "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c",
+                "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7",
+                "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11",
+                "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c",
+                "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c",
+                "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448",
+                "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b",
+                "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20",
+                "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228",
+                "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd",
+                "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699",
+                "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b",
+                "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2",
+                "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4",
+                "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c",
+                "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f",
+                "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2",
+                "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c",
+                "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3",
+                "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193",
+                "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48",
+                "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02",
+                "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8",
+                "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e",
+                "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f",
+                "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b",
+                "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74",
+                "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb",
+                "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"
+            ],
+            "index": "pypi",
+            "version": "==9.3.0"
+        },
         "platformdirs": {
             "hashes": [
                 "sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb",
             "markers": "python_version >= '3.6'",
             "version": "==2.13.0"
         },
+        "pymdown-extensions": {
+            "hashes": [
+                "sha256:0f8fb7b74a37a61cc34e90b2c91865458b713ec774894ffad64353a5fce85cfc",
+                "sha256:ac698c15265680db5eb13cd4342abfcde2079ac01e5486028f47a1b41547b859"
+            ],
+            "markers": "python_version >= '3.7'",
+            "version": "==9.9"
+        },
         "pyparsing": {
             "hashes": [
                 "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb",
             ],
             "version": "==2022.6"
         },
+        "pywavelets": {
+            "hashes": [
+                "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b",
+                "sha256:058b46434eac4c04dd89aeef6fa39e4b6496a951d78c500b6641fd5b2cc2f9f4",
+                "sha256:231b0e0b1cdc1112f4af3c24eea7bf181c418d37922a67670e9bf6cfa2d544d4",
+                "sha256:23bafd60350b2b868076d976bdd92f950b3944f119b4754b1d7ff22b7acbf6c6",
+                "sha256:3f19327f2129fb7977bc59b966b4974dfd72879c093e44a7287500a7032695de",
+                "sha256:47cac4fa25bed76a45bc781a293c26ac63e8eaae9eb8f9be961758d22b58649c",
+                "sha256:578af438a02a86b70f1975b546f68aaaf38f28fb082a61ceb799816049ed18aa",
+                "sha256:6437af3ddf083118c26d8f97ab43b0724b956c9f958e9ea788659f6a2834ba93",
+                "sha256:64c6bac6204327321db30b775060fbe8e8642316e6bff17f06b9f34936f88875",
+                "sha256:67a0d28a08909f21400cb09ff62ba94c064882ffd9e3a6b27880a111211d59bd",
+                "sha256:71ab30f51ee4470741bb55fc6b197b4a2b612232e30f6ac069106f0156342356",
+                "sha256:7231461d7a8eb3bdc7aa2d97d9f67ea5a9f8902522818e7e2ead9c2b3408eeb1",
+                "sha256:754fa5085768227c4f4a26c1e0c78bc509a266d9ebd0eb69a278be7e3ece943c",
+                "sha256:7ab8d9db0fe549ab2ee0bea61f614e658dd2df419d5b75fba47baa761e95f8f2",
+                "sha256:875d4d620eee655346e3589a16a73790cf9f8917abba062234439b594e706784",
+                "sha256:88aa5449e109d8f5e7f0adef85f7f73b1ab086102865be64421a3a3d02d277f4",
+                "sha256:91d3d393cffa634f0e550d88c0e3f217c96cfb9e32781f2960876f1808d9b45b",
+                "sha256:9cb5ca8d11d3f98e89e65796a2125be98424d22e5ada360a0dbabff659fca0fc",
+                "sha256:ab7da0a17822cd2f6545626946d3b82d1a8e106afc4b50e3387719ba01c7b966",
+                "sha256:ad987748f60418d5f4138db89d82ba0cb49b086e0cbb8fd5c3ed4a814cfb705e",
+                "sha256:d0e56cd7a53aed3cceca91a04d62feb3a0aca6725b1912d29546c26f6ea90426",
+                "sha256:d854411eb5ee9cb4bc5d0e66e3634aeb8f594210f6a1bed96dbed57ec70f181c",
+                "sha256:da7b9c006171be1f9ddb12cc6e0d3d703b95f7f43cb5e2c6f5f15d3233fcf202",
+                "sha256:daf0aa79842b571308d7c31a9c43bc99a30b6328e6aea3f50388cd8f69ba7dbc",
+                "sha256:de7cd61a88a982edfec01ea755b0740e94766e00a1ceceeafef3ed4c85c605cd"
+            ],
+            "markers": "python_version >= '3.8'",
+            "version": "==1.4.1"
+        },
         "pyyaml": {
             "hashes": [
                 "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf",
             ],
             "version": "==6.0"
         },
+        "pyyaml-env-tag": {
+            "hashes": [
+                "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb",
+                "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"
+            ],
+            "markers": "python_version >= '3.6'",
+            "version": "==0.1"
+        },
         "requests": {
             "hashes": [
                 "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983",
             "markers": "python_version >= '3.7' and python_version < '4'",
             "version": "==2.28.1"
         },
+        "scipy": {
+            "hashes": [
+                "sha256:02b567e722d62bddd4ac253dafb01ce7ed8742cf8031aea030a41414b86c1125",
+                "sha256:1166514aa3bbf04cb5941027c6e294a000bba0cf00f5cdac6c77f2dad479b434",
+                "sha256:1da52b45ce1a24a4a22db6c157c38b39885a990a566748fc904ec9f03ed8c6ba",
+                "sha256:23b22fbeef3807966ea42d8163322366dd89da9bebdc075da7034cee3a1441ca",
+                "sha256:28d2cab0c6ac5aa131cc5071a3a1d8e1366dad82288d9ec2ca44df78fb50e649",
+                "sha256:2ef0fbc8bcf102c1998c1f16f15befe7cffba90895d6e84861cd6c6a33fb54f6",
+                "sha256:3b69b90c9419884efeffaac2c38376d6ef566e6e730a231e15722b0ab58f0328",
+                "sha256:4b93ec6f4c3c4d041b26b5f179a6aab8f5045423117ae7a45ba9710301d7e462",
+                "sha256:4e53a55f6a4f22de01ffe1d2f016e30adedb67a699a310cdcac312806807ca81",
+                "sha256:6311e3ae9cc75f77c33076cb2794fb0606f14c8f1b1c9ff8ce6005ba2c283621",
+                "sha256:65b77f20202599c51eb2771d11a6b899b97989159b7975e9b5259594f1d35ef4",
+                "sha256:6cc6b33139eb63f30725d5f7fa175763dc2df6a8f38ddf8df971f7c345b652dc",
+                "sha256:70de2f11bf64ca9921fda018864c78af7147025e467ce9f4a11bc877266900a6",
+                "sha256:70ebc84134cf0c504ce6a5f12d6db92cb2a8a53a49437a6bb4edca0bc101f11c",
+                "sha256:83606129247e7610b58d0e1e93d2c5133959e9cf93555d3c27e536892f1ba1f2",
+                "sha256:93d07494a8900d55492401917a119948ed330b8c3f1d700e0b904a578f10ead4",
+                "sha256:9c4e3ae8a716c8b3151e16c05edb1daf4cb4d866caa385e861556aff41300c14",
+                "sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f",
+                "sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33",
+                "sha256:a0aa8220b89b2e3748a2836fbfa116194378910f1a6e78e4675a095bcd2c762d",
+                "sha256:d3b3c8924252caaffc54d4a99f1360aeec001e61267595561089f8b5900821bb",
+                "sha256:e013aed00ed776d790be4cb32826adb72799c61e318676172495383ba4570aa4",
+                "sha256:f3e7a8867f307e3359cc0ed2c63b61a1e33a19080f92fe377bc7d49f646f2ec1"
+            ],
+            "index": "pypi",
+            "version": "==1.8.1"
+        },
         "setuptools": {
             "hashes": [
                 "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31",
                 "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d",
                 "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"
             ],
-            "index": "pypi",
             "version": "==5.3.0"
         },
         "sphinx-autobuild": {
             ],
             "markers": "python_version >= '3.6'",
             "version": "==20.16.6"
+        },
+        "watchdog": {
+            "hashes": [
+                "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412",
+                "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654",
+                "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306",
+                "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33",
+                "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd",
+                "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7",
+                "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892",
+                "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609",
+                "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6",
+                "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1",
+                "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591",
+                "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d",
+                "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d",
+                "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c",
+                "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3",
+                "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39",
+                "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213",
+                "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330",
+                "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428",
+                "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1",
+                "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846",
+                "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153",
+                "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3",
+                "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9",
+                "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"
+            ],
+            "index": "pypi",
+            "version": "==2.1.9"
+        },
+        "zipp": {
+            "hashes": [
+                "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1",
+                "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"
+            ],
+            "markers": "python_version < '3.9'",
+            "version": "==3.10.0"
         }
     }
 }
index 8b1eb5e4a4d1fc8336b644202b0c5c02ac774e97..4dc09d78700da008b42f6279e6b93a73b93c6c23 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
 [![ci](https://github.com/paperless-ngx/paperless-ngx/workflows/ci/badge.svg)](https://github.com/paperless-ngx/paperless-ngx/actions)
 [![Crowdin](https://badges.crowdin.net/paperless-ngx/localized.svg)](https://crowdin.com/project/paperless-ngx)
-[![Documentation Status](https://readthedocs.org/projects/paperless-ngx/badge/?version=latest)](https://paperless-ngx.readthedocs.io/en/latest/?badge=latest)
+[![Documentation Status](https://img.shields.io/github/deployments/paperless-ngx/paperless-ngx/github-pages?label=docs)](https://docs.paperless-ngx.com)
 [![Coverage Status](https://coveralls.io/repos/github/paperless-ngx/paperless-ngx/badge.svg?branch=master)](https://coveralls.io/github/paperless-ngx/paperless-ngx?branch=master)
-[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#paperless:adnidor.de)
+[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/%23paperlessngx%3Amatrix.org)
+[![demo](https://cronitor.io/badges/ve7ItY/production/W5E_B9jkelG9ZbDiNHUPQEVH3MY.svg)](https://demo.paperless-ngx.com)
 
 <p align="center">
 <img src="https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/png/Black%20logo%20-%20no%20background.png#gh-light-mode-only" width="50%" />
@@ -32,13 +33,13 @@ A demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com)
 
 # Features
 
-![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/_static/screenshots/documents-wchrome.png#gh-light-mode-only)
-![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/_static/screenshots/documents-wchrome-dark.png#gh-dark-mode-only)
+![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/assets/screenshots/documents-smallcards.png#gh-light-mode-only)
+![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/assets/screenshots/documents-smallcards-dark.png#gh-dark-mode-only)
 
 - Organize and index your scanned documents with tags, correspondents, types, and more.
 - Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents.
 - Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents).
-  - Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ngx.readthedocs.io/en/latest/configuration.html#tika-settings))
+  - Office document support is optional and provided by Apache Tika (see [configuration](https://docs.paperless-ngx.com/configuration/#tika))
 - Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely.
 - Single page application front end.
   - Includes a dashboard that shows basic statistics and has document upload.
@@ -56,7 +57,7 @@ A demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com)
   - Paperless-ngx learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless.
 - Optimized for multi core systems: Paperless-ngx consumes multiple documents in parallel.
 - The integrated sanity checker makes sure that your document archive is in good health.
-- [More screenshots are available in the documentation](https://paperless-ngx.readthedocs.io/en/latest/screenshots.html).
+- [More screenshots are available in the documentation](https://docs.paperless-ngx.com/#screenshots).
 
 # Getting started
 
@@ -68,19 +69,19 @@ If you'd like to jump right in, you can configure a docker-compose environment w
 bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
 ```
 
-Alternatively, you can install the dependencies and setup apache and a database server yourself. The [documentation](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation) has a step by step guide on how to do it.
+Alternatively, you can install the dependencies and setup apache and a database server yourself. The [documentation](https://docs.paperless-ngx.com/setup/#installation) has a step by step guide on how to do it.
 
-Migrating from Paperless-ng is easy, just drop in the new docker image! See the [documentation on migrating](https://paperless-ngx.readthedocs.io/en/latest/setup.html#migrating-from-paperless-ng) for more details.
+Migrating from Paperless-ng is easy, just drop in the new docker image! See the [documentation on migrating](https://docs.paperless-ngx.com/setup/#migrating-to-paperless-ngx) for more details.
 
 <!-- omit in toc -->
 
 ### Documentation
 
-The documentation for Paperless-ngx is available on [ReadTheDocs](https://paperless-ngx.readthedocs.io/).
+The documentation for Paperless-ngx is available at [https://docs.paperless-ngx.com](https://docs.paperless-ngx.com/).
 
 # Contributing
 
-If you feel like contributing to the project, please do! Bug fixes, enhancements, visual fixes etc. are always welcome. If you want to implement something big: Please start a discussion about that! The [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html) has some basic information on how to get started.
+If you feel like contributing to the project, please do! Bug fixes, enhancements, visual fixes etc. are always welcome. If you want to implement something big: Please start a discussion about that! The [documentation](https://docs.paperless-ngx.com/development/) has some basic information on how to get started.
 
 ## Community Support
 
@@ -105,6 +106,7 @@ Paperless has been around a while now, and people are starting to build stuff on
 - [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless-ngx. Also works with the original Paperless and Paperless-ng.
 - [Paperless Share](https://github.com/qcasey/paperless_share). Share any files from your Android application with paperless. Very simple, but works with all of the mobile scanning apps out there that allow you to share scanned documents.
 - [Scan to Paperless](https://github.com/sbrunner/scan-to-paperless): Scan and prepare (crop, deskew, OCR, ...) your documents for Paperless.
+- [Paperless Mobile](https://github.com/astubenbord/paperless-mobile): A modern, feature rich mobile application for Paperless.
 
 These projects also exist, but their status and compatibility with paperless-ngx is unknown.
 
diff --git a/charts/paperless-ngx/.helmignore b/charts/paperless-ngx/.helmignore
new file mode 100644 (file)
index 0000000..4379e2b
--- /dev/null
@@ -0,0 +1,26 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+# OWNERS file for Kubernetes
+OWNERS
+# helm-docs templates
+*.gotmpl
diff --git a/charts/paperless-ngx/Chart.yaml b/charts/paperless-ngx/Chart.yaml
new file mode 100644 (file)
index 0000000..60d8b0b
--- /dev/null
@@ -0,0 +1,35 @@
+---
+apiVersion: v2
+appVersion: "1.9.2"
+description: Paperless-ngx - Index and archive all of your scanned paper documents
+name: paperless
+version: 10.0.0
+kubeVersion: ">=1.16.0-0"
+keywords:
+  - paperless
+  - paperless-ngx
+  - dms
+  - document
+home: https://github.com/paperless-ngx/paperless-ngx/tree/main/charts/paperless-ngx
+icon: https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/svg/square.svg
+sources:
+  - https://github.com/paperless-ngx/paperless-ngx
+maintainers:
+  - name: Paperless-ngx maintainers
+dependencies:
+  - name: common
+    repository: https://library-charts.k8s-at-home.com
+    version: 4.5.2
+  - name: postgresql
+    version: 11.6.12
+    repository: https://charts.bitnami.com/bitnami
+    condition: postgresql.enabled
+  - name: redis
+    version: 16.13.1
+    repository: https://charts.bitnami.com/bitnami
+    condition: redis.enabled
+deprecated: false
+annotations:
+  artifacthub.io/changes: |
+    - kind: changed
+      description: Moved to Paperless-ngx ownership
diff --git a/charts/paperless-ngx/LICENSE b/charts/paperless-ngx/LICENSE
new file mode 100644 (file)
index 0000000..056d3da
--- /dev/null
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2020 k8s@Home
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/charts/paperless-ngx/README.md b/charts/paperless-ngx/README.md
new file mode 100644 (file)
index 0000000..be49a25
--- /dev/null
@@ -0,0 +1,50 @@
+# paperless
+
+![Version: 10.0.0](https://img.shields.io/badge/Version-10.0.0-informational?style=flat-square) ![AppVersion: 1.9.2](https://img.shields.io/badge/AppVersion-1.9.2-informational?style=flat-square)
+
+Paperless-ngx - Index and archive all of your scanned paper documents
+
+**Homepage:** <https://github.com/paperless-ngx/paperless-ngx/tree/main/charts/paperless-ngx>
+
+## Maintainers
+
+| Name | Email | Url |
+| ---- | ------ | --- |
+| Paperless-ngx maintainers |  |  |
+
+## Source Code
+
+* <https://github.com/paperless-ngx/paperless-ngx>
+
+## Requirements
+
+Kubernetes: `>=1.16.0-0`
+
+| Repository | Name | Version |
+|------------|------|---------|
+| https://charts.bitnami.com/bitnami | postgresql | 11.6.12 |
+| https://charts.bitnami.com/bitnami | redis | 16.13.1 |
+| https://library-charts.k8s-at-home.com | common | 4.5.2 |
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| env | object | See below | See the following files for additional environment variables: https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose/ https://github.com/paperless-ngx/paperless-ngx/blob/main/paperless.conf.example |
+| env.COMPOSE_PROJECT_NAME | string | `"paperless"` | Project name |
+| env.PAPERLESS_DBHOST | string | `nil` | Database host to use |
+| env.PAPERLESS_OCR_LANGUAGE | string | `"eng"` | OCR languages to install |
+| env.PAPERLESS_PORT | int | `8000` | Port to use |
+| env.PAPERLESS_REDIS | string | `nil` | Redis to use |
+| image.pullPolicy | string | `"IfNotPresent"` | image pull policy |
+| image.repository | string | `"ghcr.io/paperless-ngx/paperless-ngx"` | image repository |
+| image.tag | string | chart.appVersion | image tag |
+| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. |
+| persistence.consume | object | See values.yaml | Configure volume to monitor for new documents. |
+| persistence.data | object | See values.yaml | Configure persistence for data. |
+| persistence.export | object | See values.yaml | Configure export volume. |
+| persistence.media | object | See values.yaml | Configure persistence for media. |
+| postgresql | object | See values.yaml | Enable and configure postgresql database subchart under this key.    For more options see [postgresql chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/postgresql) |
+| redis | object | See values.yaml | Enable and configure redis subchart under this key.    For more options see [redis chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/redis) |
+| service | object | See values.yaml | Configures service settings for the chart. |
+
diff --git a/charts/paperless-ngx/README_CONFIG.md.gotmpl b/charts/paperless-ngx/README_CONFIG.md.gotmpl
new file mode 100644 (file)
index 0000000..ba63bd5
--- /dev/null
@@ -0,0 +1,8 @@
+{{- define "custom.custom.configuration.header" -}}
+## Custom configuration
+{{- end -}}
+
+{{- define "custom.custom.configuration" -}}
+{{ template "custom.custom.configuration.header" . }}
+N/A
+{{- end -}}
diff --git a/charts/paperless-ngx/ci/ct-values.yaml b/charts/paperless-ngx/ci/ct-values.yaml
new file mode 100644 (file)
index 0000000..3af9308
--- /dev/null
@@ -0,0 +1,26 @@
+env:
+  PAPERLESS_REDIS: redis://paperless-redis-headless:6379
+
+persistence:
+  data:
+    enabled: true
+    type: emptyDir
+  media:
+    enabled: true
+    type: emptyDir
+  consume:
+    enabled: true
+    type: emptyDir
+  export:
+    enabled: true
+    type: emptyDir
+
+redis:
+  enabled: true
+  architecture: standalone
+  auth:
+    enabled: false
+  master:
+    persistence:
+      enabled: false
+  fullnameOverride: paperless-redis
diff --git a/charts/paperless-ngx/templates/NOTES.txt b/charts/paperless-ngx/templates/NOTES.txt
new file mode 100644 (file)
index 0000000..d16476c
--- /dev/null
@@ -0,0 +1,4 @@
+{{- include "common.notes.defaultNotes" . }}
+2. Create a super user by running the command:
+  export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "common.names.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+  kubectl exec -it --namespace {{ .Release.Namespace }} $POD_NAME -- bash -c "python manage.py createsuperuser"
diff --git a/charts/paperless-ngx/templates/common.yaml b/charts/paperless-ngx/templates/common.yaml
new file mode 100644 (file)
index 0000000..13801ed
--- /dev/null
@@ -0,0 +1,11 @@
+{{/* Make sure all variables are set properly */}}
+{{- include "common.values.setup" . }}
+
+{{/* Append the hardcoded settings */}}
+{{- define "paperless.harcodedValues" -}}
+env:
+    PAPERLESS_URL: http{{if ne ( len .Values.ingress.main.tls ) 0 }}s{{end}}://{{ (first .Values.ingress.main.hosts).host }}
+{{- end -}}
+{{- $_ := merge .Values (include "paperless.harcodedValues" . | fromYaml) -}}
+
+{{ include "common.all" . }}
diff --git a/charts/paperless-ngx/values.yaml b/charts/paperless-ngx/values.yaml
new file mode 100644 (file)
index 0000000..cde42de
--- /dev/null
@@ -0,0 +1,107 @@
+#
+# IMPORTANT NOTE
+#
+# This chart inherits from our common library chart. You can check the default values/options here:
+# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
+#
+
+image:
+  # -- image repository
+  repository: ghcr.io/paperless-ngx/paperless-ngx
+  # -- image pull policy
+  pullPolicy: IfNotPresent
+  # -- image tag
+  # @default -- chart.appVersion
+  tag:
+
+# -- See the following files for additional environment variables:
+# https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose/
+# https://github.com/paperless-ngx/paperless-ngx/blob/main/paperless.conf.example
+# @default -- See below
+env:
+  # -- Project name
+  COMPOSE_PROJECT_NAME: paperless
+  # -- Redis to use
+  PAPERLESS_REDIS:
+  # -- OCR languages to install
+  PAPERLESS_OCR_LANGUAGE: eng
+  # USERMAP_UID: 1000
+  # USERMAP_GID: 1000
+  # PAPERLESS_TIME_ZONE: Europe/London
+  # -- Database host to use
+  PAPERLESS_DBHOST:
+  # -- Port to use
+  PAPERLESS_PORT: 8000
+  # -- Username for the root user
+  # PAPERLESS_ADMIN_USER: admin
+  # -- Password for the root user
+  # PAPERLESS_ADMIN_PASSWORD: admin
+  # PAPERLESS_URL: <set to main ingress by default>
+
+# -- Configures service settings for the chart.
+# @default -- See values.yaml
+service:
+  main:
+    ports:
+      http:
+        port: 8000
+
+ingress:
+  # -- Enable and configure ingress settings for the chart under this key.
+  # @default -- See values.yaml
+  main:
+    enabled: false
+
+persistence:
+  # -- Configure persistence for data.
+  # @default -- See values.yaml
+  data:
+    enabled: false
+    mountPath: /usr/src/paperless/data
+    accessMode: ReadWriteOnce
+    emptyDir:
+      enabled: false
+  # -- Configure persistence for media.
+  # @default -- See values.yaml
+  media:
+    enabled: false
+    mountPath: /usr/src/paperless/media
+    accessMode: ReadWriteOnce
+    emptyDir:
+      enabled: false
+  # -- Configure volume to monitor for new documents.
+  # @default -- See values.yaml
+  consume:
+    enabled: false
+    mountPath: /usr/src/paperless/consume
+    accessMode: ReadWriteOnce
+    emptyDir:
+      enabled: false
+  # -- Configure export volume.
+  # @default -- See values.yaml
+  export:
+    enabled: false
+    mountPath: /usr/src/paperless/export
+    accessMode: ReadWriteOnce
+    emptyDir:
+      enabled: false
+
+# -- Enable and configure postgresql database subchart under this key.
+#    For more options see [postgresql chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/postgresql)
+# @default -- See values.yaml
+postgresql:
+  enabled: false
+  postgresqlUsername: paperless
+  postgresqlPassword: paperless
+  postgresqlDatabase: paperless
+  persistence:
+    enabled: false
+    # storageClass: ""
+
+# -- Enable and configure redis subchart under this key.
+#    For more options see [redis chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/redis)
+# @default -- See values.yaml
+redis:
+  enabled: false
+  auth:
+    enabled: false
diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml
new file mode 100644 (file)
index 0000000..b1b8d21
--- /dev/null
@@ -0,0 +1,25 @@
+# docker-compose file for running paperless testing with actual gotenberg
+# and Tika containers for a more end to end test of the Tika related functionality
+# Can be used locally or by the CI to start the nessecary containers with the
+# correct networking for the tests
+
+version: "3.7"
+services:
+  gotenberg:
+    image: docker.io/gotenberg/gotenberg:7.6
+    hostname: gotenberg
+    container_name: gotenberg
+    network_mode: host
+    restart: unless-stopped
+    # The gotenberg chromium route is used to convert .eml files. We do not
+    # want to allow external content like tracking pixels or even javascript.
+    command:
+      - "gotenberg"
+      - "--chromium-disable-javascript=true"
+      - "--chromium-allow-list=file:///tmp/.*"
+  tika:
+    image: ghcr.io/paperless-ngx/tika:latest
+    hostname: tika
+    container_name: tika
+    network_mode: host
+    restart: unless-stopped
index b3699e4d762af324b7550b9f5fa6ecd7ed4b24a5..4bbb390f078ddaaa493342b4822c658d5a4a5f2e 100644 (file)
@@ -77,8 +77,8 @@ services:
       PAPERLESS_REDIS: redis://broker:6379
       PAPERLESS_DBENGINE: mariadb
       PAPERLESS_DBHOST: db
-      PAPERLESS_DBUSER: paperless
-      PAPERLESS_DBPASSWORD: paperless
+      PAPERLESS_DBUSER: paperless # only needed if non-default username
+      PAPERLESS_DBPASS: paperless # only needed if non-default password
       PAPERLESS_DBPORT: 3306
       PAPERLESS_TIKA_ENABLED: 1
       PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
@@ -87,9 +87,12 @@ services:
   gotenberg:
     image: docker.io/gotenberg/gotenberg:7.6
     restart: unless-stopped
+    # The gotenberg chromium route is used to convert .eml files. We do not
+    # want to allow external content like tracking pixels or even javascript.
     command:
       - "gotenberg"
-      - "--chromium-disable-routes=true"
+      - "--chromium-disable-javascript=true"
+      - "--chromium-allow-list=file:///tmp/.*"
 
   tika:
     image: ghcr.io/paperless-ngx/tika:latest
index 8cb452464a3278b453be13cd93262b78d24db855..a18e0fb3ed2ca31b3d5180be3af67b7a92edb940 100644 (file)
@@ -71,8 +71,8 @@ services:
       PAPERLESS_REDIS: redis://broker:6379
       PAPERLESS_DBENGINE: mariadb
       PAPERLESS_DBHOST: db
-      PAPERLESS_DBUSER: paperless
-      PAPERLESS_DBPASSWORD: paperless
+      PAPERLESS_DBUSER: paperless # only needed if non-default username
+      PAPERLESS_DBPASS: paperless # only needed if non-default password
       PAPERLESS_DBPORT: 3306
 
 
index c4333ad3538c33c6c408c68beb44b59d09374bbc..1158e7d6787ef597656f457b4cb1cfd0d0302892 100644 (file)
@@ -79,9 +79,13 @@ services:
   gotenberg:
     image: docker.io/gotenberg/gotenberg:7.6
     restart: unless-stopped
+
+    # The gotenberg chromium route is used to convert .eml files. We do not
+    # want to allow external content like tracking pixels or even javascript.
     command:
       - "gotenberg"
-      - "--chromium-disable-routes=true"
+      - "--chromium-disable-javascript=true"
+      - "--chromium-allow-list=file:///tmp/.*"
 
   tika:
     image: ghcr.io/paperless-ngx/tika:latest
index a7b9a4ebe916787e2ae8e746bd5c029921f17c6d..a331c1ad12a582c01c3701e48c84a5fb92932218 100644 (file)
@@ -67,9 +67,13 @@ services:
   gotenberg:
     image: docker.io/gotenberg/gotenberg:7.6
     restart: unless-stopped
+
+    # The gotenberg chromium route is used to convert .eml files. We do not
+    # want to allow external content like tracking pixels or even javascript.
     command:
       - "gotenberg"
-      - "--chromium-disable-routes=true"
+      - "--chromium-disable-javascript=true"
+      - "--chromium-allow-list=file:///tmp/.*"
 
   tika:
     image: ghcr.io/paperless-ngx/tika:latest
index d1107feca9b0c1fc3d0f6707cf5759095d2983be..74e0806712486625e8e38cf31abc3ba4860329db 100755 (executable)
@@ -77,6 +77,46 @@ nltk_data () {
 
 }
 
+custom_container_init() {
+       # Mostly borrowed from the LinuxServer.io base image
+       # https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
+       local -r custom_script_dir="/custom-cont-init.d"
+       # Tamper checking.
+       # Don't run files which are owned by anyone except root
+       # Don't run files which are writeable by others
+       if [ -d "${custom_script_dir}" ]; then
+               if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
+                       echo "**** Potential tampering with custom scripts detected ****"
+                       echo "**** The folder '${custom_script_dir}' must be owned by root ****"
+                       return 0
+               fi
+               if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
+                       echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
+                       echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
+                       return 0
+               fi
+
+               # Make sure custom init directory has files in it
+               if [ -n "$(/bin/ls -A "${custom_script_dir}" 2>/dev/null)" ]; then
+                       echo "[custom-init] files found in ${custom_script_dir} executing"
+                       # Loop over files in the directory
+                       for SCRIPT in "${custom_script_dir}"/*; do
+                               NAME="$(basename "${SCRIPT}")"
+                               if [ -f "${SCRIPT}" ]; then
+                                       echo "[custom-init] ${NAME}: executing..."
+                                       /bin/bash "${SCRIPT}"
+                                       echo "[custom-init] ${NAME}: exited $?"
+                               elif [ ! -f "${SCRIPT}" ]; then
+                                       echo "[custom-init] ${NAME}: is not a file"
+                               fi
+                       done
+               else
+                       echo "[custom-init] no custom files found exiting..."
+               fi
+
+       fi
+}
+
 initialize() {
 
        # Setup environment from secrets before anything else
@@ -132,13 +172,16 @@ initialize() {
        set -e
 
        "${gosu_cmd[@]}" /sbin/docker-prepare.sh
+
+       # Leave this last thing
+       custom_container_init
+
 }
 
 install_languages() {
        echo "Installing languages..."
 
-       local -r langs="$1"
-       read -ra langs <<<"$langs"
+       read -ra langs <<<"$1"
 
        # Check that it is not empty
        if [ ${#langs[@]} -eq 0 ]; then
index a73b5aad90853e531842e9744a74f4c34514389c..c3a01ec8d2715cfd51415c97aaf20bfb0020088b 100755 (executable)
@@ -89,46 +89,6 @@ superuser() {
        fi
 }
 
-custom_container_init() {
-       # Mostly borrowed from the LinuxServer.io base image
-       # https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
-       local -r custom_script_dir="/custom-cont-init.d"
-       # Tamper checking.
-       # Don't run files which are owned by anyone except root
-       # Don't run files which are writeable by others
-       if [ -d "${custom_script_dir}" ]; then
-               if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
-                       echo "**** Potential tampering with custom scripts detected ****"
-                       echo "**** The folder '${custom_script_dir}' must be owned by root ****"
-                       return 0
-               fi
-               if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
-                       echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
-                       echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
-                       return 0
-               fi
-
-               # Make sure custom init directory has files in it
-               if [ -n "$(/bin/ls -A "${custom_script_dir}" 2>/dev/null)" ]; then
-                       echo "[custom-init] files found in ${custom_script_dir} executing"
-                       # Loop over files in the directory
-                       for SCRIPT in "${custom_script_dir}"/*; do
-                               NAME="$(basename "${SCRIPT}")"
-                               if [ -f "${SCRIPT}" ]; then
-                                       echo "[custom-init] ${NAME}: executing..."
-                                       /bin/bash "${SCRIPT}"
-                                       echo "[custom-init] ${NAME}: exited $?"
-                               elif [ ! -f "${SCRIPT}" ]; then
-                                       echo "[custom-init] ${NAME}: is not a file"
-                               fi
-                       done
-               else
-                       echo "[custom-init] no custom files found exiting..."
-               fi
-
-       fi
-}
-
 do_work() {
        if [[ "${PAPERLESS_DBENGINE}" == "mariadb" ]]; then
                wait_for_mariadb
@@ -144,9 +104,6 @@ do_work() {
 
        superuser
 
-       # Leave this last thing
-       custom_container_init
-
 }
 
 do_work
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644 (file)
index 7890f98..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# User-friendly check for sphinx-build
-ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
-$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
-endif
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-       @echo "Please use \`make <target>' where <target> is one of"
-       @echo "  html       to make standalone HTML files"
-       @echo "  livehtml   to preview changes with live reload in your browser"
-       @echo "  dirhtml    to make HTML files named index.html in directories"
-       @echo "  singlehtml to make a single large HTML file"
-       @echo "  pickle     to make pickle files"
-       @echo "  json       to make JSON files"
-       @echo "  htmlhelp   to make HTML files and a HTML help project"
-       @echo "  qthelp     to make HTML files and a qthelp project"
-       @echo "  devhelp    to make HTML files and a Devhelp project"
-       @echo "  epub       to make an epub"
-       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-       @echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
-       @echo "  text       to make text files"
-       @echo "  man        to make manual pages"
-       @echo "  texinfo    to make Texinfo files"
-       @echo "  info       to make Texinfo files and run them through makeinfo"
-       @echo "  gettext    to make PO message catalogs"
-       @echo "  changes    to make an overview of all changed/added/deprecated items"
-       @echo "  xml        to make Docutils-native XML files"
-       @echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
-       @echo "  linkcheck  to check all external links for integrity"
-       @echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-       rm -rf $(BUILDDIR)/*
-
-html:
-       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-       @echo
-       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-livehtml:
-       sphinx-autobuild "./" "$(BUILDDIR)" $(O)
-
-dirhtml:
-       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-       @echo
-       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-       @echo
-       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-       @echo
-       @echo "Build finished; now you can process the pickle files."
-
-json:
-       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-       @echo
-       @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-       @echo
-       @echo "Build finished; now you can run HTML Help Workshop with the" \
-             ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-       @echo
-       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
-             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhcp"
-       @echo "To view the help file:"
-       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhc"
-
-devhelp:
-       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-       @echo
-       @echo "Build finished."
-       @echo "To view the help file:"
-       @echo "# mkdir -p $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan"
-       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan"
-       @echo "# devhelp"
-
-epub:
-       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-       @echo
-       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-       @echo
-       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-       @echo "Run \`make' in that directory to run these through (pdf)latex" \
-             "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-       @echo "Running LaTeX files through pdflatex..."
-       $(MAKE) -C $(BUILDDIR)/latex all-pdf
-       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-latexpdfja:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-       @echo "Running LaTeX files through platex and dvipdfmx..."
-       $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
-       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-       @echo
-       @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-       @echo
-       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-       @echo
-       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-       @echo "Run \`make' in that directory to run these through makeinfo" \
-             "(use \`make info' here to do that automatically)."
-
-info:
-       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-       @echo "Running Texinfo files through makeinfo..."
-       make -C $(BUILDDIR)/texinfo info
-       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-       @echo
-       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-       @echo
-       @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-       @echo
-       @echo "Link check complete; look for any errors in the above output " \
-             "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-       @echo "Testing of doctests in the sources finished, look at the " \
-             "results in $(BUILDDIR)/doctest/output.txt."
-
-xml:
-       $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
-       @echo
-       @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-pseudoxml:
-       $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
-       @echo
-       @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css
deleted file mode 100644 (file)
index c0b3ed8..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-/* Variables */
-:root {
-  --color-text-body: #5c5962;
-  --color-text-body-light: #fcfcfc;
-  --color-text-anchor: #7253ed;
-  --color-text-alt: rgba(0, 0, 0, 0.3);
-  --color-text-title: #27262b;
-  --color-text-code-inline: #e74c3c;
-  --color-text-code-nt: #062873;
-  --color-text-selection: #b19eff;
-  --color-bg-body: #fcfcfc;
-  --color-bg-body-alt: #f3f6f6;
-  --color-bg-side-nav: #f5f6fa;
-  --color-bg-side-nav-hover: #ebedf5;
-  --color-bg-code-block: var(--color-bg-side-nav);
-  --color-border: #eeebee;
-  --color-btn-neutral-bg: #f3f6f6;
-  --color-btn-neutral-bg-hover: #e5ebeb;
-  --color-success-title: #1abc9c;
-  --color-success-body: #dbfaf4;
-  --color-warning-title: #f0b37e;
-  --color-warning-body: #ffedcc;
-  --color-danger-title: #f29f97;
-  --color-danger-body: #fdf3f2;
-  --color-info-title: #6ab0de;
-  --color-info-body: #e7f2fa;
-}
-
-.dark-mode {
-  --color-text-body: #abb2bf;
-  --color-text-body-light: #9499a2;
-  --color-text-alt: rgba(0255, 255, 255, 0.5);
-  --color-text-title: var(--color-text-anchor);
-  --color-text-code-inline: #abb2bf;
-  --color-text-code-nt: #2063f3;
-  --color-text-selection: #030303;
-  --color-bg-body: #1d1d20 !important;
-  --color-bg-body-alt: #131315;
-  --color-bg-side-nav: #18181a;
-  --color-bg-side-nav-hover: #101216;
-  --color-bg-code-block: #101216;
-  --color-border: #47494f;
-  --color-btn-neutral-bg: #242529;
-  --color-btn-neutral-bg-hover: #101216;
-  --color-success-title: #02120f;
-  --color-success-body: #041b17;
-  --color-warning-title: #1b0e03;
-  --color-warning-body: #371d06;
-  --color-danger-title: #120902;
-  --color-danger-body: #1b0503;
-  --color-info-title: #020608;
-  --color-info-body: #06141e;
-}
-
-* {
-  transition: background-color 0.3s ease, border-color 0.3s ease;
-}
-
-/* Typography */
-body {
-  font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
-  font-size: inherit;
-  line-height: 1.4;
-  color: var(--color-text-body);
-}
-
-.rst-content p {
-  word-break: break-word;
-}
-
-h1, h2, h3, h4, h5, h6 {
-  font-family: inherit;
-}
-
-.rst-content .toctree-wrapper>p.caption, .rst-content h1, .rst-content h2, .rst-content h3, .rst-content h4, .rst-content h5, .rst-content h6 {
-  padding-top: .5em;
-}
-
-p, .main-content-wrap, .rst-content .section ul, .rst-content .toctree-wrapper ul, .rst-content section ul, .wy-plain-list-disc, article ul {
-  line-height: 1.6;
-}
-
-pre, .code, .rst-content .linenodiv pre, .rst-content div[class^=highlight] pre, .rst-content pre.literal-block {
-  font-family: "SFMono-Regular", Menlo,Consolas, Monospace;
-  font-size: 0.75em;
-  line-height: 1.8;
-}
-
-.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4 {
-  font-size: 1rem
-}
-
-.rst-versions {
-  font-family: inherit;
-  line-height: 1;
-}
-
-footer, footer p {
-  font-size: .8rem;
-}
-
-footer .rst-footer-buttons {
-  font-size: 1rem;
-}
-
-@media (max-width: 400px) {
-  /* break code lines on mobile */
-  pre, code {
-    word-break: break-word;
-  }
-}
-
-
-/* Layout */
-.wy-side-nav-search, .wy-menu-vertical {
-  width: auto;
-}
-
-.wy-nav-side {
-  z-index: 0;
-  display: flex;
-  flex-wrap: wrap;
-  background-color: var(--color-bg-side-nav);
-}
-
-.wy-side-scroll {
-  width: 100%;
-  overflow-y: auto;
-}
-
-@media (min-width: 66.5rem) {
-  .wy-side-scroll {
-      width:264px
-  }
-}
-
-@media (min-width: 50rem) {
-  .wy-nav-side {
-      flex-wrap: nowrap;
-      position: fixed;
-      width: 248px;
-      height: 100%;
-      flex-direction: column;
-      border-right: 1px solid var(--color-border);
-      align-items:flex-end
-  }
-}
-
-@media (min-width: 66.5rem) {
-  .wy-nav-side {
-      width: calc((100% - 1064px) / 2 + 264px);
-      min-width:264px
-  }
-}
-
-@media (min-width: 50rem) {
-  .wy-nav-content-wrap {
-      position: relative;
-      max-width: 800px;
-      margin-left:248px
-  }
-}
-
-@media (min-width: 66.5rem) {
-  .wy-nav-content-wrap {
-      margin-left:calc((100% - 1064px) / 2 + 264px)
-  }
-}
-
-
-/* Colors */
-body.wy-body-for-nav,
-.wy-nav-content {
-  background: var(--color-bg-body);
-}
-
-.wy-nav-side {
-  border-right: 1px solid var(--color-border);
-}
-
-.wy-side-nav-search, .wy-nav-top {
-  background: var(--color-bg-side-nav);
-  border-bottom: 1px solid var(--color-border);
-}
-
-.wy-nav-content-wrap {
-  background: inherit;
-}
-
-.wy-side-nav-search > a, .wy-nav-top a, .wy-nav-top i {
-  color: var(--color-text-title);
-}
-
-.wy-side-nav-search > a:hover, .wy-nav-top a:hover {
-  background: transparent;
-}
-
-.wy-side-nav-search > div.version {
-  color: var(--color-text-alt)
-}
-
-.wy-side-nav-search > div[role="search"] {
-  border-top: 1px solid var(--color-border);
-}
-
-.wy-menu-vertical li.toctree-l2.current>a, .wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,
-.wy-menu-vertical li.toctree-l3.current>a, .wy-menu-vertical li.toctree-l3.current li.toctree-l4>a {
-  background: var(--color-bg-side-nav);
-}
-
-.rst-content .highlighted {
-  background: #eedd85;
-  box-shadow: 0 0 0 2px #eedd85;
-  font-weight: 600;
-}
-
-.wy-side-nav-search input[type=text],
-html.writer-html5 .rst-content table.docutils th {
-  color: var(--color-text-body);
-}
-
-.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
-.wy-table-backed,
-.wy-table-odd td,
-.wy-table-striped tr:nth-child(2n-1) td {
-  background-color: var(--color-bg-body-alt);
-}
-
-.rst-content table.docutils,
-.wy-table-bordered-all,
-html.writer-html5 .rst-content table.docutils th,
-.rst-content table.docutils td,
-.wy-table-bordered-all td,
-hr {
-  border-color: var(--color-border) !important;
-}
-
-::selection {
-  background: var(--color-text-selection);
-}
-
-/* Ridiculous rules are taken from sphinx_rtd */
-.rst-content .admonition-title,
-.wy-alert-title {
-  color: var(--color-text-body-light);
-}
-
-.rst-content .hint,
-.rst-content .important,
-.rst-content .tip,
-.rst-content .wy-alert-success,
-.wy-alert.wy-alert-success {
-  background: var(--color-success-body);
-}
-
-.rst-content .hint .admonition-title,
-.rst-content .hint .wy-alert-title,
-.rst-content .important .admonition-title,
-.rst-content .important .wy-alert-title,
-.rst-content .tip .admonition-title,
-.rst-content .tip .wy-alert-title,
-.rst-content .wy-alert-success .admonition-title,
-.rst-content .wy-alert-success .wy-alert-title,
-.wy-alert.wy-alert-success .rst-content .admonition-title,
-.wy-alert.wy-alert-success .wy-alert-title {
-  background-color: var(--color-success-title);
-}
-
-.rst-content .admonition-todo,
-.rst-content .attention,
-.rst-content .caution,
-.rst-content .warning,
-.rst-content .wy-alert-warning,
-.wy-alert.wy-alert-warning {
-  background: var(--color-warning-body);
-}
-
-.rst-content .admonition-todo .admonition-title,
-.rst-content .admonition-todo .wy-alert-title,
-.rst-content .attention .admonition-title,
-.rst-content .attention .wy-alert-title,
-.rst-content .caution .admonition-title,
-.rst-content .caution .wy-alert-title,
-.rst-content .warning .admonition-title,
-.rst-content .warning .wy-alert-title,
-.rst-content .wy-alert-warning .admonition-title,
-.rst-content .wy-alert-warning .wy-alert-title,
-.rst-content .wy-alert.wy-alert-warning .admonition-title,
-.wy-alert.wy-alert-warning .rst-content .admonition-title,
-.wy-alert.wy-alert-warning .wy-alert-title {
-  background: var(--color-warning-title);
-}
-
-.rst-content .danger,
-.rst-content .error,
-.rst-content .wy-alert-danger,
-.wy-alert.wy-alert-danger {
-  background: var(--color-danger-body);
-}
-
-.rst-content .danger .admonition-title,
-.rst-content .danger .wy-alert-title,
-.rst-content .error .admonition-title,
-.rst-content .error .wy-alert-title,
-.rst-content .wy-alert-danger .admonition-title,
-.rst-content .wy-alert-danger .wy-alert-title,
-.wy-alert.wy-alert-danger .rst-content .admonition-title,
-.wy-alert.wy-alert-danger .wy-alert-title {
-  background: var(--color-danger-title);
-}
-
-.rst-content .note,
-.rst-content .seealso,
-.rst-content .wy-alert-info,
-.wy-alert.wy-alert-info {
-  background: var(--color-info-body);
-}
-
-.rst-content .note .admonition-title,
-.rst-content .note .wy-alert-title,
-.rst-content .seealso .admonition-title,
-.rst-content .seealso .wy-alert-title,
-.rst-content .wy-alert-info .admonition-title,
-.rst-content .wy-alert-info .wy-alert-title,
-.wy-alert.wy-alert-info .rst-content .admonition-title,
-.wy-alert.wy-alert-info .wy-alert-title {
-  background: var(--color-info-title);
-}
-
-
-
-/* Links */
-a, a:visited,
-.wy-menu-vertical a,
-a.icon.icon-home,
-.wy-menu-vertical li.toctree-l1.current > a.current {
-  color: var(--color-text-anchor);
-  text-decoration: none;
-}
-
-a:hover, .wy-breadcrumbs-aside a {
-  color: var(--color-text-anchor); /* reset */
-}
-
-.rst-versions a, .rst-versions .rst-current-version {
-  color: #var(--color-text-anchor);
-}
-
-.wy-nav-content a.reference, .wy-nav-content a:not([class]) {
-  background-image: linear-gradient(var(--color-border) 0%, var(--color-border) 100%);
-  background-repeat: repeat-x;
-  background-position: 0 100%;
-  background-size: 1px 1px;
-}
-
-.wy-nav-content a.reference:hover, .wy-nav-content a:not([class]):hover {
-  background-image: linear-gradient(rgba(114,83,237,0.45) 0%, rgba(114,83,237,0.45) 100%);
-  background-size: 1px 1px;
-}
-
-.wy-menu-vertical a:hover,
-.wy-menu-vertical li.current a:hover,
-.wy-menu-vertical a:active {
-  background: var(--color-bg-side-nav-hover) !important;
-  color: var(--color-text-body);
-}
-
-.wy-menu-vertical li.toctree-l1.current>a,
-.wy-menu-vertical li.current>a,
-.wy-menu-vertical li.on a {
-  background-color: var(--color-bg-side-nav-hover);
-  border: none;
-  font-weight: normal;
-}
-
-.wy-menu-vertical li.current {
-  background-color: inherit;
-}
-
-.wy-menu-vertical li.current a {
-  border-right: none;
-}
-
-.wy-menu-vertical li.toctree-l2 a,
-.wy-menu-vertical li.toctree-l3 a,
-.wy-menu-vertical li.toctree-l4 a,
-.wy-menu-vertical li.toctree-l5 a,
-.wy-menu-vertical li.toctree-l6 a,
-.wy-menu-vertical li.toctree-l7 a,
-.wy-menu-vertical li.toctree-l8 a,
-.wy-menu-vertical li.toctree-l9 a,
-.wy-menu-vertical li.toctree-l10 a {
-  color: var(--color-text-body);
-}
-
-a.image-reference, a.image-reference:hover {
-  background: none !important;
-}
-
-a.image-reference img {
-  cursor: zoom-in;
-}
-
-
-/* Code blocks */
-.rst-content code, .rst-content tt, code {
-  padding: 0.25em;
-  font-weight: 400;
-  background-color: var(--color-bg-code-block);
-  border: 1px solid var(--color-border);
-  border-radius: 4px;
-}
-
-.rst-content div[class^=highlight], .rst-content pre.literal-block {
-  padding: 0.7rem;
-  margin-top: 0;
-  margin-bottom: 0.75rem;
-  overflow-x: auto;
-  background-color: var(--color-bg-side-nav);
-  border-color: var(--color-border);
-  border-radius: 4px;
-  box-shadow: none;
-}
-
-.rst-content .admonition-title,
-.rst-content div.admonition,
-.wy-alert-title {
-  padding: 10px 12px;
-  border-top-left-radius: 4px;
-  border-top-right-radius: 4px;
-}
-
-.highlight .go {
-  color: inherit;
-}
-
-.highlight .nt {
-  color: var(--color-text-code-nt);
-}
-
-.rst-content code.literal,
-.rst-content tt.literal,
-html.writer-html5 .rst-content dl.footnote code {
-  border-color: var(--color-border);
-  background-color: var(--color-border);
-  color: var(--color-text-code-inline)
-}
-
-
-/* Search */
-.wy-side-nav-search input[type=text] {
-  border: none;
-  border-radius: 0;
-  background-color: transparent;
-  font-family: inherit;
-  font-size: .85rem;
-  box-shadow: none;
-  padding: .7rem 1rem .7rem 2.8rem;
-  margin: 0;
-}
-
-#rtd-search-form {
-  position: relative;
-}
-
-#rtd-search-form:before {
-  font: normal normal normal 14px/1 FontAwesome;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  content: "\f002";
-  color: var(--color-text-alt);
-  position: absolute;
-  left: 1.5rem;
-  top: .7rem;
-}
-
-/* Side nav */
-.wy-side-nav-search {
-  padding: 1rem 0 0 0;
-}
-
-.wy-menu-vertical li a button.toctree-expand {
-  float: right;
-  margin-right: -1.5em;
-  padding: 0 .5em;
-}
-
-.wy-menu-vertical a,
-.wy-menu-vertical li.current>a,
-.wy-menu-vertical li.current li>a {
-  padding-right: 1.5em !important;
-}
-
-.wy-menu-vertical li.current li>a.current {
-  font-weight: 600;
-}
-
-/* Misc spacing */
-.rst-content .admonition-title, .wy-alert-title {
-  padding: 10px 12px;
-}
-
-/* Buttons */
-.btn {
-  display: inline-block;
-  box-sizing: border-box;
-  padding: 0.3em 1em;
-  margin: 0;
-  font-family: inherit;
-  font-size: inherit;
-  font-weight: 500;
-  line-height: 1.5;
-  color: #var(--color-text-anchor);
-  text-decoration: none;
-  vertical-align: baseline;
-  background-color: #f7f7f7;
-  border-width: 0;
-  border-radius: 4px;
-  box-shadow: 0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);
-  appearance: none;
-}
-
-.btn:active {
-  padding: 0.3em 1em;
-}
-
-.rst-content .btn:focus {
-  outline: 1px solid #ccc;
-}
-
-.rst-content .btn-neutral, .rst-content .btn span.fa {
-  color: var(--color-text-body) !important;
-}
-
-.btn-neutral {
-  background-color: var(--color-btn-neutral-bg) !important;
-  color: var(--color-btn-neutral-text) !important;
-  border: 1px solid var(--color-btn-neutral-bg);
-}
-
-.btn:hover, .btn-neutral:hover {
-  background-color: var(--color-btn-neutral-bg-hover) !important;
-}
-
-
-/* Icon overrides */
-.wy-side-nav-search a.icon-home:before {
-  display: none;
-}
-
-.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before {
-  content: "\f106"; /* fa-angle-up */
-}
-
-.fa-plus-square-o:before, .wy-menu-vertical li button.toctree-expand:before {
-  content: "\f107"; /* fa-angle-down */
-}
-
-
-/* Misc */
-.wy-nav-top {
-  line-height: 36px;
-}
-
-.wy-nav-top > i {
-  font-size: 24px;
-  padding: 8px 0 0 2px;
-  color:#var(--color-text-anchor);
-}
-
-.rst-content table.docutils td,
-.rst-content table.docutils th,
-.rst-content table.field-list td,
-.rst-content table.field-list th,
-.wy-table td,
-.wy-table th {
-  padding: 8px 14px;
-}
-
-.dark-mode-toggle {
-  position: absolute;
-  top: 14px;
-  right: 12px;
-  height: 20px;
-  width: 24px;
-  z-index: 10;
-  border: none;
-  background-color: transparent;
-  color: inherit;
-  opacity: 0.7;
-}
-
-.wy-nav-content-wrap {
-  z-index: 20;
-}
diff --git a/docs/_static/js/darkmode.js b/docs/_static/js/darkmode.js
deleted file mode 100644 (file)
index 9094725..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-let toggleButton
-let icon
-
-function load() {
-       'use strict'
-
-       toggleButton = document.createElement('button')
-       toggleButton.setAttribute('title', 'Toggle dark mode')
-       toggleButton.classList.add('dark-mode-toggle')
-       icon = document.createElement('i')
-       icon.classList.add('fa', darkModeState ? 'fa-sun-o' : 'fa-moon-o')
-       toggleButton.appendChild(icon)
-       document.body.prepend(toggleButton)
-
-       // Listen for changes in the OS settings
-       // addListener is used because older versions of Safari don't support addEventListener
-       // prefersDarkQuery set in <head>
-       if (prefersDarkQuery) {
-               prefersDarkQuery.addListener(function (evt) {
-                       toggleDarkMode(evt.matches)
-               })
-       }
-
-       // Initial setting depending on the prefers-color-mode or localstorage
-       // darkModeState should be set in the document <head> to prevent flash
-       if (darkModeState == undefined) darkModeState = false
-       toggleDarkMode(darkModeState)
-
-       // Toggles the "dark-mode" class on click and sets localStorage state
-       toggleButton.addEventListener('click', () => {
-               darkModeState = !darkModeState
-
-               toggleDarkMode(darkModeState)
-               localStorage.setItem('dark-mode', darkModeState)
-       })
-}
-
-function toggleDarkMode(state) {
-       document.documentElement.classList.toggle('dark-mode', state)
-       document.documentElement.classList.toggle('light-mode', !state)
-       icon.classList.remove('fa-sun-o')
-       icon.classList.remove('fa-moon-o')
-       icon.classList.add(state ? 'fa-sun-o' : 'fa-moon-o')
-       darkModeState = state
-}
-
-document.addEventListener('DOMContentLoaded', load)
diff --git a/docs/_static/screenshots/mail-rules-edited.png b/docs/_static/screenshots/mail-rules-edited.png
deleted file mode 100644 (file)
index 68a170a..0000000
Binary files a/docs/_static/screenshots/mail-rules-edited.png and /dev/null differ
diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html
deleted file mode 100644 (file)
index cf648b6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "!layout.html" %}
-{% block extrahead %}
-    <script>
-        // MediaQueryList object
-        const prefersDarkQuery = window.matchMedia("(prefers-color-scheme: dark)");
-        const lsDark = localStorage.getItem("dark-mode");
-        let darkModeState = lsDark !== null ? lsDark == "true" : prefersDarkQuery.matches;
-
-        document.documentElement.classList.toggle("dark-mode", darkModeState);
-        document.documentElement.classList.toggle("light-mode", !darkModeState);
-    </script>
-    {{ super() }}
-{% endblock %}
diff --git a/docs/administration.md b/docs/administration.md
new file mode 100644 (file)
index 0000000..a8009c8
--- /dev/null
@@ -0,0 +1,502 @@
+# Administration
+
+## Making backups {#backup}
+
+Multiple options exist for making backups of your paperless instance,
+depending on how you installed paperless.
+
+Before making backups, make sure that paperless is not running.
+
+Options available to any installation of paperless:
+
+- Use the [document exporter](administration#exporter). The document exporter exports all your documents,
+  thumbnails and metadata to a specific folder. You may import your
+  documents into a fresh instance of paperless again or store your
+  documents in another DMS with this export.
+- The document exporter is also able to update an already existing
+  export. Therefore, incremental backups with `rsync` are entirely
+  possible.
+
+!!! caution
+
+    You cannot import the export generated with one version of paperless in
+    a different version of paperless. The export contains an exact image of
+    the database, and migrations may change the database layout.
+
+Options available to docker installations:
+
+- Backup the docker volumes. These usually reside within
+  `/var/lib/docker/volumes` on the host and you need to be root in
+  order to access them.
+
+  Paperless uses 4 volumes:
+
+  - `paperless_media`: This is where your documents are stored.
+  - `paperless_data`: This is where auxillary data is stored. This
+    folder also contains the SQLite database, if you use it.
+  - `paperless_pgdata`: Exists only if you use PostgreSQL and
+    contains the database.
+  - `paperless_dbdata`: Exists only if you use MariaDB and contains
+    the database.
+
+Options available to bare-metal and non-docker installations:
+
+- Backup the entire paperless folder. This ensures that if your
+  paperless instance crashes at some point or your disk fails, you can
+  simply copy the folder back into place and it works.
+
+  When using PostgreSQL or MariaDB, you'll also have to backup the
+  database.
+
+### Restoring {#migrating-restoring}
+
+## Updating Paperless {#updating}
+
+### Docker Route
+
+If a new release of paperless-ngx is available, upgrading depends on how
+you installed paperless-ngx in the first place. The releases are
+available at the [release
+page](https://github.com/paperless-ngx/paperless-ngx/releases).
+
+First of all, ensure that paperless is stopped.
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose down
+```
+
+After that, [make a backup](#backup).
+
+A. If you pull the image from the docker hub, all you need to do is:
+
+    ``` shell-session
+    $ docker-compose pull
+    $ docker-compose up
+    ```
+
+    The docker-compose files refer to the `latest` version, which is
+    always the latest stable release.
+
+B. If you built the image yourself, do the following:
+
+    ``` shell-session
+    $ git pull
+    $ docker-compose build
+    $ docker-compose up
+    ```
+
+Running `docker-compose up` will also apply any new database migrations.
+If you see everything working, press CTRL+C once to gracefully stop
+paperless. Then you can start paperless-ngx with `-d` to have it run in
+the background.
+
+!!! note
+
+    In version 0.9.14, the update process was changed. In 0.9.13 and
+    earlier, the docker-compose files specified exact versions and pull
+    won't automatically update to newer versions. In order to enable
+    updates as described above, either get the new `docker-compose.yml`
+    file from
+    [here](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+    or edit the `docker-compose.yml` file, find the line that says
+
+    ```
+    image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x
+    ```
+
+    and replace the version with `latest`:
+
+    ```
+    image: ghcr.io/paperless-ngx/paperless-ngx:latest
+    ```
+
+!!! note
+
+    In version 1.7.1 and onwards, the Docker image can now be pinned to a
+    release series. This is often combined with automatic updaters such as
+    Watchtower to allow safer unattended upgrading to new bugfix releases
+    only. It is still recommended to always review release notes before
+    upgrading. To pin your install to a release series, edit the
+    `docker-compose.yml` find the line that says
+
+    ```
+    image: ghcr.io/paperless-ngx/paperless-ngx:latest
+    ```
+
+    and replace the version with the series you want to track, for
+    example:
+
+    ```
+    image: ghcr.io/paperless-ngx/paperless-ngx:1.7
+    ```
+
+### Bare Metal Route
+
+After grabbing the new release and unpacking the contents, do the
+following:
+
+1.  Update dependencies. New paperless version may require additional
+    dependencies. The dependencies required are listed in the section
+    about
+    [bare metal installations](/setup#bare_metal).
+
+2.  Update python requirements. Keep in mind to activate your virtual
+    environment before that, if you use one.
+
+    ```shell-session
+    $ pip install -r requirements.txt
+    ```
+
+3.  Migrate the database.
+
+    ```shell-session
+    $ cd src
+    $ python3 manage.py migrate
+    ```
+
+    This might not actually do anything. Not every new paperless version
+    comes with new database migrations.
+
+## Downgrading Paperless
+
+Downgrades are possible. However, some updates also contain database
+migrations (these change the layout of the database and may move data).
+In order to move back from a version that applied database migrations,
+you'll have to revert the database migration _before_ downgrading, and
+then downgrade paperless.
+
+This table lists the compatible versions for each database migration
+number.
+
+| Migration number | Version range   |
+| ---------------- | --------------- |
+| 1011             | 1.0.0           |
+| 1012             | 1.1.0 - 1.2.1   |
+| 1014             | 1.3.0 - 1.3.1   |
+| 1016             | 1.3.2 - current |
+
+Execute the following management command to migrate your database:
+
+```shell-session
+$ python3 manage.py migrate documents <migration number>
+```
+
+!!! note
+
+    Some migrations cannot be undone. The command will issue errors if that
+    happens.
+
+## Management utilities {#management-commands}
+
+Paperless comes with some management commands that perform various
+maintenance tasks on your paperless instance. You can invoke these
+commands in the following way:
+
+With docker-compose, while paperless is running:
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose exec webserver <command> <arguments>
+```
+
+With docker, while paperless is running:
+
+```shell-session
+$ docker exec -it <container-name> <command> <arguments>
+```
+
+Bare metal:
+
+```shell-session
+$ cd /path/to/paperless/src
+$ python3 manage.py <command> <arguments>
+```
+
+All commands have built-in help, which can be accessed by executing them
+with the argument `--help`.
+
+### Document exporter {#exporter}
+
+The document exporter exports all your data from paperless into a folder
+for backup or migration to another DMS.
+
+If you use the document exporter within a cronjob to backup your data
+you might use the `-T` flag behind exec to suppress "The input device
+is not a TTY" errors. For example:
+`docker-compose exec -T webserver document_exporter ../export`
+
+```
+document_exporter target [-c] [-f] [-d]
+
+optional arguments:
+-c, --compare-checksums
+-f, --use-filename-format
+-d, --delete
+```
+
+`target` is a folder to which the data gets written. This includes
+documents, thumbnails and a `manifest.json` file. The manifest contains
+all metadata from the database (correspondents, tags, etc).
+
+When you use the provided docker compose script, specify `../export` as
+the target. This path inside the container is automatically mounted on
+your host on the folder `export`.
+
+If the target directory already exists and contains files, paperless
+will assume that the contents of the export directory are a previous
+export and will attempt to update the previous export. Paperless will
+only export changed and added files. Paperless determines whether a file
+has changed by inspecting the file attributes "date/time modified" and
+"size". If that does not work out for you, specify
+`--compare-checksums` and paperless will attempt to compare file
+checksums instead. This is slower.
+
+Paperless will not remove any existing files in the export directory. If
+you want paperless to also remove files that do not belong to the
+current export such as files from deleted documents, specify `--delete`.
+Be careful when pointing paperless to a directory that already contains
+other files.
+
+The filenames generated by this command follow the format
+`[date created] [correspondent] [title].[extension]`. If you want
+paperless to use `PAPERLESS_FILENAME_FORMAT` for exported filenames
+instead, specify `--use-filename-format`.
+
+### Document importer {#importer}
+
+The document importer takes the export produced by the [Document
+exporter](#document-exporter) and imports it into paperless.
+
+The importer works just like the exporter. You point it at a directory,
+and the script does the rest of the work:
+
+```
+document_importer source
+```
+
+When you use the provided docker compose script, put the export inside
+the `export` folder in your paperless source directory. Specify
+`../export` as the `source`.
+
+!!! note
+
+    Importing from a previous version of Paperless may work, but for best
+    results it is suggested to match the versions.
+
+### Document retagger {#retagger}
+
+Say you've imported a few hundred documents and now want to introduce a
+tag or set up a new correspondent, and apply its matching to all of the
+currently-imported docs. This problem is common enough that there are
+tools for it.
+
+```
+document_retagger [-h] [-c] [-T] [-t] [-i] [--use-first] [-f]
+
+optional arguments:
+-c, --correspondent
+-T, --tags
+-t, --document_type
+-s, --storage_path
+-i, --inbox-only
+--use-first
+-f, --overwrite
+```
+
+Run this after changing or adding matching rules. It'll loop over all
+of the documents in your database and attempt to match documents
+according to the new rules.
+
+Specify any combination of `-c`, `-T`, `-t` and `-s` to have the
+retagger perform matching of the specified metadata type. If you don't
+specify any of these options, the document retagger won't do anything.
+
+Specify `-i` to have the document retagger work on documents tagged with
+inbox tags only. This is useful when you don't want to mess with your
+already processed documents.
+
+When multiple document types or correspondents match a single document,
+the retagger won't assign these to the document. Specify `--use-first`
+to override this behavior and just use the first correspondent or type
+it finds. This option does not apply to tags, since any amount of tags
+can be applied to a document.
+
+Finally, `-f` specifies that you wish to overwrite already assigned
+correspondents, types and/or tags. The default behavior is to not assign
+correspondents and types to documents that have this data already
+assigned. `-f` works differently for tags: By default, only additional
+tags get added to documents, no tags will be removed. With `-f`, tags
+that don't match a document anymore get removed as well.
+
+### Managing the Automatic matching algorithm
+
+The _Auto_ matching algorithm requires a trained neural network to work.
+This network needs to be updated whenever somethings in your data
+changes. The docker image takes care of that automatically with the task
+scheduler. You can manually renew the classifier by invoking the
+following management command:
+
+```
+document_create_classifier
+```
+
+This command takes no arguments.
+
+### Managing the document search index {#index}
+
+The document search index is responsible for delivering search results
+for the website. The document index is automatically updated whenever
+documents get added to, changed, or removed from paperless. However, if
+the search yields non-existing documents or won't find anything, you
+may need to recreate the index manually.
+
+```
+document_index {reindex,optimize}
+```
+
+Specify `reindex` to have the index created from scratch. This may take
+some time.
+
+Specify `optimize` to optimize the index. This updates certain aspects
+of the index and usually makes queries faster and also ensures that the
+autocompletion works properly. This command is regularly invoked by the
+task scheduler.
+
+### Managing filenames {#renamer}
+
+If you use paperless' feature to
+[assign custom filenames to your documents](/advanced_usage#file_name_handling), you can use this command to move all your files after
+changing the naming scheme.
+
+!!! warning
+
+    Since this command moves your documents, it is advised to do a backup
+    beforehand. The renaming logic is robust and will never overwrite or
+    delete a file, but you can't ever be careful enough.
+
+```
+document_renamer
+```
+
+The command takes no arguments and processes all your documents at once.
+
+Learn how to use
+[Management Utilities](#management-commands).
+
+### Sanity checker {#sanity-checker}
+
+Paperless has a built-in sanity checker that inspects your document
+collection for issues.
+
+The issues detected by the sanity checker are as follows:
+
+- Missing original files.
+- Missing archive files.
+- Inaccessible original files due to improper permissions.
+- Inaccessible archive files due to improper permissions.
+- Corrupted original documents by comparing their checksum against
+  what is stored in the database.
+- Corrupted archive documents by comparing their checksum against what
+  is stored in the database.
+- Missing thumbnails.
+- Inaccessible thumbnails due to improper permissions.
+- Documents without any content (warning).
+- Orphaned files in the media directory (warning). These are files
+  that are not referenced by any document im paperless.
+
+```
+document_sanity_checker
+```
+
+The command takes no arguments. Depending on the size of your document
+archive, this may take some time.
+
+### Fetching e-mail
+
+Paperless automatically fetches your e-mail every 10 minutes by default.
+If you want to invoke the email consumer manually, call the following
+management command:
+
+```
+mail_fetcher
+```
+
+The command takes no arguments and processes all your mail accounts and
+rules.
+
+!!! note
+
+    As of October 2022 Microsoft no longer supports IMAP authentication
+    for Exchange servers, thus Exchange is no longer supported until a
+    solution is implemented in the Python IMAP library used by Paperless.
+    See
+
+[learn.microsoft.com](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/deprecation-of-basic-authentication-exchange-online)
+
+### Creating archived documents {#archiver}
+
+Paperless stores archived PDF/A documents alongside your original
+documents. These archived documents will also contain selectable text
+for image-only originals. These documents are derived from the
+originals, which are always stored unmodified. If coming from an earlier
+version of paperless, your documents won't have archived versions.
+
+This command creates PDF/A documents for your documents.
+
+```
+document_archiver --overwrite --document <id>
+```
+
+This command will only attempt to create archived documents when no
+archived document exists yet, unless `--overwrite` is specified. If
+`--document <id>` is specified, the archiver will only process that
+document.
+
+!!! note
+
+    This command essentially performs OCR on all your documents again,
+    according to your settings. If you run this with
+    `PAPERLESS_OCR_MODE=redo`, it will potentially run for a very long time.
+    You can cancel the command at any time, since this command will skip
+    already archived versions the next time it is run.
+
+!!! note
+
+    Some documents will cause errors and cannot be converted into PDF/A
+    documents, such as encrypted PDF documents. The archiver will skip over
+    these documents each time it sees them.
+
+### Managing encryption {#encyption}
+
+Documents can be stored in Paperless using GnuPG encryption.
+
+!!! warning
+
+    Encryption is deprecated since paperless-ngx 0.9 and doesn't really
+    provide any additional security, since you have to store the passphrase
+    in a configuration file on the same system as the encrypted documents
+    for paperless to work. Furthermore, the entire text content of the
+    documents is stored plain in the database, even if your documents are
+    encrypted. Filenames are not encrypted as well.
+
+    Also, the web server provides transparent access to your encrypted
+    documents.
+
+    Consider running paperless on an encrypted filesystem instead, which
+    will then at least provide security against physical hardware theft.
+
+#### Enabling encryption
+
+Enabling encryption is no longer supported.
+
+#### Disabling encryption
+
+Basic usage to disable encryption of your document store:
+
+(Note: If `PAPERLESS_PASSPHRASE` isn't set already, you need to specify
+it here)
+
+```
+decrypt_documents [--passphrase SECR3TP4SSPHRA$E]
+```
diff --git a/docs/administration.rst b/docs/administration.rst
deleted file mode 100644 (file)
index ed2075a..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-
-**************
-Administration
-**************
-
-.. _administration-backup:
-
-Making backups
-##############
-
-Multiple options exist for making backups of your paperless instance,
-depending on how you installed paperless.
-
-Before making backups, make sure that paperless is not running.
-
-Options available to any installation of paperless:
-
-*   Use the :ref:`document exporter <utilities-exporter>`.
-    The document exporter exports all your documents, thumbnails and
-    metadata to a specific folder. You may import your documents into a
-    fresh instance of paperless again or store your documents in another
-    DMS with this export.
-*   The document exporter is also able to update an already existing export.
-    Therefore, incremental backups with ``rsync`` are entirely possible.
-
-.. caution::
-
-    You cannot import the export generated with one version of paperless in a
-    different version of paperless. The export contains an exact image of the
-    database, and migrations may change the database layout.
-
-Options available to docker installations:
-
-*   Backup the docker volumes. These usually reside within
-    ``/var/lib/docker/volumes`` on the host and you need to be root in order
-    to access them.
-
-    Paperless uses 4 volumes:
-
-    *   ``paperless_media``: This is where your documents are stored.
-    *   ``paperless_data``: This is where auxillary data is stored. This
-        folder also contains the SQLite database, if you use it.
-    *   ``paperless_pgdata``: Exists only if you use PostgreSQL and contains
-        the database.
-    *   ``paperless_dbdata``: Exists only if you use MariaDB and contains
-        the database.
-
-Options available to bare-metal and non-docker installations:
-
-*   Backup the entire paperless folder. This ensures that if your paperless instance
-    crashes at some point or your disk fails, you can simply copy the folder back
-    into place and it works.
-
-    When using PostgreSQL or MariaDB, you'll also have to backup the database.
-
-.. _migrating-restoring:
-
-Restoring
-=========
-
-.. _administration-updating:
-
-Updating Paperless
-##################
-
-Docker Route
-============
-
-If a new release of paperless-ngx is available, upgrading depends on how you
-installed paperless-ngx in the first place. The releases are available at the
-`release page <https://github.com/paperless-ngx/paperless-ngx/releases>`_.
-
-First of all, ensure that paperless is stopped.
-
-.. code:: shell-session
-
-    $ cd /path/to/paperless
-    $ docker-compose down
-
-After that, :ref:`make a backup <administration-backup>`.
-
-A.  If you pull the image from the docker hub, all you need to do is:
-
-    .. code:: shell-session
-
-        $ docker-compose pull
-        $ docker-compose up
-
-    The docker-compose files refer to the ``latest`` version, which is always the latest
-    stable release.
-
-B.  If you built the image yourself, do the following:
-
-    .. code:: shell-session
-
-        $ git pull
-        $ docker-compose build
-        $ docker-compose up
-
-Running ``docker-compose up`` will also apply any new database migrations.
-If you see everything working, press CTRL+C once to gracefully stop paperless.
-Then you can start paperless-ngx with ``-d`` to have it run in the background.
-
-    .. note::
-
-        In version 0.9.14, the update process was changed. In 0.9.13 and earlier, the
-        docker-compose files specified exact versions and pull won't automatically
-        update to newer versions. In order to enable updates as described above, either
-        get the new ``docker-compose.yml`` file from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
-        or edit the ``docker-compose.yml`` file, find the line that says
-
-            .. code::
-
-                image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x
-
-        and replace the version with ``latest``:
-
-            .. code::
-
-                image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
-    .. note::
-        In version 1.7.1 and onwards, the Docker image can now be pinned to a release series.
-        This is often combined with automatic updaters such as Watchtower to allow safer
-        unattended upgrading to new bugfix releases only.  It is still recommended to always
-        review release notes before upgrading.  To pin your install to a release series, edit
-        the ``docker-compose.yml`` find the line that says
-
-            .. code::
-
-                image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
-        and replace the version with the series you want to track, for example:
-
-            .. code::
-
-                image: ghcr.io/paperless-ngx/paperless-ngx:1.7
-
-Bare Metal Route
-================
-
-After grabbing the new release and unpacking the contents, do the following:
-
-1.  Update dependencies. New paperless version may require additional
-    dependencies. The dependencies required are listed in the section about
-    :ref:`bare metal installations <setup-bare_metal>`.
-
-2.  Update python requirements. Keep in mind to activate your virtual environment
-    before that, if you use one.
-
-    .. code:: shell-session
-
-        $ pip install -r requirements.txt
-
-3.  Migrate the database.
-
-    .. code:: shell-session
-
-        $ cd src
-        $ python3 manage.py migrate
-
-    This might not actually do anything. Not every new paperless version comes with new
-    database migrations.
-
-Downgrading Paperless
-#####################
-
-Downgrades are possible. However, some updates also contain database migrations (these change the layout of the database and may move data).
-In order to move back from a version that applied database migrations, you'll have to revert the database migration *before* downgrading,
-and then downgrade paperless.
-
-This table lists the compatible versions for each database migration number.
-
-+------------------+-----------------+
-| Migration number | Version range   |
-+------------------+-----------------+
-| 1011             | 1.0.0           |
-+------------------+-----------------+
-| 1012             | 1.1.0 - 1.2.1   |
-+------------------+-----------------+
-| 1014             | 1.3.0 - 1.3.1   |
-+------------------+-----------------+
-| 1016             | 1.3.2 - current |
-+------------------+-----------------+
-
-Execute the following management command to migrate your database:
-
-.. code:: shell-session
-
-    $ python3 manage.py migrate documents <migration number>
-
-.. note::
-
-    Some migrations cannot be undone. The command will issue errors if that happens.
-
-.. _utilities-management-commands:
-
-Management utilities
-####################
-
-Paperless comes with some management commands that perform various maintenance
-tasks on your paperless instance. You can invoke these commands in the following way:
-
-With docker-compose, while paperless is running:
-
-.. code:: shell-session
-
-    $ cd /path/to/paperless
-    $ docker-compose exec webserver <command> <arguments>
-
-With docker, while paperless is running:
-
-.. code:: shell-session
-
-    $ docker exec -it <container-name> <command> <arguments>
-
-Bare metal:
-
-.. code:: shell-session
-
-    $ cd /path/to/paperless/src
-    $ python3 manage.py <command> <arguments>
-
-All commands have built-in help, which can be accessed by executing them with
-the argument ``--help``.
-
-.. _utilities-exporter:
-
-Document exporter
-=================
-
-The document exporter exports all your data from paperless into a folder for
-backup or migration to another DMS.
-
-If you use the document exporter within a cronjob to backup your data you might use the ``-T`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -T webserver document_exporter ../export``
-
-.. code::
-
-    document_exporter target [-c] [-f] [-d]
-
-    optional arguments:
-    -c, --compare-checksums
-    -f, --use-filename-format
-    -d, --delete
-
-``target`` is a folder to which the data gets written. This includes documents,
-thumbnails and a ``manifest.json`` file. The manifest contains all metadata from
-the database (correspondents, tags, etc).
-
-When you use the provided docker compose script, specify ``../export`` as the
-target. This path inside the container is automatically mounted on your host on
-the folder ``export``.
-
-If the target directory already exists and contains files, paperless will assume
-that the contents of the export directory are a previous export and will attempt
-to update the previous export. Paperless will only export changed and added files.
-Paperless determines whether a file has changed by inspecting the file attributes
-"date/time modified" and "size". If that does not work out for you, specify
-``--compare-checksums`` and paperless will attempt to compare file checksums instead.
-This is slower.
-
-Paperless will not remove any existing files in the export directory. If you want
-paperless to also remove files that do not belong to the current export such as files
-from deleted documents, specify ``--delete``. Be careful when pointing paperless to
-a directory that already contains other files.
-
-The filenames generated by this command follow the format
-``[date created] [correspondent] [title].[extension]``.
-If you want paperless to use ``PAPERLESS_FILENAME_FORMAT`` for exported filenames
-instead, specify ``--use-filename-format``.
-
-
-.. _utilities-importer:
-
-Document importer
-=================
-
-The document importer takes the export produced by the `Document exporter`_ and
-imports it into paperless.
-
-The importer works just like the exporter.  You point it at a directory, and
-the script does the rest of the work:
-
-.. code::
-
-    document_importer source
-
-When you use the provided docker compose script, put the export inside the
-``export`` folder in your paperless source directory. Specify ``../export``
-as the ``source``.
-
-.. note::
-
-    Importing from a previous version of Paperless may work, but for best results
-    it is suggested to match the versions.
-
-.. _utilities-retagger:
-
-Document retagger
-=================
-
-Say you've imported a few hundred documents and now want to introduce
-a tag or set up a new correspondent, and apply its matching to all of
-the currently-imported docs. This problem is common enough that
-there are tools for it.
-
-.. code::
-
-    document_retagger [-h] [-c] [-T] [-t] [-i] [--use-first] [-f]
-
-    optional arguments:
-    -c, --correspondent
-    -T, --tags
-    -t, --document_type
-    -s, --storage_path
-    -i, --inbox-only
-    --use-first
-    -f, --overwrite
-
-Run this after changing or adding matching rules. It'll loop over all
-of the documents in your database and attempt to match documents
-according to the new rules.
-
-Specify any combination of ``-c``, ``-T``, ``-t`` and ``-s`` to have the
-retagger perform matching of the specified metadata type. If you don't
-specify any of these options, the document retagger won't do anything.
-
-Specify ``-i`` to have the document retagger work on documents tagged
-with inbox tags only. This is useful when you don't want to mess with
-your already processed documents.
-
-When multiple document types or correspondents match a single document,
-the retagger won't assign these to the document. Specify ``--use-first``
-to override this behavior and just use the first correspondent or type
-it finds. This option does not apply to tags, since any amount of tags
-can be applied to a document.
-
-Finally, ``-f`` specifies that you wish to overwrite already assigned
-correspondents, types and/or tags. The default behavior is to not
-assign correspondents and types to documents that have this data already
-assigned. ``-f`` works differently for tags: By default, only additional tags get
-added to documents, no tags will be removed. With ``-f``, tags that don't
-match a document anymore get removed as well.
-
-
-Managing the Automatic matching algorithm
-=========================================
-
-The *Auto* matching algorithm requires a trained neural network to work.
-This network needs to be updated whenever somethings in your data
-changes. The docker image takes care of that automatically with the task
-scheduler. You can manually renew the classifier by invoking the following
-management command:
-
-.. code::
-
-    document_create_classifier
-
-This command takes no arguments.
-
-.. _`administration-index`:
-
-Managing the document search index
-==================================
-
-The document search index is responsible for delivering search results for the
-website. The document index is automatically updated whenever documents get
-added to, changed, or removed from paperless. However, if the search yields
-non-existing documents or won't find anything, you may need to recreate the
-index manually.
-
-.. code::
-
-    document_index {reindex,optimize}
-
-Specify ``reindex`` to have the index created from scratch. This may take some
-time.
-
-Specify ``optimize`` to optimize the index. This updates certain aspects of
-the index and usually makes queries faster and also ensures that the
-autocompletion works properly. This command is regularly invoked by the task
-scheduler.
-
-.. _utilities-renamer:
-
-Managing filenames
-==================
-
-If you use paperless' feature to
-:ref:`assign custom filenames to your documents <advanced-file_name_handling>`,
-you can use this command to move all your files after changing
-the naming scheme.
-
-.. warning::
-
-    Since this command moves your documents, it is advised to do
-    a backup beforehand. The renaming logic is robust and will never overwrite
-    or delete a file, but you can't ever be careful enough.
-
-.. code::
-
-    document_renamer
-
-The command takes no arguments and processes all your documents at once.
-
-Learn how to use :ref:`Management Utilities<utilities-management-commands>`.
-
-
-.. _utilities-sanity-checker:
-
-Sanity checker
-==============
-
-Paperless has a built-in sanity checker that inspects your document collection for issues.
-
-The issues detected by the sanity checker are as follows:
-
-* Missing original files.
-* Missing archive files.
-* Inaccessible original files due to improper permissions.
-* Inaccessible archive files due to improper permissions.
-* Corrupted original documents by comparing their checksum against what is stored in the database.
-* Corrupted archive documents by comparing their checksum against what is stored in the database.
-* Missing thumbnails.
-* Inaccessible thumbnails due to improper permissions.
-* Documents without any content (warning).
-* Orphaned files in the media directory (warning). These are files that are not referenced by any document im paperless.
-
-
-.. code::
-
-    document_sanity_checker
-
-The command takes no arguments. Depending on the size of your document archive, this may take some time.
-
-
-Fetching e-mail
-===============
-
-Paperless automatically fetches your e-mail every 10 minutes by default. If
-you want to invoke the email consumer manually, call the following management
-command:
-
-.. code::
-
-    mail_fetcher
-
-The command takes no arguments and processes all your mail accounts and rules.
-
-.. _utilities-archiver:
-
-Creating archived documents
-===========================
-
-Paperless stores archived PDF/A documents alongside your original documents.
-These archived documents will also contain selectable text for image-only
-originals.
-These documents are derived from the originals, which are always stored
-unmodified. If coming from an earlier version of paperless, your documents
-won't have archived versions.
-
-This command creates PDF/A documents for your documents.
-
-.. code::
-
-    document_archiver --overwrite --document <id>
-
-This command will only attempt to create archived documents when no archived
-document exists yet, unless ``--overwrite`` is specified. If ``--document <id>``
-is specified, the archiver will only process that document.
-
-.. note::
-
-    This command essentially performs OCR on all your documents again,
-    according to your settings. If you run this with ``PAPERLESS_OCR_MODE=redo``,
-    it will potentially run for a very long time. You can cancel the command
-    at any time, since this command will skip already archived versions the next time
-    it is run.
-
-.. note::
-
-    Some documents will cause errors and cannot be converted into PDF/A documents,
-    such as encrypted PDF documents. The archiver will skip over these documents
-    each time it sees them.
-
-.. _utilities-encyption:
-
-Managing encryption
-===================
-
-Documents can be stored in Paperless using GnuPG encryption.
-
-.. danger::
-
-    Encryption is deprecated since paperless-ngx 0.9 and doesn't really provide any
-    additional security, since you have to store the passphrase in a configuration
-    file on the same system as the encrypted documents for paperless to work.
-    Furthermore, the entire text content of the documents is stored plain in the
-    database, even if your documents are encrypted. Filenames are not encrypted as
-    well.
-
-    Also, the web server provides transparent access to your encrypted documents.
-
-    Consider running paperless on an encrypted filesystem instead, which will then
-    at least provide security against physical hardware theft.
-
-
-Enabling encryption
--------------------
-
-Enabling encryption is no longer supported.
-
-
-Disabling encryption
---------------------
-
-Basic usage to disable encryption of your document store:
-
-(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)
-
-.. code::
-
-    decrypt_documents [--passphrase SECR3TP4SSPHRA$E]
diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md
new file mode 100644 (file)
index 0000000..cdc8aa7
--- /dev/null
@@ -0,0 +1,468 @@
+# Advanced Topics
+
+Paperless offers a couple features that automate certain tasks and make
+your life easier.
+
+## Matching tags, correspondents, document types, and storage paths {#matching}
+
+Paperless will compare the matching algorithms defined by every tag,
+correspondent, document type, and storage path in your database to see
+if they apply to the text in a document. In other words, if you define a
+tag called `Home Utility` that had a `match` property of `bc hydro` and
+a `matching_algorithm` of `literal`, Paperless will automatically tag
+your newly-consumed document with your `Home Utility` tag so long as the
+text `bc hydro` appears in the body of the document somewhere.
+
+The matching logic is quite powerful. It supports searching the text of
+your document with different algorithms, and as such, some
+experimentation may be necessary to get things right.
+
+In order to have a tag, correspondent, document type, or storage path
+assigned automatically to newly consumed documents, assign a match and
+matching algorithm using the web interface. These settings define when
+to assign tags, correspondents, document types, and storage paths to
+documents.
+
+The following algorithms are available:
+
+- **Any:** Looks for any occurrence of any word provided in match in
+  the PDF. If you define the match as `Bank1 Bank2`, it will match
+  documents containing either of these terms.
+- **All:** Requires that every word provided appears in the PDF,
+  albeit not in the order provided.
+- **Literal:** Matches only if the match appears exactly as provided
+  (i.e. preserve ordering) in the PDF.
+- **Regular expression:** Parses the match as a regular expression and
+  tries to find a match within the document.
+- **Fuzzy match:** I don't know. Look at the source.
+- **Auto:** Tries to automatically match new documents. This does not
+  require you to set a match. See the notes below.
+
+When using the _any_ or _all_ matching algorithms, you can search for
+terms that consist of multiple words by enclosing them in double quotes.
+For example, defining a match text of `"Bank of America" BofA` using the
+_any_ algorithm, will match documents that contain either "Bank of
+America" or "BofA", but will not match documents containing "Bank of
+South America".
+
+Then just save your tag, correspondent, document type, or storage path
+and run another document through the consumer. Once complete, you should
+see the newly-created document, automatically tagged with the
+appropriate data.
+
+### Automatic matching {#automatic_matching}
+
+Paperless-ngx comes with a new matching algorithm called _Auto_. This
+matching algorithm tries to assign tags, correspondents, document types,
+and storage paths to your documents based on how you have already
+assigned these on existing documents. It uses a neural network under the
+hood.
+
+If, for example, all your bank statements of your account 123 at the
+Bank of America are tagged with the tag "bofa*123" and the matching
+algorithm of this tag is set to \_Auto*, this neural network will examine
+your documents and automatically learn when to assign this tag.
+
+Paperless tries to hide much of the involved complexity with this
+approach. However, there are a couple caveats you need to keep in mind
+when using this feature:
+
+- Changes to your documents are not immediately reflected by the
+  matching algorithm. The neural network needs to be _trained_ on your
+  documents after changes. Paperless periodically (default: once each
+  hour) checks for changes and does this automatically for you.
+- The Auto matching algorithm only takes documents into account which
+  are NOT placed in your inbox (i.e. have any inbox tags assigned to
+  them). This ensures that the neural network only learns from
+  documents which you have correctly tagged before.
+- The matching algorithm can only work if there is a correlation
+  between the tag, correspondent, document type, or storage path and
+  the document itself. Your bank statements usually contain your bank
+  account number and the name of the bank, so this works reasonably
+  well, However, tags such as "TODO" cannot be automatically
+  assigned.
+- The matching algorithm needs a reasonable number of documents to
+  identify when to assign tags, correspondents, storage paths, and
+  types. If one out of a thousand documents has the correspondent
+  "Very obscure web shop I bought something five years ago", it will
+  probably not assign this correspondent automatically if you buy
+  something from them again. The more documents, the better.
+- Paperless also needs a reasonable amount of negative examples to
+  decide when not to assign a certain tag, correspondent, document
+  type, or storage path. This will usually be the case as you start
+  filling up paperless with documents. Example: If all your documents
+  are either from "Webshop" and "Bank", paperless will assign one
+  of these correspondents to ANY new document, if both are set to
+  automatic matching.
+
+## Hooking into the consumption process
+
+Sometimes you may want to do something arbitrary whenever a document is
+consumed. Rather than try to predict what you may want to do, Paperless
+lets you execute scripts of your own choosing just before or after a
+document is consumed using a couple simple hooks.
+
+Just write a script, put it somewhere that Paperless can read & execute,
+and then put the path to that script in `paperless.conf` or
+`docker-compose.env` with the variable name of either
+`PAPERLESS_PRE_CONSUME_SCRIPT` or `PAPERLESS_POST_CONSUME_SCRIPT`.
+
+!!! info
+
+    These scripts are executed in a **blocking** process, which means that
+    if a script takes a long time to run, it can significantly slow down
+    your document consumption flow. If you want things to run
+    asynchronously, you'll have to fork the process in your script and
+    exit.
+
+### Pre-consumption script
+
+Executed after the consumer sees a new document in the consumption
+folder, but before any processing of the document is performed. This
+script can access the following relevant environment variables set:
+
+- `DOCUMENT_SOURCE_PATH`
+
+A simple but common example for this would be creating a simple script
+like this:
+
+`/usr/local/bin/ocr-pdf`
+
+```bash
+#!/usr/bin/env bash
+pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
+```
+
+`/etc/paperless.conf`
+
+```bash
+...
+PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf"
+...
+```
+
+This will pass the path to the document about to be consumed to
+`/usr/local/bin/ocr-pdf`, which will in turn call
+[pdf2pdfocr.py](https://github.com/LeoFCardoso/pdf2pdfocr) on your
+document, which will then overwrite the file with an OCR'd version of
+the file and exit. At which point, the consumption process will begin
+with the newly modified file.
+
+The script's stdout and stderr will be logged line by line to the
+webserver log, along with the exit code of the script.
+
+### Post-consumption script {#post_consume_script}
+
+Executed after the consumer has successfully processed a document and
+has moved it into paperless. It receives the following environment
+variables:
+
+- `DOCUMENT_ID`
+- `DOCUMENT_FILE_NAME`
+- `DOCUMENT_CREATED`
+- `DOCUMENT_MODIFIED`
+- `DOCUMENT_ADDED`
+- `DOCUMENT_SOURCE_PATH`
+- `DOCUMENT_ARCHIVE_PATH`
+- `DOCUMENT_THUMBNAIL_PATH`
+- `DOCUMENT_DOWNLOAD_URL`
+- `DOCUMENT_THUMBNAIL_URL`
+- `DOCUMENT_CORRESPONDENT`
+- `DOCUMENT_TAGS`
+- `DOCUMENT_ORIGINAL_FILENAME`
+
+The script can be in any language, but for a simple shell script
+example, you can take a look at
+[post-consumption-example.sh](https://github.com/paperless-ngx/paperless-ngx/blob/main/scripts/post-consumption-example.sh)
+in this project.
+
+The post consumption script cannot cancel the consumption process.
+
+The script's stdout and stderr will be logged line by line to the
+webserver log, along with the exit code of the script.
+
+#### Docker
+
+Assumed you have
+`/home/foo/paperless-ngx/scripts/post-consumption-example.sh`.
+
+You can pass that script into the consumer container via a host mount in
+your `docker-compose.yml`.
+
+```bash
+...
+consumer:
+  ...
+  volumes:
+    ...
+    - /home/paperless-ngx/scripts:/path/in/container/scripts/
+...
+```
+
+Example (docker-compose.yml):
+`- /home/foo/paperless-ngx/scripts:/usr/src/paperless/scripts`
+
+which in turn requires the variable `PAPERLESS_POST_CONSUME_SCRIPT` in
+`docker-compose.env` to point to
+`/path/in/container/scripts/post-consumption-example.sh`.
+
+Example (docker-compose.env):
+`PAPERLESS_POST_CONSUME_SCRIPT=/usr/src/paperless/scripts/post-consumption-example.sh`
+
+Troubleshooting:
+
+- Monitor the docker-compose log
+  `cd ~/paperless-ngx; docker-compose logs -f`
+- Check your script's permission e.g. in case of permission error
+  `sudo chmod 755 post-consumption-example.sh`
+- Pipe your scripts's output to a log file e.g.
+  `echo "${DOCUMENT_ID}" | tee --append /usr/src/paperless/scripts/post-consumption-example.log`
+
+## File name handling {#file_name_handling}
+
+By default, paperless stores your documents in the media directory and
+renames them using the identifier which it has assigned to each
+document. You will end up getting files like `0000123.pdf` in your media
+directory. This isn't necessarily a bad thing, because you normally
+don't have to access these files manually. However, if you wish to name
+your files differently, you can do that by adjusting the
+`PAPERLESS_FILENAME_FORMAT` configuration option. Paperless adds the
+correct file extension e.g. `.pdf`, `.jpg` automatically.
+
+This variable allows you to configure the filename (folders are allowed)
+using placeholders. For example, configuring this to
+
+```bash
+PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title}
+```
+
+will create a directory structure as follows:
+
+```
+2019/
+  My bank/
+    Statement January.pdf
+    Statement February.pdf
+2020/
+  My bank/
+    Statement January.pdf
+    Letter.pdf
+    Letter_01.pdf
+  Shoe store/
+    My new shoes.pdf
+```
+
+!!! warning
+
+    Do not manually move your files in the media folder. Paperless remembers
+    the last filename a document was stored as. If you do rename a file,
+    paperless will report your files as missing and won't be able to find
+    them.
+
+Paperless provides the following placeholders within filenames:
+
+- `{asn}`: The archive serial number of the document, or "none".
+- `{correspondent}`: The name of the correspondent, or "none".
+- `{document_type}`: The name of the document type, or "none".
+- `{tag_list}`: A comma separated list of all tags assigned to the
+  document.
+- `{title}`: The title of the document.
+- `{created}`: The full date (ISO format) the document was created.
+- `{created_year}`: Year created only, formatted as the year with
+  century.
+- `{created_year_short}`: Year created only, formatted as the year
+  without century, zero padded.
+- `{created_month}`: Month created only (number 01-12).
+- `{created_month_name}`: Month created name, as per locale
+- `{created_month_name_short}`: Month created abbreviated name, as per
+  locale
+- `{created_day}`: Day created only (number 01-31).
+- `{added}`: The full date (ISO format) the document was added to
+  paperless.
+- `{added_year}`: Year added only.
+- `{added_year_short}`: Year added only, formatted as the year without
+  century, zero padded.
+- `{added_month}`: Month added only (number 01-12).
+- `{added_month_name}`: Month added name, as per locale
+- `{added_month_name_short}`: Month added abbreviated name, as per
+  locale
+- `{added_day}`: Day added only (number 01-31).
+
+Paperless will try to conserve the information from your database as
+much as possible. However, some characters that you can use in document
+titles and correspondent names (such as `: \ /` and a couple more) are
+not allowed in filenames and will be replaced with dashes.
+
+If paperless detects that two documents share the same filename,
+paperless will automatically append `_01`, `_02`, etc to the filename.
+This happens if all the placeholders in a filename evaluate to the same
+value.
+
+!!! tip
+
+    You can affect how empty placeholders are treated by changing the
+    following setting to [true]{.title-ref}.
+
+    ```
+    PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=True
+    ```
+
+    Doing this results in all empty placeholders resolving to "" instead
+    of "none" as stated above. Spaces before empty placeholders are
+    removed as well, empty directories are omitted.
+
+!!! tip
+
+    Paperless checks the filename of a document whenever it is saved.
+    Therefore, you need to update the filenames of your documents and move
+    them after altering this setting by invoking the
+    [`document renamer <utilities-renamer>`]().
+
+!!! warning
+
+    Make absolutely sure you get the spelling of the placeholders right, or
+    else paperless will use the default naming scheme instead.
+
+!!! caution
+
+    As of now, you could totally tell paperless to store your files anywhere
+    outside the media directory by setting
+
+    ```
+    PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}
+    ```
+
+    However, keep in mind that inside docker, if files get stored outside of
+    the predefined volumes, they will be lost after a restart of paperless.
+
+## Storage paths
+
+One of the best things in Paperless is that you can not only access the
+documents via the web interface, but also via the file system.
+
+When as single storage layout is not sufficient for your use case,
+storage paths come to the rescue. Storage paths allow you to configure
+more precisely where each document is stored in the file system.
+
+- Each storage path is a [PAPERLESS_FILENAME_FORMAT]{.title-ref} and
+  follows the rules described above
+- Each document is assigned a storage path using the matching
+  algorithms described above, but can be overwritten at any time
+
+For example, you could define the following two storage paths:
+
+1.  Normal communications are put into a folder structure sorted by
+    [year/correspondent]{.title-ref}
+2.  Communications with insurance companies are stored in a flat
+    structure with longer file names, but containing the full date of
+    the correspondence.
+
+```
+By Year = {created_year}/{correspondent}/{title}
+Insurances = Insurances/{correspondent}/{created_year}-{created_month}-{created_day} {title}
+```
+
+If you then map these storage paths to the documents, you might get the
+following result. For simplicity, [By Year]{.title-ref} defines the same
+structure as in the previous example above.
+
+```text
+2019/                                   # By Year
+   My bank/
+     Statement January.pdf
+     Statement February.pdf
+
+ Insurances/                           # Insurances
+   Healthcare 123/
+     2022-01-01 Statement January.pdf
+     2022-02-02 Letter.pdf
+     2022-02-03 Letter.pdf
+   Dental 456/
+     2021-12-01 New Conditions.pdf
+```
+
+!!! tip
+
+    Defining a storage path is optional. If no storage path is defined for a
+    document, the global [PAPERLESS_FILENAME_FORMAT]{.title-ref} is applied.
+
+!!! warning
+
+    If you adjust the format of an existing storage path, old documents
+    don't get relocated automatically. You need to run the
+    [document renamer](/administration#renamer) to
+    adjust their pathes.
+
+## Celery Monitoring {#celery-monitoring}
+
+The monitoring tool
+[Flower](https://flower.readthedocs.io/en/latest/index.html) can be used
+to view more detailed information about the health of the celery workers
+used for asynchronous tasks. This includes details on currently running,
+queued and completed tasks, timing and more. Flower can also be used
+with Prometheus, as it exports metrics. For details on its capabilities,
+refer to the Flower documentation.
+
+To configure Flower further, create a [flowerconfig.py]{.title-ref} and
+place it into the [src/paperless]{.title-ref} directory. For a Docker
+installation, you can use volumes to accomplish this:
+
+```yaml
+services:
+  # ...
+  webserver:
+    # ...
+    volumes:
+      - /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro
+```
+
+## Custom Container Initialization
+
+The Docker image includes the ability to run custom user scripts during
+startup. This could be utilized for installing additional tools or
+Python packages, for example.
+
+To utilize this, mount a folder containing your scripts to the custom
+initialization directory, [/custom-cont-init.d]{.title-ref} and place
+scripts you wish to run inside. For security, the folder must be owned
+by `root` and should have permissions of `a=rx`. Additionally, scripts
+must only be writable by `root`.
+
+Your scripts will be run directly before the webserver completes
+startup. Scripts will be run by the [root]{.title-ref} user.
+If you would like to switch users, the utility `gosu` is available and
+preferred over `sudo`.
+
+This is an advanced functionality with which you could break functionality
+or lose data. If you experience issues, please disable any custom scripts
+and try again before reporting an issue.
+
+For example, using Docker Compose:
+
+```yaml
+services:
+  # ...
+  webserver:
+    # ...
+    volumes:
+      - /path/to/my/scripts:/custom-cont-init.d:ro
+```
+
+## MySQL Caveats {#mysql-caveats}
+
+### Case Sensitivity
+
+The database interface does not provide a method to configure a MySQL
+database to be case sensitive. This would prevent a user from creating a
+tag `Name` and `NAME` as they are considered the same.
+
+Per Django documentation, to enable this requires manual intervention.
+To enable case sensetive tables, you can execute the following command
+against each table:
+
+`ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;`
+
+You can also set the default for new tables (this does NOT affect
+existing tables) with:
+
+`ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;`
diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst
deleted file mode 100644 (file)
index eda2ca2..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-***************
-Advanced topics
-***************
-
-Paperless offers a couple features that automate certain tasks and make your life
-easier.
-
-.. _advanced-matching:
-
-Matching tags, correspondents, document types, and storage paths
-################################################################
-
-Paperless will compare the matching algorithms defined by every tag, correspondent,
-document type, and storage path in your database to see if they apply to the text
-in a document. In other words, if you define a tag called ``Home Utility``
-that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of
-``literal``, Paperless will automatically tag your newly-consumed document with
-your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body
-of the document somewhere.
-
-The matching logic is quite powerful. It supports searching the text of your
-document with different algorithms, and as such, some experimentation may be
-necessary to get things right.
-
-In order to have a tag, correspondent, document type, or storage path assigned
-automatically to newly consumed documents, assign a match and matching algorithm
-using the web interface. These settings define when to assign tags, correspondents,
-document types, and storage paths to documents.
-
-The following algorithms are available:
-
-* **Any:** Looks for any occurrence of any word provided in match in the PDF.
-  If you define the match as ``Bank1 Bank2``, it will match documents containing
-  either of these terms.
-* **All:** Requires that every word provided appears in the PDF, albeit not in the
-  order provided.
-* **Literal:** Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF.
-* **Regular expression:** Parses the match as a regular expression and tries to
-  find a match within the document.
-* **Fuzzy match:** I don't know. Look at the source.
-* **Auto:** Tries to automatically match new documents. This does not require you
-  to set a match. See the notes below.
-
-When using the *any* or *all* matching algorithms, you can search for terms
-that consist of multiple words by enclosing them in double quotes. For example,
-defining a match text of ``"Bank of America" BofA`` using the *any* algorithm,
-will match documents that contain either "Bank of America" or "BofA", but will
-not match documents containing "Bank of South America".
-
-Then just save your tag, correspondent, document type, or storage path and run
-another document through the consumer.  Once complete, you should see the
-newly-created document, automatically tagged with the appropriate data.
-
-
-.. _advanced-automatic_matching:
-
-Automatic matching
-==================
-
-Paperless-ngx comes with a new matching algorithm called *Auto*. This matching
-algorithm tries to assign tags, correspondents, document types, and storage paths
-to your documents based on how you have already assigned these on existing documents.
-It uses a neural network under the hood.
-
-If, for example, all your bank statements of your account 123 at the Bank of
-America are tagged with the tag "bofa_123" and the matching algorithm of this
-tag is set to *Auto*, this neural network will examine your documents and
-automatically learn when to assign this tag.
-
-Paperless tries to hide much of the involved complexity with this approach.
-However, there are a couple caveats you need to keep in mind when using this
-feature:
-
-* Changes to your documents are not immediately reflected by the matching
-  algorithm. The neural network needs to be *trained* on your documents after
-  changes. Paperless periodically (default: once each hour) checks for changes
-  and does this automatically for you.
-* The Auto matching algorithm only takes documents into account which are NOT
-  placed in your inbox (i.e. have any inbox tags assigned to them). This ensures
-  that the neural network only learns from documents which you have correctly
-  tagged before.
-* The matching algorithm can only work if there is a correlation between the
-  tag, correspondent, document type, or storage path and the document itself.
-  Your bank statements usually contain your bank account number and the name
-  of the bank, so this works reasonably well, However, tags such as "TODO"
-  cannot be automatically assigned.
-* The matching algorithm needs a reasonable number of documents to identify when
-  to assign tags, correspondents, storage paths, and types. If one out of a
-  thousand documents has the correspondent "Very obscure web shop I bought
-  something five years ago", it will probably not assign this correspondent
-  automatically if you buy something from them again. The more documents, the better.
-* Paperless also needs a reasonable amount of negative examples to decide when
-  not to assign a certain tag, correspondent, document type, or storage path. This will
-  usually be the case as you start filling up paperless with documents.
-  Example: If all your documents are either from "Webshop" and "Bank", paperless
-  will assign one of these correspondents to ANY new document, if both are set
-  to automatic matching.
-
-Hooking into the consumption process
-####################################
-
-Sometimes you may want to do something arbitrary whenever a document is
-consumed.  Rather than try to predict what you may want to do, Paperless lets
-you execute scripts of your own choosing just before or after a document is
-consumed using a couple simple hooks.
-
-Just write a script, put it somewhere that Paperless can read & execute, and
-then put the path to that script in ``paperless.conf`` or ``docker-compose.env`` with the variable name
-of either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or
-``PAPERLESS_POST_CONSUME_SCRIPT``.
-
-.. important::
-
-    These scripts are executed in a **blocking** process, which means that if
-    a script takes a long time to run, it can significantly slow down your
-    document consumption flow.  If you want things to run asynchronously,
-    you'll have to fork the process in your script and exit.
-
-
-Pre-consumption script
-======================
-
-Executed after the consumer sees a new document in the consumption folder, but
-before any processing of the document is performed. This script can access the
-following relevant environment variables set:
-
-* ``DOCUMENT_SOURCE_PATH``
-
-A simple but common example for this would be creating a simple script like
-this:
-
-``/usr/local/bin/ocr-pdf``
-
-.. code:: bash
-
-    #!/usr/bin/env bash
-    pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
-
-``/etc/paperless.conf``
-
-.. code:: bash
-
-    ...
-    PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf"
-    ...
-
-This will pass the path to the document about to be consumed to ``/usr/local/bin/ocr-pdf``,
-which will in turn call `pdf2pdfocr.py`_ on your document, which will then
-overwrite the file with an OCR'd version of the file and exit.  At which point,
-the consumption process will begin with the newly modified file.
-
-.. _pdf2pdfocr.py: https://github.com/LeoFCardoso/pdf2pdfocr
-
-.. _advanced-post_consume_script:
-
-Post-consumption script
-=======================
-
-Executed after the consumer has successfully processed a document and has moved it
-into paperless. It receives the following environment variables:
-
-* ``DOCUMENT_ID``
-* ``DOCUMENT_FILE_NAME``
-* ``DOCUMENT_CREATED``
-* ``DOCUMENT_MODIFIED``
-* ``DOCUMENT_ADDED``
-* ``DOCUMENT_SOURCE_PATH``
-* ``DOCUMENT_ARCHIVE_PATH``
-* ``DOCUMENT_THUMBNAIL_PATH``
-* ``DOCUMENT_DOWNLOAD_URL``
-* ``DOCUMENT_THUMBNAIL_URL``
-* ``DOCUMENT_CORRESPONDENT``
-* ``DOCUMENT_TAGS``
-* ``DOCUMENT_ORIGINAL_FILENAME``
-
-The script can be in any language, but for a simple shell script
-example, you can take a look at `post-consumption-example.sh`_ in this project.
-
-The post consumption script cannot cancel the consumption process.
-
-Docker
-------
-Assumed you have ``/home/foo/paperless-ngx/scripts/post-consumption-example.sh``.
-
-You can pass that script into the consumer container via a host mount in your ``docker-compose.yml``.
-
-.. code:: bash
-
-  ...
-  consumer:
-    ...
-    volumes:
-      ...
-      - /home/paperless-ngx/scripts:/path/in/container/scripts/
-  ...
-
-Example (docker-compose.yml): ``- /home/foo/paperless-ngx/scripts:/usr/src/paperless/scripts``
-
-which in turn requires the variable ``PAPERLESS_POST_CONSUME_SCRIPT`` in ``docker-compose.env``  to point to ``/path/in/container/scripts/post-consumption-example.sh``.
-
-Example (docker-compose.env): ``PAPERLESS_POST_CONSUME_SCRIPT=/usr/src/paperless/scripts/post-consumption-example.sh``
-
-Troubleshooting:
-
-- Monitor the docker-compose log ``cd ~/paperless-ngx; docker-compose logs -f``
-- Check your script's permission e.g. in case of permission error ``sudo chmod 755 post-consumption-example.sh``
-- Pipe your scripts's output to a log file e.g. ``echo "${DOCUMENT_ID}" | tee --append /usr/src/paperless/scripts/post-consumption-example.log``
-
-.. _post-consumption-example.sh: https://github.com/paperless-ngx/paperless-ngx/blob/main/scripts/post-consumption-example.sh
-
-.. _advanced-file_name_handling:
-
-File name handling
-##################
-
-By default, paperless stores your documents in the media directory and renames them
-using the identifier which it has assigned to each document. You will end up getting
-files like ``0000123.pdf`` in your media directory. This isn't necessarily a bad
-thing, because you normally don't have to access these files manually. However, if
-you wish to name your files differently, you can do that by adjusting the
-``PAPERLESS_FILENAME_FORMAT`` configuration option. Paperless adds the correct
-file extension e.g. ``.pdf``, ``.jpg`` automatically.
-
-This variable allows you to configure the filename (folders are allowed) using
-placeholders. For example, configuring this to
-
-.. code:: bash
-
-    PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title}
-
-will create a directory structure as follows:
-
-.. code::
-
-    2019/
-      My bank/
-        Statement January.pdf
-        Statement February.pdf
-    2020/
-      My bank/
-        Statement January.pdf
-        Letter.pdf
-        Letter_01.pdf
-      Shoe store/
-        My new shoes.pdf
-
-.. danger::
-
-    Do not manually move your files in the media folder. Paperless remembers the
-    last filename a document was stored as. If you do rename a file, paperless will
-    report your files as missing and won't be able to find them.
-
-Paperless provides the following placeholders within filenames:
-
-* ``{asn}``: The archive serial number of the document, or "none".
-* ``{correspondent}``: The name of the correspondent, or "none".
-* ``{document_type}``: The name of the document type, or "none".
-* ``{tag_list}``: A comma separated list of all tags assigned to the document.
-* ``{title}``: The title of the document.
-* ``{created}``: The full date (ISO format) the document was created.
-* ``{created_year}``: Year created only, formatted as the year with century.
-* ``{created_year_short}``: Year created only, formatted as the year without century, zero padded.
-* ``{created_month}``: Month created only (number 01-12).
-* ``{created_month_name}``: Month created name, as per locale
-* ``{created_month_name_short}``: Month created abbreviated name, as per locale
-* ``{created_day}``: Day created only (number 01-31).
-* ``{added}``: The full date (ISO format) the document was added to paperless.
-* ``{added_year}``: Year added only.
-* ``{added_year_short}``: Year added only, formatted as the year without century, zero padded.
-* ``{added_month}``: Month added only (number 01-12).
-* ``{added_month_name}``: Month added name, as per locale
-* ``{added_month_name_short}``: Month added abbreviated name, as per locale
-* ``{added_day}``: Day added only (number 01-31).
-
-
-Paperless will try to conserve the information from your database as much as possible.
-However, some characters that you can use in document titles and correspondent names (such
-as ``: \ /`` and a couple more) are not allowed in filenames and will be replaced with dashes.
-
-If paperless detects that two documents share the same filename, paperless will automatically
-append ``_01``, ``_02``, etc to the filename. This happens if all the placeholders in a filename
-evaluate to the same value.
-
-.. hint::
-    You can affect how empty placeholders are treated by changing the following setting to
-    `true`.
-
-    .. code::
-
-        PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=True
-
-    Doing this results in all empty placeholders resolving to "" instead of "none" as stated above.
-    Spaces before empty placeholders are removed as well, empty directories are omitted.
-
-.. hint::
-
-    Paperless checks the filename of a document whenever it is saved. Therefore,
-    you need to update the filenames of your documents and move them after altering
-    this setting by invoking the :ref:`document renamer <utilities-renamer>`.
-
-.. warning::
-
-    Make absolutely sure you get the spelling of the placeholders right, or else
-    paperless will use the default naming scheme instead.
-
-.. caution::
-
-    As of now, you could totally tell paperless to store your files anywhere outside
-    the media directory by setting
-
-    .. code::
-
-        PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}
-
-    However, keep in mind that inside docker, if files get stored outside of the
-    predefined volumes, they will be lost after a restart of paperless.
-
-
-Storage paths
-#############
-
-One of the best things in Paperless is that you can not only access the documents via the
-web interface, but also via the file system.
-
-When as single storage layout is not sufficient for your use case, storage paths come to
-the rescue. Storage paths allow you to configure more precisely where each document is stored
-in the file system.
-
-- Each storage path is a `PAPERLESS_FILENAME_FORMAT` and follows the rules described above
-- Each document is assigned a storage path using the matching algorithms described above, but
-  can be overwritten at any time
-
-For example, you could define the following two storage paths:
-
-1. Normal communications are put into a folder structure sorted by `year/correspondent`
-2. Communications with insurance companies are stored in a flat structure with longer file names,
-   but containing the full date of the correspondence.
-
-.. code::
-
-    By Year = {created_year}/{correspondent}/{title}
-    Insurances = Insurances/{correspondent}/{created_year}-{created_month}-{created_day} {title}
-
-
-If you then map these storage paths to the documents, you might get the following result.
-For simplicity, `By Year` defines the same structure as in the previous example above.
-
-.. code:: text
-
-   2019/                                   # By Year
-      My bank/
-        Statement January.pdf
-        Statement February.pdf
-
-    Insurances/                           # Insurances
-      Healthcare 123/
-        2022-01-01 Statement January.pdf
-        2022-02-02 Letter.pdf
-        2022-02-03 Letter.pdf
-      Dental 456/
-        2021-12-01 New Conditions.pdf
-
-
-.. hint::
-
-    Defining a storage path is optional. If no storage path is defined for a document, the global
-    `PAPERLESS_FILENAME_FORMAT` is applied.
-
-.. caution::
-
-    If you adjust the format of an existing storage path, old documents don't get relocated automatically.
-    You need to run the :ref:`document renamer <utilities-renamer>` to adjust their pathes.
-
-.. _advanced-celery-monitoring:
-
-Celery Monitoring
-#################
-
-The monitoring tool `Flower <https://flower.readthedocs.io/en/latest/index.html>`_ can be used to view more
-detailed information about the health of the celery workers used for asynchronous tasks.  This includes details
-on currently running, queued and completed tasks, timing and more.  Flower can also be used with Prometheus, as it
-exports metrics.  For details on its capabilities, refer to the Flower documentation.
-
-To configure Flower further, create a `flowerconfig.py` and place it into the `src/paperless` directory.  For
-a Docker installation, you can use volumes to accomplish this:
-
-.. code:: yaml
-
-    services:
-      # ...
-      webserver:
-        # ...
-        volumes:
-          - /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro
-
-Custom Container Initialization
-###############################
-
-The Docker image includes the ability to run custom user scripts during startup.  This could be
-utilized for installing additional tools or Python packages, for example.
-
-To utilize this, mount a folder containing your scripts to the custom initialization directory, `/custom-cont-init.d`
-and place scripts you wish to run inside.  For security, the folder and its contents must be owned by `root`.
-Additionally, scripts must only be writable by `root`.
-
-Your scripts will be run directly before the webserver completes startup.  Scripts will be run by the `root` user.
-This is an advanced functionality with which you could break functionality or lose data.
-
-For example, using Docker Compose:
-
-
-.. code:: yaml
-
-    services:
-      # ...
-      webserver:
-        # ...
-        volumes:
-          - /path/to/my/scripts:/custom-cont-init.d:ro
diff --git a/docs/api.md b/docs/api.md
new file mode 100644 (file)
index 0000000..b6e3325
--- /dev/null
@@ -0,0 +1,318 @@
+# The REST API
+
+Paperless makes use of the [Django REST
+Framework](http://django-rest-framework.org/) standard API interface. It
+provides a browsable API for most of its endpoints, which you can
+inspect at `http://<paperless-host>:<port>/api/`. This also documents
+most of the available filters and ordering fields.
+
+The API provides 5 main endpoints:
+
+- `/api/documents/`: Full CRUD support, except POSTing new documents.
+  See below.
+- `/api/correspondents/`: Full CRUD support.
+- `/api/document_types/`: Full CRUD support.
+- `/api/logs/`: Read-Only.
+- `/api/tags/`: Full CRUD support.
+- `/api/mail_accounts/`: Full CRUD support.
+- `/api/mail_rules/`: Full CRUD support.
+
+All of these endpoints except for the logging endpoint allow you to
+fetch, edit and delete individual objects by appending their primary key
+to the path, for example `/api/documents/454/`.
+
+The objects served by the document endpoint contain the following
+fields:
+
+- `id`: ID of the document. Read-only.
+- `title`: Title of the document.
+- `content`: Plain text content of the document.
+- `tags`: List of IDs of tags assigned to this document, or empty
+  list.
+- `document_type`: Document type of this document, or null.
+- `correspondent`: Correspondent of this document or null.
+- `created`: The date time at which this document was created.
+- `created_date`: The date (YYYY-MM-DD) at which this document was
+  created. Optional. If also passed with created, this is ignored.
+- `modified`: The date at which this document was last edited in
+  paperless. Read-only.
+- `added`: The date at which this document was added to paperless.
+  Read-only.
+- `archive_serial_number`: The identifier of this document in a
+  physical document archive.
+- `original_file_name`: Verbose filename of the original document.
+  Read-only.
+- `archived_file_name`: Verbose filename of the archived document.
+  Read-only. Null if no archived document is available.
+
+## Downloading documents
+
+In addition to that, the document endpoint offers these additional
+actions on individual documents:
+
+- `/api/documents/<pk>/download/`: Download the document.
+- `/api/documents/<pk>/preview/`: Display the document inline, without
+  downloading it.
+- `/api/documents/<pk>/thumb/`: Download the PNG thumbnail of a
+  document.
+
+Paperless generates archived PDF/A documents from consumed files and
+stores both the original files as well as the archived files. By
+default, the endpoints for previews and downloads serve the archived
+file, if it is available. Otherwise, the original file is served. Some
+document cannot be archived.
+
+The endpoints correctly serve the response header fields
+`Content-Disposition` and `Content-Type` to indicate the filename for
+download and the type of content of the document.
+
+In order to download or preview the original document when an archived
+document is available, supply the query parameter `original=true`.
+
+!!! tip
+
+    Paperless used to provide these functionality at `/fetch/<pk>/preview`,
+    `/fetch/<pk>/thumb` and `/fetch/<pk>/doc`. Redirects to the new URLs are
+    in place. However, if you use these old URLs to access documents, you
+    should update your app or script to use the new URLs.
+
+## Getting document metadata
+
+The api also has an endpoint to retrieve read-only metadata about
+specific documents. this information is not served along with the
+document objects, since it requires reading files and would therefore
+slow down document lists considerably.
+
+Access the metadata of a document with an ID `id` at
+`/api/documents/<id>/metadata/`.
+
+The endpoint reports the following data:
+
+- `original_checksum`: MD5 checksum of the original document.
+- `original_size`: Size of the original document, in bytes.
+- `original_mime_type`: Mime type of the original document.
+- `media_filename`: Current filename of the document, under which it
+  is stored inside the media directory.
+- `has_archive_version`: True, if this document is archived, false
+  otherwise.
+- `original_metadata`: A list of metadata associated with the original
+  document. See below.
+- `archive_checksum`: MD5 checksum of the archived document, or null.
+- `archive_size`: Size of the archived document in bytes, or null.
+- `archive_metadata`: Metadata associated with the archived document,
+  or null. See below.
+
+File metadata is reported as a list of objects in the following form:
+
+```json
+[
+  {
+    "namespace": "http://ns.adobe.com/pdf/1.3/",
+    "prefix": "pdf",
+    "key": "Producer",
+    "value": "SparklePDF, Fancy edition"
+  }
+]
+```
+
+`namespace` and `prefix` can be null. The actual metadata reported
+depends on the file type and the metadata available in that specific
+document. Paperless only reports PDF metadata at this point.
+
+## Authorization
+
+The REST api provides three different forms of authentication.
+
+1.  Basic authentication
+
+    Authorize by providing a HTTP header in the form
+
+    ```
+    Authorization: Basic <credentials>
+    ```
+
+    where `credentials` is a base64-encoded string of
+    `<username>:<password>`
+
+2.  Session authentication
+
+    When you're logged into paperless in your browser, you're
+    automatically logged into the API as well and don't need to provide
+    any authorization headers.
+
+3.  Token authentication
+
+    Paperless also offers an endpoint to acquire authentication tokens.
+
+    POST a username and password as a form or json string to
+    `/api/token/` and paperless will respond with a token, if the login
+    data is correct. This token can be used to authenticate other
+    requests with the following HTTP header:
+
+    ```
+    Authorization: Token <token>
+    ```
+
+    Tokens can be managed and revoked in the paperless admin.
+
+## Searching for documents
+
+Full text searching is available on the `/api/documents/` endpoint. Two
+specific query parameters cause the API to return full text search
+results:
+
+- `/api/documents/?query=your%20search%20query`: Search for a document
+  using a full text query. For details on the syntax, see [Basic Usage - Searching](usage#basic-usage_searching).
+- `/api/documents/?more_like=1234`: Search for documents similar to
+  the document with id 1234.
+
+Pagination works exactly the same as it does for normal requests on this
+endpoint.
+
+Certain limitations apply to full text queries:
+
+- Results are always sorted by search score. The results matching the
+  query best will show up first.
+- Only a small subset of filtering parameters are supported.
+
+Furthermore, each returned document has an additional `__search_hit__`
+attribute with various information about the search results:
+
+```
+{
+    "count": 31,
+    "next": "http://localhost:8000/api/documents/?page=2&query=test",
+    "previous": null,
+    "results": [
+
+        ...
+
+        {
+            "id": 123,
+            "title": "title",
+            "content": "content",
+
+            ...
+
+            "__search_hit__": {
+                "score": 0.343,
+                "highlights": "text <span class="match">Test</span> text",
+                "rank": 23
+            }
+        },
+
+        ...
+
+    ]
+}
+```
+
+- `score` is an indication how well this document matches the query
+  relative to the other search results.
+- `highlights` is an excerpt from the document content and highlights
+  the search terms with `<span>` tags as shown above.
+- `rank` is the index of the search results. The first result will
+  have rank 0.
+
+### `/api/search/autocomplete/`
+
+Get auto completions for a partial search term.
+
+Query parameters:
+
+- `term`: The incomplete term.
+- `limit`: Amount of results. Defaults to 10.
+
+Results returned by the endpoint are ordered by importance of the term
+in the document index. The first result is the term that has the highest
+Tf/Idf score in the index.
+
+```json
+["term1", "term3", "term6", "term4"]
+```
+
+## POSTing documents {#file-uploads}
+
+The API provides a special endpoint for file uploads:
+
+`/api/documents/post_document/`
+
+POST a multipart form to this endpoint, where the form field `document`
+contains the document that you want to upload to paperless. The filename
+is sanitized and then used to store the document in a temporary
+directory, and the consumer will be instructed to consume the document
+from there.
+
+The endpoint supports the following optional form fields:
+
+- `title`: Specify a title that the consumer should use for the
+  document.
+- `created`: Specify a DateTime where the document was created (e.g.
+  "2016-04-19" or "2016-04-19 06:15:00+02:00").
+- `correspondent`: Specify the ID of a correspondent that the consumer
+  should use for the document.
+- `document_type`: Similar to correspondent.
+- `tags`: Similar to correspondent. Specify this multiple times to
+  have multiple tags added to the document.
+
+The endpoint will immediately return "OK" if the document consumption
+process was started successfully. No additional status information about
+the consumption process itself is available, since that happens in a
+different process.
+
+## API Versioning
+
+The REST API is versioned since Paperless-ngx 1.3.0.
+
+- Versioning ensures that changes to the API don't break older
+  clients.
+- Clients specify the specific version of the API they wish to use
+  with every request and Paperless will handle the request using the
+  specified API version.
+- Even if the underlying data model changes, older API versions will
+  always serve compatible data.
+- If no version is specified, Paperless will serve version 1 to ensure
+  compatibility with older clients that do not request a specific API
+  version.
+
+API versions are specified by submitting an additional HTTP `Accept`
+header with every request:
+
+```
+Accept: application/json; version=6
+```
+
+If an invalid version is specified, Paperless 1.3.0 will respond with
+"406 Not Acceptable" and an error message in the body. Earlier
+versions of Paperless will serve API version 1 regardless of whether a
+version is specified via the `Accept` header.
+
+If a client wishes to verify whether it is compatible with any given
+server, the following procedure should be performed:
+
+1.  Perform an _authenticated_ request against any API endpoint. If the
+    server is on version 1.3.0 or newer, the server will add two custom
+    headers to the response:
+
+    ```
+    X-Api-Version: 2
+    X-Version: 1.3.0
+    ```
+
+2.  Determine whether the client is compatible with this server based on
+    the presence/absence of these headers and their values if present.
+
+### API Changelog
+
+#### Version 1
+
+Initial API version.
+
+#### Version 2
+
+- Added field `Tag.color`. This read/write string field contains a hex
+  color such as `#a6cee3`.
+- Added read-only field `Tag.text_color`. This field contains the text
+  color to use for a specific tag, which is either black or white
+  depending on the brightness of `Tag.color`.
+- Removed field `Tag.colour`.
diff --git a/docs/api.rst b/docs/api.rst
deleted file mode 100644 (file)
index 1e70b19..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-
-************
-The REST API
-************
-
-
-Paperless makes use of the `Django REST Framework`_ standard API interface.
-It provides a browsable API for most of its endpoints, which you can inspect
-at ``http://<paperless-host>:<port>/api/``. This also documents most of the
-available filters and ordering fields.
-
-.. _Django REST Framework: http://django-rest-framework.org/
-
-The API provides 5 main endpoints:
-
-*   ``/api/documents/``: Full CRUD support, except POSTing new documents. See below.
-*   ``/api/correspondents/``: Full CRUD support.
-*   ``/api/document_types/``: Full CRUD support.
-*   ``/api/logs/``: Read-Only.
-*   ``/api/tags/``: Full CRUD support.
-
-All of these endpoints except for the logging endpoint
-allow you to fetch, edit and delete individual objects
-by appending their primary key to the path, for example ``/api/documents/454/``.
-
-The objects served by the document endpoint contain the following fields:
-
-*   ``id``: ID of the document. Read-only.
-*   ``title``: Title of the document.
-*   ``content``: Plain text content of the document.
-*   ``tags``: List of IDs of tags assigned to this document, or empty list.
-*   ``document_type``: Document type of this document, or null.
-*   ``correspondent``:  Correspondent of this document or null.
-*   ``created``: The date time at which this document was created.
-*   ``created_date``: The date (YYYY-MM-DD) at which this document was created. Optional. If also passed with created, this is ignored.
-*   ``modified``: The date at which this document was last edited in paperless. Read-only.
-*   ``added``: The date at which this document was added to paperless. Read-only.
-*   ``archive_serial_number``: The identifier of this document in a physical document archive.
-*   ``original_file_name``: Verbose filename of the original document. Read-only.
-*   ``archived_file_name``: Verbose filename of the archived document. Read-only. Null if no archived document is available.
-
-
-Downloading documents
-#####################
-
-In addition to that, the document endpoint offers these additional actions on
-individual documents:
-
-*   ``/api/documents/<pk>/download/``: Download the document.
-*   ``/api/documents/<pk>/preview/``: Display the document inline,
-    without downloading it.
-*   ``/api/documents/<pk>/thumb/``: Download the PNG thumbnail of a document.
-
-Paperless generates archived PDF/A documents from consumed files and stores both
-the original files as well as the archived files. By default, the endpoints
-for previews and downloads serve the archived file, if it is available.
-Otherwise, the original file is served.
-Some document cannot be archived.
-
-The endpoints correctly serve the response header fields ``Content-Disposition``
-and ``Content-Type`` to indicate the filename for download and the type of content of
-the document.
-
-In order to download or preview the original document when an archived document is available,
-supply the query parameter ``original=true``.
-
-.. hint::
-
-    Paperless used to provide these functionality at ``/fetch/<pk>/preview``,
-    ``/fetch/<pk>/thumb`` and ``/fetch/<pk>/doc``. Redirects to the new URLs
-    are in place. However, if you use these old URLs to access documents, you
-    should update your app or script to use the new URLs.
-
-
-Getting document metadata
-#########################
-
-The api also has an endpoint to retrieve read-only metadata about specific documents. this
-information is not served along with the document objects, since it requires reading
-files and would therefore slow down document lists considerably.
-
-Access the metadata of a document with an ID ``id`` at ``/api/documents/<id>/metadata/``.
-
-The endpoint reports the following data:
-
-*   ``original_checksum``: MD5 checksum of the original document.
-*   ``original_size``: Size of the original document, in bytes.
-*   ``original_mime_type``: Mime type of the original document.
-*   ``media_filename``: Current filename of the document, under which it is stored inside the media directory.
-*   ``has_archive_version``: True, if this document is archived, false otherwise.
-*   ``original_metadata``: A list of metadata associated with the original document. See below.
-*   ``archive_checksum``: MD5 checksum of the archived document, or null.
-*   ``archive_size``: Size of the archived document in bytes, or null.
-*   ``archive_metadata``: Metadata associated with the archived document, or null. See below.
-
-File metadata is reported as a list of objects in the following form:
-
-.. code:: json
-
-    [
-        {
-            "namespace": "http://ns.adobe.com/pdf/1.3/",
-            "prefix": "pdf",
-            "key": "Producer",
-            "value": "SparklePDF, Fancy edition"
-        },
-    ]
-
-``namespace`` and ``prefix`` can be null. The actual metadata reported depends on the file type and the metadata
-available in that specific document. Paperless only reports PDF metadata at this point.
-
-Authorization
-#############
-
-The REST api provides three different forms of authentication.
-
-1.  Basic authentication
-
-    Authorize by providing a HTTP header in the form
-
-    .. code::
-
-        Authorization: Basic <credentials>
-
-    where ``credentials`` is a base64-encoded string of ``<username>:<password>``
-
-2.  Session authentication
-
-    When you're logged into paperless in your browser, you're automatically
-    logged into the API as well and don't need to provide any authorization
-    headers.
-
-3.  Token authentication
-
-    Paperless also offers an endpoint to acquire authentication tokens.
-
-    POST a username and password as a form or json string to ``/api/token/``
-    and paperless will respond with a token, if the login data is correct.
-    This token can be used to authenticate other requests with the
-    following HTTP header:
-
-    .. code::
-
-        Authorization: Token <token>
-
-    Tokens can be managed and revoked in the paperless admin.
-
-Searching for documents
-#######################
-
-Full text searching is available on the ``/api/documents/`` endpoint. Two specific
-query parameters cause the API to return full text search results:
-
-*   ``/api/documents/?query=your%20search%20query``: Search for a document using a full text query.
-    For details on the syntax, see :ref:`basic-usage_searching`.
-
-*   ``/api/documents/?more_like=1234``: Search for documents similar to the document with id 1234.
-
-Pagination works exactly the same as it does for normal requests on this endpoint.
-
-Certain limitations apply to full text queries:
-
-*   Results are always sorted by search score. The results matching the query best will show up first.
-
-*   Only a small subset of filtering parameters are supported.
-
-Furthermore, each returned document has an additional ``__search_hit__`` attribute with various information
-about the search results:
-
-.. code::
-
-    {
-        "count": 31,
-        "next": "http://localhost:8000/api/documents/?page=2&query=test",
-        "previous": null,
-        "results": [
-
-            ...
-
-            {
-                "id": 123,
-                "title": "title",
-                "content": "content",
-
-                ...
-
-                "__search_hit__": {
-                    "score": 0.343,
-                    "highlights": "text <span class=\"match\">Test</span> text",
-                    "rank": 23
-                }
-            },
-
-            ...
-
-        ]
-    }
-
-*   ``score`` is an indication how well this document matches the query relative to the other search results.
-*   ``highlights`` is an excerpt from the document content and highlights the search terms with ``<span>`` tags as shown above.
-*   ``rank`` is the index of the search results. The first result will have rank 0.
-
-``/api/search/autocomplete/``
-=============================
-
-Get auto completions for a partial search term.
-
-Query parameters:
-
-*   ``term``: The incomplete term.
-*   ``limit``: Amount of results. Defaults to 10.
-
-Results returned by the endpoint are ordered by importance of the term in the
-document index. The first result is the term that has the highest Tf/Idf score
-in the index.
-
-.. code:: json
-
-    [
-        "term1",
-        "term3",
-        "term6",
-        "term4"
-    ]
-
-
-.. _api-file_uploads:
-
-POSTing documents
-#################
-
-The API provides a special endpoint for file uploads:
-
-``/api/documents/post_document/``
-
-POST a multipart form to this endpoint, where the form field ``document`` contains
-the document that you want to upload to paperless. The filename is sanitized and
-then used to store the document in a temporary directory, and the consumer will
-be instructed to consume the document from there.
-
-The endpoint supports the following optional form fields:
-
-*   ``title``: Specify a title that the consumer should use for the document.
-*   ``created``: Specify a DateTime where the document was created (e.g. "2016-04-19" or "2016-04-19 06:15:00+02:00").
-*   ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
-*   ``document_type``: Similar to correspondent.
-*   ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
-    to the document.
-
-
-The endpoint will immediately return "OK" if the document consumption process
-was started successfully. No additional status information about the consumption
-process itself is available, since that happens in a different process.
-
-
-.. _api-versioning:
-
-API Versioning
-##############
-
-The REST API is versioned since Paperless-ngx 1.3.0.
-
-* Versioning ensures that changes to the API don't break older clients.
-* Clients specify the specific version of the API they wish to use with every request and Paperless will handle the request using the specified API version.
-* Even if the underlying data model changes, older API versions will always serve compatible data.
-* If no version is specified, Paperless will serve version 1 to ensure compatibility with older clients that do not request a specific API version.
-
-API versions are specified by submitting an additional HTTP ``Accept`` header with every request:
-
-.. code::
-
-    Accept: application/json; version=6
-
-If an invalid version is specified, Paperless 1.3.0 will respond with "406 Not Acceptable" and an error message in the body.
-Earlier versions of Paperless will serve API version 1 regardless of whether a version is specified via the ``Accept`` header.
-
-If a client wishes to verify whether it is compatible with any given server, the following procedure should be performed:
-
-1.  Perform an *authenticated* request against any API endpoint. If the server is on version 1.3.0 or newer, the server will
-    add two custom headers to the response:
-
-    .. code::
-
-        X-Api-Version: 2
-        X-Version: 1.3.0
-
-2.  Determine whether the client is compatible with this server based on the presence/absence of these headers and their values if present.
-
-
-API Changelog
-=============
-
-Version 1
----------
-
-Initial API version.
-
-Version 2
----------
-
-* Added field ``Tag.color``. This read/write string field contains a hex color such as ``#a6cee3``.
-* Added read-only field ``Tag.text_color``. This field contains the text color to use for a specific tag, which is either black or white depending on the brightness of ``Tag.color``.
-* Removed field ``Tag.colour``.
similarity index 100%
rename from docs/_static/.keep
rename to docs/assets/.keep
diff --git a/docs/assets/extra.css b/docs/assets/extra.css
new file mode 100644 (file)
index 0000000..da572b7
--- /dev/null
@@ -0,0 +1,36 @@
+:root > * {
+    --md-primary-fg-color: #17541f;
+    --md-primary-fg-color--dark: #17541f;
+    --md-primary-fg-color--light: #17541f;
+    --md-accent-fg-color: #2b8a38;
+    --md-typeset-a-color: #21652a;
+}
+
+[data-md-color-scheme="slate"] {
+    --md-hue: 222;
+}
+
+@media (min-width: 400px) {
+    .grid-left {
+        width: 33%;
+        float: left;
+    }
+    .grid-right {
+        width: 62%;
+        margin-left: 4%;
+        float: left;
+    }
+}
+
+.grid-left > p {
+    margin-bottom: 2rem;
+}
+
+
+.grid-right p {
+    margin: 0;
+}
+
+.index-callout {
+    margin-right: .5rem;
+}
diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png
new file mode 100644 (file)
index 0000000..1001386
Binary files /dev/null and b/docs/assets/favicon.png differ
diff --git a/docs/assets/logo.svg b/docs/assets/logo.svg
new file mode 100644 (file)
index 0000000..347b1e7
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:#FFFFFF;}
+</style>
+<path class="st0" d="M299,891.7c-4.2-19.8-12.5-59.6-13.6-59.6c-176.7-105.7-155.8-288.7-97.3-393.4
+       c12.5,131.8,245.8,222.8,109.8,383.9c-1.1,2,6.2,27.2,12.5,50.2c27.2-46,68-101.4,65.8-106.7C208.9,358.2,731.9,326.9,840.6,73.7
+       c49.1,244.8-25.1,623.5-445.5,719.7c-2,1.1-76.3,131.8-79.5,132.9c0-2-31.4-1.1-27.2-11.5C290.7,908.4,294.8,900.1,299,891.7
+       L299,891.7z M293.8,793.4c53.3-61.8-9.4-167.4-47.1-201.9C310.5,701.3,306.3,765.1,293.8,793.4L293.8,793.4z"/>
+</svg>
diff --git a/docs/assets/logo_full_black.svg b/docs/assets/logo_full_black.svg
new file mode 100644 (file)
index 0000000..bf0d4a4
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 2962.2 860.2" style="enable-background:new 0 0 2962.2 860.2;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:#17541F;stroke:#000000;stroke-miterlimit:10;}
+</style>
+<path d="M1055.6,639.7v-20.6c-18,20-43.1,30.1-75.4,30.1c-22.4,0-42.8-5.8-61-17.5c-18.3-11.7-32.5-27.8-42.9-48.3
+       c-10.3-20.5-15.5-43.3-15.5-68.4c0-25.1,5.2-48,15.5-68.5s24.6-36.6,42.9-48.3s38.6-17.5,61-17.5c32.3,0,57.5,10,75.4,30.1v-20.6
+       h85.3v249.6L1055.6,639.7L1055.6,639.7z M1059.1,514.9c0-17.4-5.2-31.9-15.5-43.8c-10.3-11.8-23.9-17.7-40.6-17.7
+       c-16.8,0-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8c10.2,11.8,23.6,17.7,40.4,17.7
+       c16.8,0,30.3-5.9,40.6-17.7C1054,546.9,1059.1,532.3,1059.1,514.9z"/>
+<path d="M1417.8,398.2c18.3,11.7,32.5,27.8,42.9,48.3c10.3,20.5,15.5,43.3,15.5,68.5c0,25.1-5.2,48-15.5,68.4
+       c-10.3,20.5-24.6,36.6-42.9,48.3s-38.6,17.5-61,17.5c-32.3,0-57.5-10-75.4-30.1v165.6h-85.3V390.2h85.3v20.6
+       c18-20,43.1-30.1,75.4-30.1C1379.2,380.7,1399.5,386.6,1417.8,398.2z M1389.5,514.9c0-17.4-5.1-31.9-15.3-43.8
+       c-10.2-11.8-23.6-17.7-40.4-17.7s-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8
+       c10.2,11.8,23.6,17.7,40.4,17.7s30.2-5.9,40.4-17.7S1389.5,532.3,1389.5,514.9z"/>
+<path d="M1713.6,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+       c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68c11.8-20.5,28.1-36.7,48.7-48.5s43.5-17.7,68.7-17.7
+       c24.8,0,47.6,6.1,68.2,18.2s37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8c3.6,11.4,10.5,20.7,20.9,28.1
+       c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C1695.8,570.1,1704.9,563.7,1713.6,555.3z M1596.9,486.2h92.9
+       c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11S1599,473.9,1596.9,486.2z"/>
+<path d="M1908.8,418.4c7.8-10.8,17.2-19,28.3-24.7s22-8.5,32.8-8.5c11.4,0,20,1.6,26,4.9l-10.8,72.7c-8.4-2.1-15.7-3.1-22-3.1
+       c-17.1,0-30.4,4.3-39.9,12.8c-9.6,8.5-14.4,24.2-14.4,46.9v120.3h-85.3V390.2h85.3V418.4L1908.8,418.4z"/>
+<path d="M2113,258.2v381.5h-85.3V258.2H2113z"/>
+<path d="M2360.8,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+       c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68s28.1-36.7,48.7-48.5c20.6-11.8,43.5-17.7,68.7-17.7
+       c24.8,0,47.6,6.1,68.2,18.2c20.6,12.1,37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8
+       c3.6,11.4,10.5,20.7,20.9,28.1c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C2343.1,570.1,2352.1,563.7,2360.8,555.3z
+        M2244.1,486.2h92.9c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11C2251.7,464.1,2246.2,473.9,2244.1,486.2z"/>
+<path d="M2565.9,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+       c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+       c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+       c16.3,4.6,31.3,7,45.1,7c19.7,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+       c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+       c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+       C2590.5,448.7,2577.6,446.3,2565.9,446.3z"/>
+<path d="M2817.3,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+       c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+       c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+       c16.3,4.6,31.3,7,45.1,7c19.8,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+       c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+       c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+       C2841.8,448.7,2828.9,446.3,2817.3,446.3z"/>
+<g>
+       <path d="M2508,724h60.2v17.3H2508V724z"/>
+       <path d="M2629.2,694.4c4.9-2,10.2-3.1,16-3.1c10.9,0,19.5,3.4,25.9,10.2s9.6,16.7,9.6,29.6v57.3h-19.6v-52.6
+               c0-9.3-1.7-16.2-5.1-20.7c-3.4-4.5-9.1-6.7-17-6.7c-6.5,0-11.8,2.4-16.1,7.1c-4.3,4.8-6.4,11.5-6.4,20.2v52.6h-19.6v-94.6h19.6v9.5
+               C2620.2,699.4,2624.4,696.4,2629.2,694.4z"/>
+       <path d="M2790.3,833.2c-8.6,6.8-19.4,10.2-32.3,10.2c-7.9,0-15.2-1.4-21.9-4.1s-12.1-6.8-16.3-12.2s-6.6-11.9-7.1-19.6h19.6
+               c0.7,6.1,3.5,10.8,8.4,13.9c4.9,3.2,10.7,4.8,17.4,4.8c7,0,13.1-2,18.2-6c5.1-4,7.7-10.3,7.7-18.9v-24.7c-3.6,3.4-8,6.2-13.3,8.2
+               c-5.2,2.1-10.7,3.1-16.3,3.1c-8.7,0-16.6-2.1-23.7-6.4c-7.1-4.3-12.6-10-16.7-17.3c-4-7.3-6-15.5-6-24.6s2-17.3,6-24.7
+               s9.6-13.2,16.7-17.4c7.1-4.3,15-6.4,23.7-6.4c5.7,0,11.1,1,16.3,3.1s9.6,4.8,13.3,8.2v-8.8h19.4v107.8
+               C2803.2,815.9,2798.9,826.4,2790.3,833.2z M2782.2,755.7c2.6-4.7,3.8-10,3.8-15.9s-1.3-11.2-3.8-16c-2.6-4.8-6.1-8.5-10.5-11.1
+               c-4.5-2.7-9.5-4-15.1-4c-5.8,0-10.9,1.4-15.4,4.3c-4.5,2.8-7.9,6.6-10.3,11.4c-2.4,4.8-3.6,9.9-3.6,15.5c0,5.4,1.2,10.5,3.6,15.3
+               c2.4,4.8,5.8,8.6,10.3,11.5s9.6,4.3,15.4,4.3c5.6,0,10.6-1.4,15.1-4.1C2776.1,764.1,2779.6,760.4,2782.2,755.7z"/>
+       <path d="M2843.5,788.4h-21.6l37.9-48l-36.4-46.6h22.6l25.7,33.3l25.8-33.3h21.6l-36.2,45.9l37.9,48.6h-22.6l-27.4-35L2843.5,788.4z
+               "/>
+</g>
+<path d="M835.8,319.2c-11.5-18.9-27.4-33.7-47.6-44.7c-20.2-10.9-43-16.4-68.5-16.4h-90.6c-8.6,39.6-21.3,77.2-38,112.4
+       c-10,21-21.3,41-33.9,59.9v209.2H647v-135h72.7c25.4,0,48.3-5.5,68.5-16.4s36.1-25.8,47.6-44.7c11.5-18.9,17.3-39.5,17.3-61.9
+       C853.1,358.9,847.4,338.1,835.8,319.2z M747,416.6c-9.4,9-21.8,13.5-37,13.5l-62.8,0.4v-93.4l62.8-0.4c15.3,0,27.6,4.5,37,13.5
+       s14.1,20,14.1,33.2C761.1,396.6,756.4,407.7,747,416.6z"/>
+<path class="st0" d="M164.7,698.7c-3.5-16.5-10.4-49.6-11.3-49.6c-147.1-88-129.7-240.3-81-327.4C82.8,431.4,277,507.1,163.8,641.2
+       c-0.9,1.7,5.2,22.6,10.4,41.8c22.6-38.3,56.6-84.4,54.8-88.8C89.7,254.7,525,228.6,615.5,17.9c40.9,203.7-20.9,518.9-370.8,599
+       c-1.7,0.9-63.5,109.7-66.2,110.6c0-1.7-26.1-0.9-22.6-9.6C157.8,712.6,161.2,705.7,164.7,698.7L164.7,698.7z M160.4,616.9
+       c44.4-51.4-7.8-139.3-39.2-168C174.3,540.2,170.8,593.3,160.4,616.9L160.4,616.9z"/>
+</svg>
diff --git a/docs/assets/logo_full_white.svg b/docs/assets/logo_full_white.svg
new file mode 100644 (file)
index 0000000..25451ee
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 2962.2 860.2" style="enable-background:new 0 0 2962.2 860.2;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
+       .st1{fill:#17541F;stroke:#000000;stroke-miterlimit:10;}
+</style>
+<path class="st0" d="M1055.6,639.7v-20.6c-18,20-43.1,30.1-75.4,30.1c-22.4,0-42.8-5.8-61-17.5c-18.3-11.7-32.5-27.8-42.9-48.3
+       c-10.3-20.5-15.5-43.3-15.5-68.4c0-25.1,5.2-48,15.5-68.5s24.6-36.6,42.9-48.3s38.6-17.5,61-17.5c32.3,0,57.5,10,75.4,30.1v-20.6
+       h85.3v249.6L1055.6,639.7L1055.6,639.7z M1059.1,514.9c0-17.4-5.2-31.9-15.5-43.8c-10.3-11.8-23.9-17.7-40.6-17.7
+       c-16.8,0-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8c10.2,11.8,23.6,17.7,40.4,17.7
+       c16.8,0,30.3-5.9,40.6-17.7C1054,546.9,1059.1,532.3,1059.1,514.9z"/>
+<path class="st0" d="M1417.8,398.2c18.3,11.7,32.5,27.8,42.9,48.3c10.3,20.5,15.5,43.3,15.5,68.5c0,25.1-5.2,48-15.5,68.4
+       c-10.3,20.5-24.6,36.6-42.9,48.3s-38.6,17.5-61,17.5c-32.3,0-57.5-10-75.4-30.1v165.6h-85.3V390.2h85.3v20.6
+       c18-20,43.1-30.1,75.4-30.1C1379.2,380.7,1399.5,386.6,1417.8,398.2z M1389.5,514.9c0-17.4-5.1-31.9-15.3-43.8
+       c-10.2-11.8-23.6-17.7-40.4-17.7s-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8
+       c10.2,11.8,23.6,17.7,40.4,17.7s30.2-5.9,40.4-17.7S1389.5,532.3,1389.5,514.9z"/>
+<path class="st0" d="M1713.6,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+       c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68c11.8-20.5,28.1-36.7,48.7-48.5s43.5-17.7,68.7-17.7
+       c24.8,0,47.6,6.1,68.2,18.2s37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8c3.6,11.4,10.5,20.7,20.9,28.1
+       c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C1695.8,570.1,1704.9,563.7,1713.6,555.3z M1596.9,486.2h92.9
+       c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11S1599,473.9,1596.9,486.2z"/>
+<path class="st0" d="M1908.8,418.4c7.8-10.8,17.2-19,28.3-24.7s22-8.5,32.8-8.5c11.4,0,20,1.6,26,4.9l-10.8,72.7
+       c-8.4-2.1-15.7-3.1-22-3.1c-17.1,0-30.4,4.3-39.9,12.8c-9.6,8.5-14.4,24.2-14.4,46.9v120.3h-85.3V390.2h85.3V418.4L1908.8,418.4z"/>
+<path class="st0" d="M2113,258.2v381.5h-85.3V258.2H2113z"/>
+<path class="st0" d="M2360.8,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+       c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68s28.1-36.7,48.7-48.5c20.6-11.8,43.5-17.7,68.7-17.7
+       c24.8,0,47.6,6.1,68.2,18.2c20.6,12.1,37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8
+       c3.6,11.4,10.5,20.7,20.9,28.1c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C2343.1,570.1,2352.1,563.7,2360.8,555.3z
+        M2244.1,486.2h92.9c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11C2251.7,464.1,2246.2,473.9,2244.1,486.2z"/>
+<path class="st0" d="M2565.9,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+       c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+       c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+       c16.3,4.6,31.3,7,45.1,7c19.7,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+       c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+       c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+       C2590.5,448.7,2577.6,446.3,2565.9,446.3z"/>
+<path class="st0" d="M2817.3,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+       c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+       c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+       c16.3,4.6,31.3,7,45.1,7c19.8,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+       c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+       c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+       C2841.8,448.7,2828.9,446.3,2817.3,446.3z"/>
+<g>
+       <path class="st0" d="M2508,724h60.2v17.3H2508V724z"/>
+       <path class="st0" d="M2629.2,694.4c4.9-2,10.2-3.1,16-3.1c10.9,0,19.5,3.4,25.9,10.2s9.6,16.7,9.6,29.6v57.3h-19.6v-52.6
+               c0-9.3-1.7-16.2-5.1-20.7c-3.4-4.5-9.1-6.7-17-6.7c-6.5,0-11.8,2.4-16.1,7.1c-4.3,4.8-6.4,11.5-6.4,20.2v52.6h-19.6v-94.6h19.6v9.5
+               C2620.2,699.4,2624.4,696.4,2629.2,694.4z"/>
+       <path class="st0" d="M2790.3,833.2c-8.6,6.8-19.4,10.2-32.3,10.2c-7.9,0-15.2-1.4-21.9-4.1s-12.1-6.8-16.3-12.2s-6.6-11.9-7.1-19.6
+               h19.6c0.7,6.1,3.5,10.8,8.4,13.9c4.9,3.2,10.7,4.8,17.4,4.8c7,0,13.1-2,18.2-6c5.1-4,7.7-10.3,7.7-18.9v-24.7
+               c-3.6,3.4-8,6.2-13.3,8.2c-5.2,2.1-10.7,3.1-16.3,3.1c-8.7,0-16.6-2.1-23.7-6.4c-7.1-4.3-12.6-10-16.7-17.3c-4-7.3-6-15.5-6-24.6
+               s2-17.3,6-24.7s9.6-13.2,16.7-17.4c7.1-4.3,15-6.4,23.7-6.4c5.7,0,11.1,1,16.3,3.1s9.6,4.8,13.3,8.2v-8.8h19.4v107.8
+               C2803.2,815.9,2798.9,826.4,2790.3,833.2z M2782.2,755.7c2.6-4.7,3.8-10,3.8-15.9s-1.3-11.2-3.8-16c-2.6-4.8-6.1-8.5-10.5-11.1
+               c-4.5-2.7-9.5-4-15.1-4c-5.8,0-10.9,1.4-15.4,4.3c-4.5,2.8-7.9,6.6-10.3,11.4c-2.4,4.8-3.6,9.9-3.6,15.5c0,5.4,1.2,10.5,3.6,15.3
+               c2.4,4.8,5.8,8.6,10.3,11.5s9.6,4.3,15.4,4.3c5.6,0,10.6-1.4,15.1-4.1C2776.1,764.1,2779.6,760.4,2782.2,755.7z"/>
+       <path class="st0" d="M2843.5,788.4h-21.6l37.9-48l-36.4-46.6h22.6l25.7,33.3l25.8-33.3h21.6l-36.2,45.9l37.9,48.6h-22.6l-27.4-35
+               L2843.5,788.4z"/>
+</g>
+<path class="st0" d="M835.8,319.2c-11.5-18.9-27.4-33.7-47.6-44.7c-20.2-10.9-43-16.4-68.5-16.4h-90.6c-8.6,39.6-21.3,77.2-38,112.4
+       c-10,21-21.3,41-33.9,59.9v209.2H647v-135h72.7c25.4,0,48.3-5.5,68.5-16.4s36.1-25.8,47.6-44.7c11.5-18.9,17.3-39.5,17.3-61.9
+       C853.1,358.9,847.4,338.1,835.8,319.2z M747,416.6c-9.4,9-21.8,13.5-37,13.5l-62.8,0.4v-93.4l62.8-0.4c15.3,0,27.6,4.5,37,13.5
+       s14.1,20,14.1,33.2C761.1,396.6,756.4,407.7,747,416.6z"/>
+<path class="st1" d="M164.7,698.7c-3.5-16.5-10.4-49.6-11.3-49.6c-147.1-88-129.7-240.3-81-327.4C82.8,431.4,277,507.1,163.8,641.2
+       c-0.9,1.7,5.2,22.6,10.4,41.8c22.6-38.3,56.6-84.4,54.8-88.8C89.7,254.7,525,228.6,615.5,17.9c40.9,203.7-20.9,518.9-370.8,599
+       c-1.7,0.9-63.5,109.7-66.2,110.6c0-1.7-26.1-0.9-22.6-9.6C157.8,712.6,161.2,705.7,164.7,698.7L164.7,698.7z M160.4,616.9
+       c44.4-51.4-7.8-139.3-39.2-168C174.3,540.2,170.8,593.3,160.4,616.9L160.4,616.9z"/>
+</svg>
diff --git a/docs/assets/screenshots/mail-rules-edited.png b/docs/assets/screenshots/mail-rules-edited.png
new file mode 100644 (file)
index 0000000..42db1d6
Binary files /dev/null and b/docs/assets/screenshots/mail-rules-edited.png differ
index 1caa00220d45bab7b940f952e8fcb88b230f1378..58591bd2d3b0c894879ef6db8758a0b37c3efe2a 100644 (file)
@@ -1,7 +1,230 @@
 # Changelog
 
+## paperless-ngx 1.10.1
+
+### Features
+
+- Feature: Allows documents in WebP format [@stumpylog](https://github.com/stumpylog) ([#1984](https://github.com/paperless-ngx/paperless-ngx/pull/1984))
+
+### Bug Fixes
+
+- Fix: frontend tasks display in 1.10.0 [@shamoon](https://github.com/shamoon) ([#2073](https://github.com/paperless-ngx/paperless-ngx/pull/2073))
+- Bugfix: Custom startup commands weren't run as root [@stumpylog](https://github.com/stumpylog) ([#2069](https://github.com/paperless-ngx/paperless-ngx/pull/2069))
+- Bugfix: Add libatomic for armv7 compatibility [@stumpylog](https://github.com/stumpylog) ([#2066](https://github.com/paperless-ngx/paperless-ngx/pull/2066))
+- Bugfix: Don't silence an exception when trying to handle file naming [@stumpylog](https://github.com/stumpylog) ([#2062](https://github.com/paperless-ngx/paperless-ngx/pull/2062))
+- Bugfix: Some tesseract languages aren't detected as installed. [@stumpylog](https://github.com/stumpylog) ([#2057](https://github.com/paperless-ngx/paperless-ngx/pull/2057))
+
+### Maintenance
+
+- Chore: Use a maintained upload-release-asset [@stumpylog](https://github.com/stumpylog) ([#2055](https://github.com/paperless-ngx/paperless-ngx/pull/2055))
+
+### Dependencies
+
+  <details>
+  <summary>5 changes</summary>
+
+- Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot ([#2076](https://github.com/paperless-ngx/paperless-ngx/pull/2076))
+- Bump @<!---->angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot ([#2079](https://github.com/paperless-ngx/paperless-ngx/pull/2079))
+- Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078))
+- Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080))
+- Bump @<!---->ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077))
+</details>
+
+### All App Changes
+
+- Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot ([#2076](https://github.com/paperless-ngx/paperless-ngx/pull/2076))
+- Bump @<!---->angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot ([#2079](https://github.com/paperless-ngx/paperless-ngx/pull/2079))
+- Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078))
+- Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080))
+- Bump @<!---->ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077))
+- Fix: frontend tasks display in 1.10.0 [@shamoon](https://github.com/shamoon) ([#2073](https://github.com/paperless-ngx/paperless-ngx/pull/2073))
+- Bugfix: Don't silence an exception when trying to handle file naming [@stumpylog](https://github.com/stumpylog) ([#2062](https://github.com/paperless-ngx/paperless-ngx/pull/2062))
+- Bugfix: Some tesseract languages aren't detected as installed. [@stumpylog](https://github.com/stumpylog) ([#2057](https://github.com/paperless-ngx/paperless-ngx/pull/2057))
+
+## paperless-ngx 1.10.0
+
+### Features
+
+- Feature: Capture stdout \& stderr of the pre/post consume scripts [@stumpylog](https://github.com/stumpylog) ([#1967](https://github.com/paperless-ngx/paperless-ngx/pull/1967))
+- Feature: Allow running custom container initialization scripts [@stumpylog](https://github.com/stumpylog) ([#1838](https://github.com/paperless-ngx/paperless-ngx/pull/1838))
+- Feature: Add more file name formatting options [@stumpylog](https://github.com/stumpylog) ([#1906](https://github.com/paperless-ngx/paperless-ngx/pull/1906))
+- Feature: 1.9.2 UI tweaks [@shamoon](https://github.com/shamoon) ([#1886](https://github.com/paperless-ngx/paperless-ngx/pull/1886))
+- Feature: Optional celery monitoring with Flower [@stumpylog](https://github.com/stumpylog) ([#1810](https://github.com/paperless-ngx/paperless-ngx/pull/1810))
+- Feature: Save pending tasks for frontend [@stumpylog](https://github.com/stumpylog) ([#1816](https://github.com/paperless-ngx/paperless-ngx/pull/1816))
+- Feature: Improved processing for automatic matching [@stumpylog](https://github.com/stumpylog) ([#1609](https://github.com/paperless-ngx/paperless-ngx/pull/1609))
+- Feature: Transition to celery for background tasks [@stumpylog](https://github.com/stumpylog) ([#1648](https://github.com/paperless-ngx/paperless-ngx/pull/1648))
+- Feature: UI Welcome Tour [@shamoon](https://github.com/shamoon) ([#1644](https://github.com/paperless-ngx/paperless-ngx/pull/1644))
+- Feature: slim sidebar [@shamoon](https://github.com/shamoon) ([#1641](https://github.com/paperless-ngx/paperless-ngx/pull/1641))
+- change default matching algo to auto and move to constant [@NiFNi](https://github.com/NiFNi) ([#1754](https://github.com/paperless-ngx/paperless-ngx/pull/1754))
+- Feature: Enable end to end Tika testing in CI [@stumpylog](https://github.com/stumpylog) ([#1757](https://github.com/paperless-ngx/paperless-ngx/pull/1757))
+- Feature: frontend update checking settings [@shamoon](https://github.com/shamoon) ([#1692](https://github.com/paperless-ngx/paperless-ngx/pull/1692))
+- Feature: Upgrade to qpdf 11, pikepdf 6 \& ocrmypdf 14 [@stumpylog](https://github.com/stumpylog) ([#1642](https://github.com/paperless-ngx/paperless-ngx/pull/1642))
+
+### Bug Fixes
+
+- Bugfix: Fix created_date being a string [@stumpylog](https://github.com/stumpylog) ([#2023](https://github.com/paperless-ngx/paperless-ngx/pull/2023))
+- Bugfix: Fixes an issue with mixed text and images when redoing OCR [@stumpylog](https://github.com/stumpylog) ([#2017](https://github.com/paperless-ngx/paperless-ngx/pull/2017))
+- Bugfix: Always re-try barcodes with pdf2image [@stumpylog](https://github.com/stumpylog) ([#1953](https://github.com/paperless-ngx/paperless-ngx/pull/1953))
+- Fix: using `CONSUMER_SUBDIRS_AS_TAGS` causes failure with Celery in `dev` [@shamoon](https://github.com/shamoon) ([#1942](https://github.com/paperless-ngx/paperless-ngx/pull/1942))
+- Fix mail consumption broken in `dev` after move to celery [@shamoon](https://github.com/shamoon) ([#1934](https://github.com/paperless-ngx/paperless-ngx/pull/1934))
+- Bugfix: Prevent file handling from running with stale data [@stumpylog](https://github.com/stumpylog) ([#1905](https://github.com/paperless-ngx/paperless-ngx/pull/1905))
+- Chore: Reduce nuisance CI test failures [@stumpylog](https://github.com/stumpylog) ([#1922](https://github.com/paperless-ngx/paperless-ngx/pull/1922))
+- Bugfix: Unintentional deletion of feature tagged Docker images [@stumpylog](https://github.com/stumpylog) ([#1896](https://github.com/paperless-ngx/paperless-ngx/pull/1896))
+- Fix: independent control of saved views [@shamoon](https://github.com/shamoon) ([#1868](https://github.com/paperless-ngx/paperless-ngx/pull/1868))
+- Fix: frontend relative date searches [@shamoon](https://github.com/shamoon) ([#1865](https://github.com/paperless-ngx/paperless-ngx/pull/1865))
+- Chore: Fixes pipenv issues [@stumpylog](https://github.com/stumpylog) ([#1873](https://github.com/paperless-ngx/paperless-ngx/pull/1873))
+- Bugfix: Handle password protected PDFs during barcode detection [@stumpylog](https://github.com/stumpylog) ([#1858](https://github.com/paperless-ngx/paperless-ngx/pull/1858))
+- Fix: Allows configuring barcodes with pdf2image instead of pikepdf [@stumpylog](https://github.com/stumpylog) ([#1857](https://github.com/paperless-ngx/paperless-ngx/pull/1857))
+- Bugfix: Reverts the change around skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1829](https://github.com/paperless-ngx/paperless-ngx/pull/1829))
+- Fix: missing loadViewConfig breaks loading saved view [@shamoon](https://github.com/shamoon) ([#1792](https://github.com/paperless-ngx/paperless-ngx/pull/1792))
+- Bugfix: Fallback to pdf2image if pikepdf fails [@stumpylog](https://github.com/stumpylog) ([#1745](https://github.com/paperless-ngx/paperless-ngx/pull/1745))
+- Fix: creating new storage path on document edit fails to update menu [@shamoon](https://github.com/shamoon) ([#1777](https://github.com/paperless-ngx/paperless-ngx/pull/1777))
+- Bugfix: Files containing barcodes uploaded via web are not consumed after splitting [@stumpylog](https://github.com/stumpylog) ([#1762](https://github.com/paperless-ngx/paperless-ngx/pull/1762))
+- Bugfix: Fix email labeling for non-Gmail servers [@stumpylog](https://github.com/stumpylog) ([#1755](https://github.com/paperless-ngx/paperless-ngx/pull/1755))
+- Fix: allow preview for .csv files [@shamoon](https://github.com/shamoon) ([#1744](https://github.com/paperless-ngx/paperless-ngx/pull/1744))
+- Bugfix: csv recognition by consumer [@bin101](https://github.com/bin101) ([#1726](https://github.com/paperless-ngx/paperless-ngx/pull/1726))
+- Bugfix: Include document title when a duplicate is detected [@stumpylog](https://github.com/stumpylog) ([#1696](https://github.com/paperless-ngx/paperless-ngx/pull/1696))
+- Bugfix: Set MySql charset [@stumpylog](https://github.com/stumpylog) ([#1687](https://github.com/paperless-ngx/paperless-ngx/pull/1687))
+- Mariadb compose files should use `PAPERLESS_DBPASS` [@shamoon](https://github.com/shamoon) ([#1683](https://github.com/paperless-ngx/paperless-ngx/pull/1683))
+
+### Documentation
+
+- Documentation: Update MariaDB docs to note some potential issues [@stumpylog](https://github.com/stumpylog) ([#2016](https://github.com/paperless-ngx/paperless-ngx/pull/2016))
+- Documentation: Add note re MS exchange servers [@shamoon](https://github.com/shamoon) ([#1780](https://github.com/paperless-ngx/paperless-ngx/pull/1780))
+- Chore: Updates Gotenberg versions [@stumpylog](https://github.com/stumpylog) ([#1768](https://github.com/paperless-ngx/paperless-ngx/pull/1768))
+- Documentation: Tweak LinuxServer [@stumpylog](https://github.com/stumpylog) ([#1761](https://github.com/paperless-ngx/paperless-ngx/pull/1761))
+- Documentation: Adds troubleshooting note about Kubernetes and ports [@stumpylog](https://github.com/stumpylog) ([#1731](https://github.com/paperless-ngx/paperless-ngx/pull/1731))
+- Documentation: LinuxServer.io Migration [@stumpylog](https://github.com/stumpylog) ([#1733](https://github.com/paperless-ngx/paperless-ngx/pull/1733))
+- [Documentation] Add v1.9.2 changelog [@github-actions](https://github.com/github-actions) ([#1671](https://github.com/paperless-ngx/paperless-ngx/pull/1671))
+
+### Maintenance
+
+- Bump tj-actions/changed-files from 32 to 34 [@dependabot](https://github.com/dependabot) ([#1915](https://github.com/paperless-ngx/paperless-ngx/pull/1915))
+- Chore: Fix `dev` trying to build Pillow or lxml [@stumpylog](https://github.com/stumpylog) ([#1909](https://github.com/paperless-ngx/paperless-ngx/pull/1909))
+- Chore: Fixes pipenv issues [@stumpylog](https://github.com/stumpylog) ([#1873](https://github.com/paperless-ngx/paperless-ngx/pull/1873))
+- Chore: Simplified registry cleanup [@stumpylog](https://github.com/stumpylog) ([#1812](https://github.com/paperless-ngx/paperless-ngx/pull/1812))
+- Chore: Fixing deprecated workflow commands [@stumpylog](https://github.com/stumpylog) ([#1786](https://github.com/paperless-ngx/paperless-ngx/pull/1786))
+- Chore: Python library update + test fixes [@stumpylog](https://github.com/stumpylog) ([#1773](https://github.com/paperless-ngx/paperless-ngx/pull/1773))
+- Chore: Updates Gotenberg versions [@stumpylog](https://github.com/stumpylog) ([#1768](https://github.com/paperless-ngx/paperless-ngx/pull/1768))
+- Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 [@dependabot](https://github.com/dependabot) ([#1703](https://github.com/paperless-ngx/paperless-ngx/pull/1703))
+- Bump tj-actions/changed-files from 29.0.2 to 31.0.2 [@dependabot](https://github.com/dependabot) ([#1702](https://github.com/paperless-ngx/paperless-ngx/pull/1702))
+- Bump actions/checkout from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1704](https://github.com/paperless-ngx/paperless-ngx/pull/1704))
+- Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1705](https://github.com/paperless-ngx/paperless-ngx/pull/1705))
+
+### Dependencies
+
+<details>
+<summary>31 changes</summary>
+
+- Bugfix: Downgrade cryptography for armv7 compatibility [@stumpylog](https://github.com/stumpylog) ([#1954](https://github.com/paperless-ngx/paperless-ngx/pull/1954))
+- Chore: Bulk library updates + loosen restrictions [@stumpylog](https://github.com/stumpylog) ([#1949](https://github.com/paperless-ngx/paperless-ngx/pull/1949))
+- Bump tj-actions/changed-files from 32 to 34 [@dependabot](https://github.com/dependabot) ([#1915](https://github.com/paperless-ngx/paperless-ngx/pull/1915))
+- Bump scikit-learn from 1.1.2 to 1.1.3 [@dependabot](https://github.com/dependabot) ([#1903](https://github.com/paperless-ngx/paperless-ngx/pull/1903))
+- Bump angular packages as bundle [@dependabot](https://github.com/dependabot) ([#1910](https://github.com/paperless-ngx/paperless-ngx/pull/1910))
+- Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1911](https://github.com/paperless-ngx/paperless-ngx/pull/1911))
+- Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1914](https://github.com/paperless-ngx/paperless-ngx/pull/1914))
+- Bump pillow from 9.2.0 to 9.3.0 [@dependabot](https://github.com/dependabot) ([#1904](https://github.com/paperless-ngx/paperless-ngx/pull/1904))
+- Bump pytest from 7.1.3 to 7.2.0 [@dependabot](https://github.com/dependabot) ([#1902](https://github.com/paperless-ngx/paperless-ngx/pull/1902))
+- Bump tox from 3.26.0 to 3.27.0 [@dependabot](https://github.com/dependabot) ([#1901](https://github.com/paperless-ngx/paperless-ngx/pull/1901))
+- Bump zipp from 3.9.0 to 3.10.0 [@dependabot](https://github.com/dependabot) ([#1860](https://github.com/paperless-ngx/paperless-ngx/pull/1860))
+- Bump pytest-env from 0.6.2 to 0.8.1 [@dependabot](https://github.com/dependabot) ([#1859](https://github.com/paperless-ngx/paperless-ngx/pull/1859))
+- Bump sphinx from 5.2.3 to 5.3.0 [@dependabot](https://github.com/dependabot) ([#1817](https://github.com/paperless-ngx/paperless-ngx/pull/1817))
+- Chore: downgrade channels-redis [@stumpylog](https://github.com/stumpylog) ([#1802](https://github.com/paperless-ngx/paperless-ngx/pull/1802))
+- Chore: Update to qpdf 11.1.1 and update backend libraries [@stumpylog](https://github.com/stumpylog) ([#1749](https://github.com/paperless-ngx/paperless-ngx/pull/1749))
+- Bump myst-parser from 0.18.0 to 0.18.1 [@dependabot](https://github.com/dependabot) ([#1738](https://github.com/paperless-ngx/paperless-ngx/pull/1738))
+- Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 [@dependabot](https://github.com/dependabot) ([#1703](https://github.com/paperless-ngx/paperless-ngx/pull/1703))
+- Bump tj-actions/changed-files from 29.0.2 to 31.0.2 [@dependabot](https://github.com/dependabot) ([#1702](https://github.com/paperless-ngx/paperless-ngx/pull/1702))
+- Bump actions/checkout from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1704](https://github.com/paperless-ngx/paperless-ngx/pull/1704))
+- Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1705](https://github.com/paperless-ngx/paperless-ngx/pull/1705))
+- Bump rxjs from 7.5.6 to 7.5.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#1720](https://github.com/paperless-ngx/paperless-ngx/pull/1720))
+- Bump uuid from 8.3.2 to 9.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1716](https://github.com/paperless-ngx/paperless-ngx/pull/1716))
+- Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1717](https://github.com/paperless-ngx/paperless-ngx/pull/1717))
+- Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1715](https://github.com/paperless-ngx/paperless-ngx/pull/1715))
+- Bump concurrently from 7.3.0 to 7.4.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1719](https://github.com/paperless-ngx/paperless-ngx/pull/1719))
+- Bump [@<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot) ([#1718](https://github.com/paperless-ngx/paperless-ngx/pull/1718))
+- Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1714](https://github.com/paperless-ngx/paperless-ngx/pull/1714))
+- Bump [@<!---->angular/cli @<!---->angular/core @dependabot](https://github.com/<!---->angular/cli @<!---->angular/core @dependabot) ([#1708](https://github.com/paperless-ngx/paperless-ngx/pull/1708))
+- Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707))
+- Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710))
+- Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706))
+</details>
+
+### All App Changes
+
+- Add info that re-do OCR doesnt automatically refresh content [@shamoon](https://github.com/shamoon) ([#2025](https://github.com/paperless-ngx/paperless-ngx/pull/2025))
+- Bugfix: Fix created_date being a string [@stumpylog](https://github.com/stumpylog) ([#2023](https://github.com/paperless-ngx/paperless-ngx/pull/2023))
+- Bugfix: Fixes an issue with mixed text and images when redoing OCR [@stumpylog](https://github.com/stumpylog) ([#2017](https://github.com/paperless-ngx/paperless-ngx/pull/2017))
+- Bugfix: Don't allow exceptions during date parsing to fail consume [@stumpylog](https://github.com/stumpylog) ([#1998](https://github.com/paperless-ngx/paperless-ngx/pull/1998))
+- Feature: Capture stdout \& stderr of the pre/post consume scripts [@stumpylog](https://github.com/stumpylog) ([#1967](https://github.com/paperless-ngx/paperless-ngx/pull/1967))
+- Bugfix: Always re-try barcodes with pdf2image [@stumpylog](https://github.com/stumpylog) ([#1953](https://github.com/paperless-ngx/paperless-ngx/pull/1953))
+- Fix: using `CONSUMER_SUBDIRS_AS_TAGS` causes failure with Celery in `dev` [@shamoon](https://github.com/shamoon) ([#1942](https://github.com/paperless-ngx/paperless-ngx/pull/1942))
+- Fix mail consumption broken in `dev` after move to celery [@shamoon](https://github.com/shamoon) ([#1934](https://github.com/paperless-ngx/paperless-ngx/pull/1934))
+- Bugfix: Prevent file handling from running with stale data [@stumpylog](https://github.com/stumpylog) ([#1905](https://github.com/paperless-ngx/paperless-ngx/pull/1905))
+- Chore: Reduce nuisance CI test failures [@stumpylog](https://github.com/stumpylog) ([#1922](https://github.com/paperless-ngx/paperless-ngx/pull/1922))
+- Bump scikit-learn from 1.1.2 to 1.1.3 [@dependabot](https://github.com/dependabot) ([#1903](https://github.com/paperless-ngx/paperless-ngx/pull/1903))
+- Bump angular packages as bundle [@dependabot](https://github.com/dependabot) ([#1910](https://github.com/paperless-ngx/paperless-ngx/pull/1910))
+- Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1911](https://github.com/paperless-ngx/paperless-ngx/pull/1911))
+- Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1914](https://github.com/paperless-ngx/paperless-ngx/pull/1914))
+- Feature: Add more file name formatting options [@stumpylog](https://github.com/stumpylog) ([#1906](https://github.com/paperless-ngx/paperless-ngx/pull/1906))
+- Bump pillow from 9.2.0 to 9.3.0 [@dependabot](https://github.com/dependabot) ([#1904](https://github.com/paperless-ngx/paperless-ngx/pull/1904))
+- Bump pytest from 7.1.3 to 7.2.0 [@dependabot](https://github.com/dependabot) ([#1902](https://github.com/paperless-ngx/paperless-ngx/pull/1902))
+- Bump tox from 3.26.0 to 3.27.0 [@dependabot](https://github.com/dependabot) ([#1901](https://github.com/paperless-ngx/paperless-ngx/pull/1901))
+- directly use rapidfuzz [@maxbachmann](https://github.com/maxbachmann) ([#1899](https://github.com/paperless-ngx/paperless-ngx/pull/1899))
+- Feature: 1.9.2 UI tweaks [@shamoon](https://github.com/shamoon) ([#1886](https://github.com/paperless-ngx/paperless-ngx/pull/1886))
+- Bump zipp from 3.9.0 to 3.10.0 [@dependabot](https://github.com/dependabot) ([#1860](https://github.com/paperless-ngx/paperless-ngx/pull/1860))
+- Fix: independent control of saved views [@shamoon](https://github.com/shamoon) ([#1868](https://github.com/paperless-ngx/paperless-ngx/pull/1868))
+- Fix: frontend relative date searches [@shamoon](https://github.com/shamoon) ([#1865](https://github.com/paperless-ngx/paperless-ngx/pull/1865))
+- Django error W003 - MariaDB may not allow unique CharFields to have a max_length > 255. [@Sblop](https://github.com/Sblop) ([#1881](https://github.com/paperless-ngx/paperless-ngx/pull/1881))
+- Bump pytest-env from 0.6.2 to 0.8.1 [@dependabot](https://github.com/dependabot) ([#1859](https://github.com/paperless-ngx/paperless-ngx/pull/1859))
+- Fix: Allows configuring barcodes with pdf2image instead of pikepdf [@stumpylog](https://github.com/stumpylog) ([#1857](https://github.com/paperless-ngx/paperless-ngx/pull/1857))
+- Feature: Save pending tasks for frontend [@stumpylog](https://github.com/stumpylog) ([#1816](https://github.com/paperless-ngx/paperless-ngx/pull/1816))
+- Bugfix: Reverts the change around skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1829](https://github.com/paperless-ngx/paperless-ngx/pull/1829))
+- Bump sphinx from 5.2.3 to 5.3.0 [@dependabot](https://github.com/dependabot) ([#1817](https://github.com/paperless-ngx/paperless-ngx/pull/1817))
+- Fix: missing loadViewConfig breaks loading saved view [@shamoon](https://github.com/shamoon) ([#1792](https://github.com/paperless-ngx/paperless-ngx/pull/1792))
+- Bugfix: Fallback to pdf2image if pikepdf fails [@stumpylog](https://github.com/stumpylog) ([#1745](https://github.com/paperless-ngx/paperless-ngx/pull/1745))
+- Fix: creating new storage path on document edit fails to update menu [@shamoon](https://github.com/shamoon) ([#1777](https://github.com/paperless-ngx/paperless-ngx/pull/1777))
+- Chore: Python library update + test fixes [@stumpylog](https://github.com/stumpylog) ([#1773](https://github.com/paperless-ngx/paperless-ngx/pull/1773))
+- Feature: Improved processing for automatic matching [@stumpylog](https://github.com/stumpylog) ([#1609](https://github.com/paperless-ngx/paperless-ngx/pull/1609))
+- Feature: Transition to celery for background tasks [@stumpylog](https://github.com/stumpylog) ([#1648](https://github.com/paperless-ngx/paperless-ngx/pull/1648))
+- Feature: UI Welcome Tour [@shamoon](https://github.com/shamoon) ([#1644](https://github.com/paperless-ngx/paperless-ngx/pull/1644))
+- Feature: slim sidebar [@shamoon](https://github.com/shamoon) ([#1641](https://github.com/paperless-ngx/paperless-ngx/pull/1641))
+- Bugfix: Files containing barcodes uploaded via web are not consumed after splitting [@stumpylog](https://github.com/stumpylog) ([#1762](https://github.com/paperless-ngx/paperless-ngx/pull/1762))
+- change default matching algo to auto and move to constant [@NiFNi](https://github.com/NiFNi) ([#1754](https://github.com/paperless-ngx/paperless-ngx/pull/1754))
+- Bugfix: Fix email labeling for non-Gmail servers [@stumpylog](https://github.com/stumpylog) ([#1755](https://github.com/paperless-ngx/paperless-ngx/pull/1755))
+- Feature: frontend update checking settings [@shamoon](https://github.com/shamoon) ([#1692](https://github.com/paperless-ngx/paperless-ngx/pull/1692))
+- Fix: allow preview for .csv files [@shamoon](https://github.com/shamoon) ([#1744](https://github.com/paperless-ngx/paperless-ngx/pull/1744))
+- Bump myst-parser from 0.18.0 to 0.18.1 [@dependabot](https://github.com/dependabot) ([#1738](https://github.com/paperless-ngx/paperless-ngx/pull/1738))
+- Bugfix: csv recognition by consumer [@bin101](https://github.com/bin101) ([#1726](https://github.com/paperless-ngx/paperless-ngx/pull/1726))
+- Bugfix: Include document title when a duplicate is detected [@stumpylog](https://github.com/stumpylog) ([#1696](https://github.com/paperless-ngx/paperless-ngx/pull/1696))
+- Bump rxjs from 7.5.6 to 7.5.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#1720](https://github.com/paperless-ngx/paperless-ngx/pull/1720))
+- Bump uuid from 8.3.2 to 9.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1716](https://github.com/paperless-ngx/paperless-ngx/pull/1716))
+- Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1717](https://github.com/paperless-ngx/paperless-ngx/pull/1717))
+- Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1715](https://github.com/paperless-ngx/paperless-ngx/pull/1715))
+- Bump concurrently from 7.3.0 to 7.4.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1719](https://github.com/paperless-ngx/paperless-ngx/pull/1719))
+- Bump [@<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot) ([#1718](https://github.com/paperless-ngx/paperless-ngx/pull/1718))
+- Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1714](https://github.com/paperless-ngx/paperless-ngx/pull/1714))
+- Bump [@<!---->angular/cli @<!---->angular/core @dependabot](https://github.com/<!---->angular/cli @<!---->angular/core @dependabot) ([#1708](https://github.com/paperless-ngx/paperless-ngx/pull/1708))
+- Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707))
+- Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710))
+- Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706))
+- Bugfix: Set MySql charset [@stumpylog](https://github.com/stumpylog) ([#1687](https://github.com/paperless-ngx/paperless-ngx/pull/1687))
+
+## paperless-ngx 1.9.2
+
+### Bug Fixes
+
+- Bugfix: Allow PAPERLESS_OCR_CLEAN=none [@shamoon](https://github.com/shamoon) ([#1670](https://github.com/paperless-ngx/paperless-ngx/pull/1670))
+
+### All App Changes
+
+- Chore: Bumps version numbers to 1.9.2 [@stumpylog](https://github.com/stumpylog) ([#1666](https://github.com/paperless-ngx/paperless-ngx/pull/1666))
+
 ## paperless-ngx 1.9.1
 
+### Notes
+
+- Version 1.9.1 incorrectly displays the version string as 1.9.0
+
 ### Bug Fixes
 
 - Bugfix: Fixes missing OCR mode skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1645](https://github.com/paperless-ngx/paperless-ngx/pull/1645))
 
 - Allow setting more than one tag in mail rules
   [\@jonasc](https://github.com/jonasc) ([\#270](https://github.com/paperless-ngx/paperless-ngx/pull/270))
-- Global drag\'n\'drop [\@shamoon](https://github.com/shamoon)
+- Global drag'n'drop [\@shamoon](https://github.com/shamoon)
   ([\#283](https://github.com/paperless-ngx/paperless-ngx/pull/283))
 - Fix: download buttons should disable while waiting
   [\@shamoon](https://github.com/shamoon) ([\#630](https://github.com/paperless-ngx/paperless-ngx/pull/630))
 
 ### Bug Fixes
 
-- Add \"localhost\" to ALLOWED_HOSTS
+- Add "localhost" to ALLOWED_HOSTS
   [\@gador](https://github.com/gador) ([\#700](https://github.com/paperless-ngx/paperless-ngx/pull/700))
 - Fix: scanners table [\@qcasey](https://github.com/qcasey) ([\#690](https://github.com/paperless-ngx/paperless-ngx/pull/690))
 - Adds wait for file before consuming
   ([\#393](https://github.com/paperless-ngx/paperless-ngx/pull/393))
 - Fix filterable dropdown buttons arent translated
   [\@shamoon](https://github.com/shamoon) ([\#366](https://github.com/paperless-ngx/paperless-ngx/pull/366))
-- Fix 224: \"Auto-detected date is day before receipt date\"
+- Fix 224: "Auto-detected date is day before receipt date"
   [\@a17t](https://github.com/a17t) ([\#246](https://github.com/paperless-ngx/paperless-ngx/pull/246))
 - Fix minor sphinx errors [\@shamoon](https://github.com/shamoon)
   ([\#322](https://github.com/paperless-ngx/paperless-ngx/pull/322))
@@ -524,7 +747,7 @@ This is the first release of the revived paperless-ngx project 🎉. Thank
 you to everyone on the paperless-ngx team for your initiative and
 excellent teamwork!
 
-Version 1.6.0 merges several pending PRs from jonaswinkler\'s repo and
+Version 1.6.0 merges several pending PRs from jonaswinkler's repo and
 includes new feature updates and bug fixes. Major backend and UI changes
 include:
 
@@ -544,14 +767,14 @@ include:
   when document list is reloading ([jonaswinkler\#1297](https://github.com/jonaswinkler/paperless-ng/pull/1297)).
 - [\@shamoon](https://github.com/shamoon) improved the PDF viewer on
   mobile ([\#2](https://github.com/paperless-ngx/paperless-ngx/pull/2)).
-- [\@shamoon](https://github.com/shamoon) added \'any\' / \'all\' and
-  \'not\' filtering with tags ([\#10](https://github.com/paperless-ngx/paperless-ngx/pull/10)).
+- [\@shamoon](https://github.com/shamoon) added 'any' / 'all' and
+  'not' filtering with tags ([\#10](https://github.com/paperless-ngx/paperless-ngx/pull/10)).
 - [\@shamoon](https://github.com/shamoon) added warnings for unsaved
   changes, with smart edit buttons ([\#13](https://github.com/paperless-ngx/paperless-ngx/pull/13)).
 - [\@benjaminfrank](https://github.com/benjaminfrank) enabled a
   non-root access to port 80 via systemd ([\#18](https://github.com/paperless-ngx/paperless-ngx/pull/18)).
-- [\@tribut](https://github.com/tribut) added simple \"delete to
-  trash\" functionality ([\#24](https://github.com/paperless-ngx/paperless-ngx/pull/24)). See `PAPERLESS_TRASH_DIR`.
+- [\@tribut](https://github.com/tribut) added simple "delete to
+  trash" functionality ([\#24](https://github.com/paperless-ngx/paperless-ngx/pull/24)). See `PAPERLESS_TRASH_DIR`.
 - [\@amenk](https://github.com/amenk) fixed the search box overlay
   menu on mobile ([\#32](https://github.com/paperless-ngx/paperless-ngx/pull/32)).
 - [\@dblitt](https://github.com/dblitt) updated the login form to not
@@ -727,26 +950,22 @@ This is a maintenance release.
 - Changes
   - Firefox only: Highlight search query in PDF previews.
   - New URL pattern for accessing documents by ASN directly
-    (<http://>\<paperless\>/asn/123)
+    (<http://><paperless>/asn/123)
   - Added logging when executing pre\* and post-consume scripts.
   - Better error logging during document consumption.
   - Updated python dependencies.
-  - Automatically inserts typed text when opening \"Create new\"
+  - Automatically inserts typed text when opening "Create new"
     dialogs on the document details page.
 - Fixes
   - Fixed an issue with null characters in the document content.
 
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
 
 The changed to the full text searching require you to reindex your
-documents. _The docker image does this automatically, you don\'t need to
+documents. _The docker image does this automatically, you don't need to
 do anything._ To do this, execute the `document_index reindex`
 management command (see `administration-index`{.interpreted-text
 role="ref"}).
-:::
 
 ### paperless-ng 1.3.2
 
@@ -849,7 +1068,7 @@ This release contains new database migrations.
   worker processes of the web server. See
   `configuration-docker`{.interpreted-text role="ref"}.
 - Some more memory usage optimizations.
-- Don\'t show inbox statistics if no inbox tag is defined.
+- Don't show inbox statistics if no inbox tag is defined.
 
 ### paperless-ng 1.1.2
 
@@ -869,8 +1088,8 @@ This release contains new database migrations.
 
 This release contains new database migrations.
 
-- Fixed a bug in the sanity checker that would cause it to display \"x
-  not in list\" errors instead of actual issues.
+- Fixed a bug in the sanity checker that would cause it to display "x
+  not in list" errors instead of actual issues.
 - Fixed a bug with filename generation for archive filenames that
   would cause the archive files of two documents to overlap.
   - This happened when `PAPERLESS_FILENAME_FORMAT` is used and the
@@ -879,8 +1098,8 @@ This release contains new database migrations.
   - Paperless will now store the archive filename in the database as
     well instead of deriving it from the original filename, and use
     the same logic for detecting and avoiding filename clashes
-    that\'s also used for original filenames.
-  - The migrations will repair any missing archive files. If you\'re
+    that's also used for original filenames.
+  - The migrations will repair any missing archive files. If you're
     using tika, ensure that tika is running while performing the
     migration. Docker-compose will take care of that.
 - Fixed a bug with thumbnail regeneration when TIKA integration was
@@ -888,8 +1107,8 @@ This release contains new database migrations.
 - Added ASN as a placeholder field to the filename format.
 - The docker image now comes with built-in shortcuts for most
   management commands. These are now the recommended way to execute
-  management commands, since these also ensure that they\'re always
-  executed as the paperless user and you\'re less likely to run into
+  management commands, since these also ensure that they're always
+  executed as the paperless user and you're less likely to run into
   permission issues. See
   `utilities-management-commands`{.interpreted-text role="ref"}.
 
@@ -911,10 +1130,7 @@ This release contains new database migrations.
 - Live updates to document lists and saved views when new documents
   are added.
 
-  ::: {.hint}
-  ::: {.title}
-  Hint
-  :::
+  !!! tip
 
   For status notifications and live updates to work, paperless now
   requires an [ASGI](https://asgi.readthedocs.io/en/latest/)-enabled
@@ -937,7 +1153,6 @@ This release contains new database migrations.
 
   Apache `mod_wsgi` users, see
   `this note <faq-mod_wsgi>`{.interpreted-text role="ref"}.
-  :::
 
 - Paperless now offers suggestions for tags, correspondents and types
   on the document detail page.
@@ -961,8 +1176,8 @@ This release contains new database migrations.
   - Better icon for document previews.
   - Better info section in the side bar.
   - Paperless no longer logs to the database. Instead, logs are
-    written to rotating log files. This solves many \"database is
-    locked\" issues on Raspberry Pi, especially when SQLite is used.
+    written to rotating log files. This solves many "database is
+    locked" issues on Raspberry Pi, especially when SQLite is used.
   - By default, log files are written to `PAPERLESS_DATA_DIR/log/`.
     Logging settings can be adjusted with `PAPERLESS_LOGGING_DIR`,
     `PAPERLESS_LOGROTATE_MAX_SIZE` and
@@ -991,7 +1206,7 @@ bug reports coming in, I think that this is reasonably stable.
   - Range selection with shift clicking is now possible in the
     document list.
   - Filtering correspondent, type and tag management pages by name.
-  - Focus \"Name\" field in dialogs by default.
+  - Focus "Name" field in dialogs by default.
 
 ### paperless-ng 0.9.14
 
@@ -1053,8 +1268,8 @@ paperless.
   - Fixed an issue with filenames of downloaded files: Dates where
     off by one day due to timezone issues.
   - Searching will continue to work even when the index returns
-    non-existing documents. This resulted in \"Document does not
-    exist\" errors before. Instead, a warning is logged, indicating
+    non-existing documents. This resulted in "Document does not
+    exist" errors before. Instead, a warning is logged, indicating
     the issue.
   - An issue with the consumer crashing when invalid regular
     expression were used was fixed.
@@ -1095,11 +1310,11 @@ paperless.
     new ASN to a document.
   - Form field validation: When providing invalid input in a form
     (such as a duplicate ASN or no name), paperless now has visual
-    indicators and clearer error messages about what\'s wrong.
+    indicators and clearer error messages about what's wrong.
   - Paperless disables buttons with network actions (such as save
     and delete) when a network action is active. This indicates that
     something is happening and prevents double clicking.
-  - When using \"Save & next\", the title field is focussed
+  - When using "Save & next", the title field is focussed
     automatically to better support keyboard editing.
   - E-Mail: Added filter rule parameters to allow inline attachments
     (watch out for mails with inlined images!) and attachment
@@ -1108,11 +1323,11 @@ paperless.
     Shamoon](https://github.com/shamoon). This is useful for hiding
     Paperless behind single sign on applications such as
     [authelia](https://www.authelia.com/).
-  - \"Clear filters\" has been renamed to \"Reset filters\" and now
+  - "Clear filters" has been renamed to "Reset filters" and now
     correctly restores the default filters on saved views. Thanks to
     [Michael Shamoon](https://github.com/shamoon)
 - Fixes
-  - Paperless was unable to save views when \"Not assigned\" was
+  - Paperless was unable to save views when "Not assigned" was
     chosen in one of the filter dropdowns.
   - Clearer error messages when pre and post consumption scripts do
     not exist.
@@ -1128,7 +1343,7 @@ paperless.
 ### paperless-ng 0.9.10
 
 - Bulk editing
-  - Thanks to [Michael Shamoon](https://github.com/shamoon), we\'ve
+  - Thanks to [Michael Shamoon](https://github.com/shamoon), we've
     got a new interface for the bulk editor.
   - There are some configuration options in the settings to alter
     the behavior.
@@ -1137,7 +1352,7 @@ paperless.
     publishes a webmanifest, which is useful for adding the
     application to home screens on mobile devices.
   - The Paperless-ng logo now navigates to the dashboard.
-  - Filter for documents that don\'t have any correspondents, types
+  - Filter for documents that don't have any correspondents, types
     or tags assigned.
   - Tags, types and correspondents are now sorted case insensitive.
   - Lots of preparation work for localization support.
@@ -1151,10 +1366,7 @@ paperless.
   - The consumer used to stop working when encountering an
     incomplete classifier model file.
 
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
 
 The bulk delete operations did not update the search index. Therefore,
 documents that you deleted remained in the index and caused the search
@@ -1165,7 +1377,6 @@ However, this change is not retroactive: If you used the delete method
 of the bulk editor, you need to reindex your search index by
 `running the management command document_index with the argument reindex <administration-index>`{.interpreted-text
 role="ref"}.
-:::
 
 ### paperless-ng 0.9.9
 
@@ -1176,18 +1387,18 @@ Christmas release!
   - The following operations are available: Add and remove
     correspondents, tags, document types from selected documents, as
     well as mass-deleting documents.
-  - We\'ve got a more fancy UI in the works that makes these
-    features more accessible, but that\'s not quite ready yet.
+  - We've got a more fancy UI in the works that makes these
+    features more accessible, but that's not quite ready yet.
 - Searching
-  - Paperless now supports searching for similar documents (\"More
-    like this\") both from the document detail page as well as from
+  - Paperless now supports searching for similar documents ("More
+    like this") both from the document detail page as well as from
     individual search results.
   - A search score indicates how well a document matches the search
     query, or how similar a document is to a given reference
     document.
 - Other additions and changes
-  - Clarification in the UI that the fields \"Match\" and \"Is
-    insensitive\" are not relevant for the Auto matching algorithm.
+  - Clarification in the UI that the fields "Match" and "Is
+    insensitive" are not relevant for the Auto matching algorithm.
   - New select interface for tags, types and correspondents allows
     filtering. This also improves tag selection. Thanks again to
     [Michael Shamoon](https://github.com/shamoon)!
@@ -1268,11 +1479,11 @@ This release focusses primarily on many small issues with the UI.
   - Paperless now has proper window titles.
   - Fixed an issue with the small cards when more than 7 tags were
     used.
-  - Navigation of the \"Show all\" links adjusted. They navigate to
+  - Navigation of the "Show all" links adjusted. They navigate to
     the saved view now, if available in the sidebar.
   - Some indication on the document lists that a filter is active
     was added.
-  - There\'s a new filter to filter for documents that do _not_ have
+  - There's a new filter to filter for documents that do _not_ have
     a certain tag.
   - The file upload box now shows upload progress.
   - The document edit page was reorganized.
@@ -1297,15 +1508,11 @@ This release focusses primarily on many small issues with the UI.
     filenames anymore. It will rather append `_01`, `_02`, etc when
     it detects duplicate filenames.
 
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
 
 The changes to the filename format will apply to newly added documents
 and changed documents. If you want all files to reflect these changes,
 execute the `document_renamer` management command.
-:::
 
 ### paperless-ng 0.9.5
 
@@ -1388,7 +1595,7 @@ primarily.
     need to do this once, since the schema of the search index
     changed. Paperless keeps the index updated after that whenever
     something changes.
-  - Paperless now has spelling corrections (\"Did you mean\") for
+  - Paperless now has spelling corrections ("Did you mean") for
     miss-typed queries.
   - The documentation contains
     `information about the query syntax <basic-searching>`{.interpreted-text
@@ -1458,7 +1665,7 @@ primarily.
   role="ref"} This features will most likely be removed in future
   versions.
 - **Added:** New frontend. Features:
-  - Single page application: It\'s much more responsive than the
+  - Single page application: It's much more responsive than the
     django admin pages.
   - Dashboard. Shows recently scanned documents, or todo notes, or
     other documents at wish. Allows uploading of documents. Shows
@@ -1480,7 +1687,7 @@ primarily.
 - **Added:** Archive serial numbers. Assign these to quickly find
   documents stored in physical binders.
 - **Added:** Enabled the internal user management of django. This
-  isn\'t really a multi user solution, however, it allows more than
+  isn't really a multi user solution, however, it allows more than
   one user to access the website and set some basic permissions /
   renew passwords.
 - **Modified \[breaking\]:** All new mail consumer with customizable
@@ -1535,7 +1742,7 @@ primarily.
 - **Settings:**
   - `PAPERLESS_FORGIVING_OCR` is now default and gone. Reason: Even
     if `langdetect` fails to detect a language, tesseract still does
-    a very good job at ocr\'ing a document with the default
+    a very good job at ocr'ing a document with the default
     language. Certain language specifics such as umlauts may not get
     picked up properly.
   - `PAPERLESS_DEBUG` defaults to `false`.
@@ -1616,34 +1823,34 @@ primarily.
   [\#442](https://github.com/the-paperless-project/paperless/pull/442).
 - Added a `.editorconfig` file to better specify coding style.
 - [Joshua Taillon](https://github.com/jat255) also added some logic to
-  tie Paperless\' date guessing logic into how it parses file names on
+  tie Paperless' date guessing logic into how it parses file names on
   import.
   [\#440](https://github.com/the-paperless-project/paperless/pull/440)
 
 ### 2.5.0
 
 - **New dependency**: Paperless now optimises thumbnail generation
-  with [optipng](http://optipng.sourceforge.net/), so you\'ll need to
+  with [optipng](http://optipng.sourceforge.net/), so you'll need to
   install that somewhere in your PATH or declare its location in
   `PAPERLESS_OPTIPNG_BINARY`. The Docker image has already been
   updated on the Docker Hub, so you just need to pull the latest one
-  from there if you\'re a Docker user.
-- \"Login free\" instances of Paperless were breaking whenever you
+  from there if you're a Docker user.
+- "Login free" instances of Paperless were breaking whenever you
   tried to edit objects in the admin: adding/deleting tags or
-  correspondents, or even fixing spelling. This was due to the \"user
-  hack\" we were applying to sessions that weren\'t using a login, as
-  that hack user didn\'t have a valid id. The fix was to attribute the
+  correspondents, or even fixing spelling. This was due to the "user
+  hack" we were applying to sessions that weren't using a login, as
+  that hack user didn't have a valid id. The fix was to attribute the
   first user id in the system to this hack user.
   [\#394](https://github.com/the-paperless-project/paperless/issues/394)
 - A problem in how we handle slug values on Tags and Correspondents
   required a few changes to how we handle this field
   [\#393](https://github.com/the-paperless-project/paperless/issues/393):
-  1.  Slugs are no longer editable. They\'re derived from the name of
+  1.  Slugs are no longer editable. They're derived from the name of
       the tag or correspondent at save time, so if you wanna change
-      the slug, you have to change the name, and even then you\'re
+      the slug, you have to change the name, and even then you're
       restricted to the rules of the `slugify()` function. The slug
       value is still visible in the admin though.
-  2.  I\'ve added a migration to go over all existing tags &
+  2.  I've added a migration to go over all existing tags &
       correspondents and rewrite the `.slug` values to ones conforming
       to the `slugify()` rules.
   3.  The consumption process now uses the same rules as `.save()` in
@@ -1654,7 +1861,7 @@ primarily.
   Thanks to [Andrew Peng](https://github.com/pengc99) for reporting
   this.
   [\#414](https://github.com/the-paperless-project/paperless/issues/414).
-- A bug in the Dockerfile meant that Tesseract language files weren\'t
+- A bug in the Dockerfile meant that Tesseract language files weren't
   being installed correctly. [euri10](https://github.com/euri10) was
   quick to provide a fix:
   [\#406](https://github.com/the-paperless-project/paperless/issues/406),
@@ -1669,13 +1876,13 @@ primarily.
 ### 2.4.0
 
 - A new set of actions are now available thanks to
-  [jonaswinkler](https://github.com/jonaswinkler)\'s very first pull
+  [jonaswinkler](https://github.com/jonaswinkler)'s very first pull
   request! You can now do nifty things like tag documents in bulk, or
   set correspondents in bulk.
   [\#405](https://github.com/the-paperless-project/paperless/pull/405)
 - The import/export system is now a little smarter. By default,
   documents are tagged as `unencrypted`, since exports are by their
-  nature unencrypted. It\'s now in the import step that we decide the
+  nature unencrypted. It's now in the import step that we decide the
   storage type. This allows you to export from an encrypted system and
   import into an unencrypted one, or vice-versa.
 - The migration history has been slightly modified to accommodate
@@ -1693,7 +1900,7 @@ primarily.
 
 - Support for consuming plain text & markdown documents was added by
   [Joshua Taillon](https://github.com/jat255)! This was a
-  long-requested feature, and it\'s addition is likely to be greatly
+  long-requested feature, and it's addition is likely to be greatly
   appreciated by the community:
   [\#395](https://github.com/the-paperless-project/paperless/pull/395)
   Thanks also to [David Martin](https://github.com/ddddavidmartin) for
@@ -1734,7 +1941,7 @@ primarily.
   lots of different tags:
   [\#391](https://github.com/the-paperless-project/paperless/pull/391).
 - [Kilian Koeltzsch](https://github.com/kiliankoe) noticed a bug in
-  how we capture & automatically create tags, so that\'s fixed now
+  how we capture & automatically create tags, so that's fixed now
   too:
   [\#384](https://github.com/the-paperless-project/paperless/issues/384).
 - [erikarvstedt](https://github.com/erikarvstedt) tweaked the
@@ -1750,7 +1957,7 @@ primarily.
 - [Enno Lohmeier](https://github.com/elohmeier) added three simple
   features that make Paperless a lot more user (and developer)
   friendly:
-  1.  There\'s a new search box on the front page:
+  1.  There's a new search box on the front page:
       [\#374](https://github.com/the-paperless-project/paperless/pull/374).
   2.  The correspondents & tags pages now have a column showing the
       number of relevant documents:
@@ -1760,18 +1967,18 @@ primarily.
       environment:
       [\#376](https://github.com/the-paperless-project/paperless/pull/376).
 - You now also have the ability to customise the interface to your
-  heart\'s content by creating a file called `overrides.css` and/or
+  heart's content by creating a file called `overrides.css` and/or
   `overrides.js` in the root of your media directory. Thanks to [Mark
   McFate](https://github.com/SummittDweller) for this idea:
   [\#371](https://github.com/the-paperless-project/paperless/issues/371)
 
 ### 2.0.0
 
-This is a big release as we\'ve changed a core-functionality of
+This is a big release as we've changed a core-functionality of
 Paperless: we no longer encrypt files with GPG by default.
 
 The reasons for this are many, but it boils down to that the encryption
-wasn\'t really all that useful, as files on-disk were still accessible
+wasn't really all that useful, as files on-disk were still accessible
 so long as you had the key, and the key was most typically stored in the
 config file. In other words, your files are only as safe as the
 `paperless` user is. In addition to that, _the contents of the documents
@@ -1783,7 +1990,7 @@ explicitly set a passphrase in your config file.
 
 ### Migrating from 1.x
 
-Encryption isn\'t gone, it\'s just off for new users. So long as you
+Encryption isn't gone, it's just off for new users. So long as you
 have `PAPERLESS_PASSPHRASE` set in your config or your environment,
 Paperless should continue to operate as it always has. If however, you
 want to drop encryption too, you only need to do two things:
@@ -1813,7 +2020,7 @@ this big change.
   for more information.
 - Refactor the use of travis/tox/pytest/coverage into two files:
   `.travis.yml` and `setup.cfg`.
-- Start generating requirements.txt from a Pipfile. I\'ll probably
+- Start generating requirements.txt from a Pipfile. I'll probably
   switch over to just using pipenv in the future.
 - All for a alternative FreeBSD-friendly location for
   `paperless.conf`. Thanks to [Martin
@@ -1833,7 +2040,7 @@ this big change.
   [\#253](https://github.com/the-paperless-project/paperless/issues/253)
   and
   [\#323](https://github.com/the-paperless-project/paperless/issues/323),
-  we\'ve removed a few of the hardcoded URL values to make it easier
+  we've removed a few of the hardcoded URL values to make it easier
   for people to host Paperless on a subdirectory. Thanks to [Quentin
   Dawans](https://github.com/ovv) and [Kyle
   Lucy](https://github.com/kmlucy) for helping to work this out.
@@ -1846,7 +2053,7 @@ this big change.
   very creating Bash skills:
   [\#352](https://github.com/the-paperless-project/paperless/pull/352).
 - You can now use the search field to find documents by tag thanks to
-  [thinkjk](https://github.com/thinkjk)\'s _first ever issue_:
+  [thinkjk](https://github.com/thinkjk)'s _first ever issue_:
   [\#354](https://github.com/the-paperless-project/paperless/issues/354).
 - Inotify is now being used to detect additions to the consume
   directory thanks to some excellent work from
@@ -1855,7 +2062,7 @@ this big change.
 
 ### 1.3.0
 
-- You can now run Paperless without a login, though you\'ll still have
+- You can now run Paperless without a login, though you'll still have
   to create at least one user. This is thanks to a pull-request from
   [matthewmoto](https://github.com/matthewmoto):
   [\#295](https://github.com/the-paperless-project/paperless/pull/295).
@@ -1886,7 +2093,7 @@ this big change.
   [\#312](https://github.com/the-paperless-project/paperless/pull/312)
   to fix
   [\#306](https://github.com/the-paperless-project/paperless/issues/306).
-- Patch the historical migrations to support MySQL\'s um,
+- Patch the historical migrations to support MySQL's um,
   _interesting_ way of handing indexes
   ([\#308](https://github.com/the-paperless-project/paperless/issues/308)).
   Thanks to [Simon Taddiken](https://github.com/skuzzle) for reporting
@@ -1908,7 +2115,7 @@ this big change.
   already contains text. This can be overridden by setting
   `PAPERLESS_OCR_ALWAYS=YES` either in your `paperless.conf` or in the
   environment. Note that this also means that Paperless now requires
-  `libpoppler-cpp-dev` to be installed. **Important**: You\'ll need to
+  `libpoppler-cpp-dev` to be installed. **Important**: You'll need to
   run `pip install -r requirements.txt` after the usual `git pull` to
   properly update.
 - [BastianPoe](https://github.com/BastianPoe) has also contributed a
@@ -1935,7 +2142,7 @@ this big change.
 
 ### 1.0.0
 
-- Upgrade to Django 1.11. **You\'ll need to run \`\`pip install -r
+- Upgrade to Django 1.11. **You'll need to run \`\`pip install -r
   requirements.txt\`\` after the usual \`\`git pull\`\` to properly
   update**.
 - Replace the templatetag-based hack we had for document listing in
@@ -1956,14 +2163,14 @@ this big change.
   [Pit](https://github.com/pitkley) on
   [\#268](https://github.com/the-paperless-project/paperless/pull/268).
 - Date fields in the admin are now expressed as HTML5 date fields
-  thanks to [Lukas Winkler](https://github.com/Findus23)\'s issue
+  thanks to [Lukas Winkler](https://github.com/Findus23)'s issue
   [\#278](https://github.com/the-paperless-project/paperless/issues/248)
 
 ### 0.8.0
 
 - Paperless can now run in a subdirectory on a host (`/paperless`),
   rather than always running in the root (`/`) thanks to
-  [maphy-psd](https://github.com/maphy-psd)\'s work on
+  [maphy-psd](https://github.com/maphy-psd)'s work on
   [\#255](https://github.com/the-paperless-project/paperless/pull/255).
 
 ### 0.7.0
@@ -1972,14 +2179,14 @@ this big change.
   [\#235](https://github.com/the-paperless-project/paperless/issues/235),
   Paperless will no longer automatically delete documents attached to
   correspondents when those correspondents are themselves deleted.
-  This was Django\'s default behaviour, but didn\'t make much sense in
-  Paperless\' case. Thanks to [Thomas
+  This was Django's default behaviour, but didn't make much sense in
+  Paperless' case. Thanks to [Thomas
   Brueggemann](https://github.com/thomasbrueggemann) and [David
   Martin](https://github.com/ddddavidmartin) for their input on this
   one.
 - Fix for
   [\#232](https://github.com/the-paperless-project/paperless/issues/232)
-  wherein Paperless wasn\'t recognising `.tif` files properly. Thanks
+  wherein Paperless wasn't recognising `.tif` files properly. Thanks
   to [ayounggun](https://github.com/ayounggun) for reporting this one
   and to [Kusti Skytén](https://github.com/kskyten) for posting the
   correct solution in the Github issue.
@@ -1990,12 +2197,12 @@ this big change.
   favour of BasicAuth or Django session.
 - Fix the POST API so it actually works.
   [\#236](https://github.com/the-paperless-project/paperless/issues/236)
-- **Breaking change**: We\'ve dropped the use of
+- **Breaking change**: We've dropped the use of
   `PAPERLESS_SHARED_SECRET` as it was being used both for the API (now
-  replaced with a normal auth) and form email polling. Now that we\'re
+  replaced with a normal auth) and form email polling. Now that we're
   only using it for email, this variable has been renamed to
   `PAPERLESS_EMAIL_SECRET`. The old value will still work for a while,
-  but you should change your config if you\'ve been using the email
+  but you should change your config if you've been using the email
   polling feature. Thanks to [Joshua
   Gilman](https://github.com/jmgilman) for all the help with this
   feature.
@@ -2003,7 +2210,7 @@ this big change.
 ### 0.5.0
 
 - Support for fuzzy matching in the auto-tagger & auto-correspondent
-  systems thanks to [Jake Gysland](https://github.com/jgysland)\'s
+  systems thanks to [Jake Gysland](https://github.com/jgysland)'s
   patch
   [\#220](https://github.com/the-paperless-project/paperless/pull/220).
 - Modified the Dockerfile to prepare an export directory
@@ -2032,7 +2239,7 @@ this big change.
 
 - Fix for
   [\#206](https://github.com/the-paperless-project/paperless/issues/206)
-  wherein the pluggable parser didn\'t recognise files with all-caps
+  wherein the pluggable parser didn't recognise files with all-caps
   suffixes like `.PDF`
 
 ### 0.4.0
@@ -2042,7 +2249,7 @@ this big change.
   for more information, but the short explanation is that you can now
   attach simple notes & times to documents which are made available
   via the API. Currently, the default API (basically just the Django
-  admin) doesn\'t really make use of this, but [Thomas
+  admin) doesn't really make use of this, but [Thomas
   Brueggemann](https://github.com/thomasbrueggemann) over at
   [Paperless
   Desktop](https://github.com/thomasbrueggemann/paperless-desktop) has
@@ -2052,16 +2259,16 @@ this big change.
 
 - Fix for
   [\#200](https://github.com/the-paperless-project/paperless/issues/200)
-  (!!) where the API wasn\'t configured to allow updating the
+  (!!) where the API wasn't configured to allow updating the
   correspondent or the tags for a document.
 - The `content` field is now optional, to allow for the edge case of a
   purely graphical document.
 - You can no longer add documents via the admin. This never worked in
-  the first place, so all I\'ve done here is remove the link to the
+  the first place, so all I've done here is remove the link to the
   broken form.
 - The consumer code has been heavily refactored to support a pluggable
   interface. Install a paperless consumer via pip and tell paperless
-  about it with an environment variable, and you\'re good to go.
+  about it with an environment variable, and you're good to go.
   Proper documentation is on its way.
 
 ### 0.3.5
@@ -2082,10 +2289,10 @@ this big change.
 - Removal of django-suit due to a licensing conflict I bumped into in
   0.3.3. Note that you _can_ use Django Suit with Paperless, but only
   in a non-profit situation as their free license prohibits for-profit
-  use. As a result, I can\'t bundle Suit with Paperless without
+  use. As a result, I can't bundle Suit with Paperless without
   conflicting with the GPL. Further development will be done against
   the stock Django admin.
-- I shrunk the thumbnails a little \'cause they were too big for me,
+- I shrunk the thumbnails a little 'cause they were too big for me,
   even on my high-DPI monitor.
 - BasicAuth support for document and thumbnail downloads, as well as
   the Push API thanks to \@thomasbrueggemann. See
@@ -2112,14 +2319,14 @@ this big change.
 ### 0.3.0
 
 - Updated to using django-filter 1.x
-- Added some system checks so new users aren\'t confused by
+- Added some system checks so new users aren't confused by
   misconfigurations.
 - Consumer loop time is now configurable for systems with slow writes.
   Just set `PAPERLESS_CONSUMER_LOOP_TIME` to a number of seconds. The
   default is 10.
 - As per
   [\#44](https://github.com/the-paperless-project/paperless/issues/44),
-  we\'ve removed support for `PAPERLESS_CONVERT`, `PAPERLESS_CONSUME`,
+  we've removed support for `PAPERLESS_CONVERT`, `PAPERLESS_CONSUME`,
   and `PAPERLESS_SECRET`. Please use `PAPERLESS_CONVERT_BINARY`,
   `PAPERLESS_CONSUMPTION_DIR`, and `PAPERLESS_SHARED_SECRET`
   respectively instead.
@@ -2134,17 +2341,17 @@ this big change.
 - [\#146](https://github.com/the-paperless-project/paperless/issues/146):
   Fixed a bug that allowed unauthorised access to the `/fetch` URL.
 - [\#131](https://github.com/the-paperless-project/paperless/issues/131):
-  Document files are now automatically removed from disk when they\'re
+  Document files are now automatically removed from disk when they're
   deleted in Paperless.
 - [\#121](https://github.com/the-paperless-project/paperless/issues/121):
-  Fixed a bug where Paperless wasn\'t setting document creation time
+  Fixed a bug where Paperless wasn't setting document creation time
   based on the file naming scheme.
 - [\#81](https://github.com/the-paperless-project/paperless/issues/81):
   Added a hook to run an arbitrary script after every document is
   consumed.
 - [\#98](https://github.com/the-paperless-project/paperless/issues/98):
   Added optional environment variables for ImageMagick so that it
-  doesn\'t explode when handling Very Large Documents or when it\'s
+  doesn't explode when handling Very Large Documents or when it's
   just running on a low-memory system. Thanks to [Florian
   Harr](https://github.com/evils) for his help on this one.
 - [\#89](https://github.com/the-paperless-project/paperless/issues/89)
@@ -2163,8 +2370,8 @@ this big change.
 
 ### 0.1.1
 
-- Potentially **Breaking Change**: All references to \"sender\" in the
-  code have been renamed to \"correspondent\" to better reflect the
+- Potentially **Breaking Change**: All references to "sender" in the
+  code have been renamed to "correspondent" to better reflect the
   nature of the property (one could quite reasonably scan a document
   before sending it to someone.)
 - [\#67](https://github.com/the-paperless-project/paperless/issues/67):
@@ -2178,7 +2385,7 @@ this big change.
   contributing conversation that lead to this change.
 - [\#20](https://github.com/the-paperless-project/paperless/issues/20):
   Added _unpaper_ support to help in cleaning up the scanned image
-  before it\'s OCR\'d. Thanks to [Pit](https://github.com/pitkley) for
+  before it's OCR'd. Thanks to [Pit](https://github.com/pitkley) for
   this one.
 - [\#71](https://github.com/the-paperless-project/paperless/issues/71)
   Added (encrypted) thumbnails in anticipation of a proper UI.
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644 (file)
index 096ccc1..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-import sphinx_rtd_theme
-
-
-__version__ = None
-__full_version_str__ = None
-__major_minor_version_str__ = None
-exec(open("../src/paperless/version.py").read())
-
-
-extensions = [
-    "sphinx.ext.autodoc",
-    "sphinx.ext.intersphinx",
-    "sphinx.ext.todo",
-    "sphinx.ext.imgmath",
-    "sphinx.ext.viewcode",
-    "sphinx_rtd_theme",
-    "myst_parser",
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# The suffix of source filenames.
-source_suffix = {
-    ".rst": "restructuredtext",
-    ".md": "markdown",
-}
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = "index"
-
-# General information about the project.
-project = "Paperless-ngx"
-copyright = "2015-2022, Daniel Quinn, Jonas Winkler, and the paperless-ngx team"
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-
-#
-# If the build process ever explodes here, it's because you've set the version
-# number in paperless.version to a tuple with 3 numbers in it.
-#
-
-# The short X.Y version.
-version = __major_minor_version_str__
-# The full version, including alpha/beta/rc tags.
-release = __full_version_str__
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-# language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ["_build"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-html_theme = "sphinx_rtd_theme"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-# html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-# html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-# html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
-# These paths are either relative to html_static_path
-# or fully qualified paths (eg. https://...)
-html_css_files = [
-    "css/custom.css",
-]
-
-html_js_files = [
-    "js/darkmode.js",
-]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "paperless"
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-    # The paper size ('letterpaper' or 'a4paper').
-    #'papersize': 'letterpaper',
-    # The font size ('10pt', '11pt' or '12pt').
-    #'pointsize': '10pt',
-    # Additional stuff for the LaTeX preamble.
-    #'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-#  author, documentclass [howto, manual, or own class]).
-latex_documents = [
-    ("index", "paperless.tex", "Paperless Documentation", "Daniel Quinn", "manual"),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [("index", "paperless", "Paperless Documentation", ["Daniel Quinn"], 1)]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-    (
-        "index",
-        "Paperless",
-        "Paperless Documentation",
-        "Daniel Quinn",
-        "paperless",
-        "Scan, index, and archive all of your paper documents.",
-        "Miscellaneous",
-    ),
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-
-# -- Options for Epub output ----------------------------------------------
-
-# Bibliographic Dublin Core info.
-epub_title = "Paperless"
-epub_author = "Daniel Quinn"
-epub_publisher = "Daniel Quinn"
-epub_copyright = "2015, Daniel Quinn"
-
-# The basename for the epub file. It defaults to the project name.
-# epub_basename = u'Paperless'
-
-# The HTML theme for the epub output. Since the default themes are not optimized
-# for small screen space, using the same theme for HTML and epub output is
-# usually not wise. This defaults to 'epub', a theme designed to save visual
-# space.
-# epub_theme = 'epub'
-
-# The language of the text. It defaults to the language option
-# or en if the language is not set.
-# epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-# epub_scheme = ''
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-# epub_identifier = ''
-
-# A unique identification for the text.
-# epub_uid = ''
-
-# A tuple containing the cover image and cover page html template filenames.
-# epub_cover = ()
-
-# A sequence of (type, uri, title) tuples for the guide element of content.opf.
-# epub_guide = ()
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-# epub_pre_files = []
-
-# HTML files shat should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-# epub_post_files = []
-
-# A list of files that should not be packed into the epub file.
-epub_exclude_files = ["search.html"]
-
-# The depth of the table of contents in toc.ncx.
-# epub_tocdepth = 3
-
-# Allow duplicate toc entries.
-# epub_tocdup = True
-
-# Choose between 'default' and 'includehidden'.
-# epub_tocscope = 'default'
-
-# Fix unsupported image types using the PIL.
-# epub_fix_images = False
-
-# Scale large images.
-# epub_max_image_width = 0
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# epub_show_urls = 'inline'
-
-# If false, no index is generated.
-# epub_use_index = True
-
-
-# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {"http://docs.python.org/": None}
diff --git a/docs/configuration.md b/docs/configuration.md
new file mode 100644 (file)
index 0000000..bcde72e
--- /dev/null
@@ -0,0 +1,1036 @@
+# Configuration
+
+Paperless provides a wide range of customizations. Depending on how you
+run paperless, these settings have to be defined in different places.
+
+- If you run paperless on docker, `paperless.conf` is not used.
+  Rather, configure paperless by copying necessary options to
+  `docker-compose.env`.
+
+- If you are running paperless on anything else, paperless will search
+  for the configuration file in these locations and use the first one
+  it finds:
+
+  ```
+  /path/to/paperless/paperless.conf
+  /etc/paperless.conf
+  /usr/local/etc/paperless.conf
+  ```
+
+## Required services
+
+`PAPERLESS_REDIS=<url>`
+
+: This is required for processing scheduled tasks such as email
+fetching, index optimization and for training the automatic document
+matcher.
+
+    -   If your Redis server needs login credentials PAPERLESS_REDIS =
+        `redis://<username>:<password>@<host>:<port>`
+    -   With the requirepass option PAPERLESS_REDIS =
+        `redis://:<password>@<host>:<port>`
+
+    [More information on securing your Redis
+    Instance](https://redis.io/docs/getting-started/#securing-redis).
+
+    Defaults to <redis://localhost:6379>.
+
+`PAPERLESS_DBENGINE=<engine_name>`
+
+: Optional, gives the ability to choose Postgres or MariaDB for
+database engine. Available options are [postgresql]{.title-ref} and
+[mariadb]{.title-ref}.
+
+    Default is [postgresql]{.title-ref}.
+
+    !!! warning
+
+        Using MariaDB comes with some caveats. See [MySQL Caveats](advanced_usage#mysql-caveats).
+
+`PAPERLESS_DBHOST=<hostname>`
+
+: By default, sqlite is used as the database backend. This can be
+changed here.
+
+    Set PAPERLESS_DBHOST and another database will be used instead of
+    sqlite.
+
+`PAPERLESS_DBPORT=<port>`
+
+: Adjust port if necessary.
+
+    Default is 5432.
+
+`PAPERLESS_DBNAME=<name>`
+
+: Database name in PostgreSQL or MariaDB.
+
+    Defaults to "paperless".
+
+`PAPERLESS_DBUSER=<name>`
+
+: Database user in PostgreSQL or MariaDB.
+
+    Defaults to "paperless".
+
+`PAPERLESS_DBPASS=<password>`
+
+: Database password for PostgreSQL or MariaDB.
+
+    Defaults to "paperless".
+
+`PAPERLESS_DBSSLMODE=<mode>`
+
+: SSL mode to use when connecting to PostgreSQL.
+
+    See [the official documentation about
+    sslmode](https://www.postgresql.org/docs/current/libpq-ssl.html).
+
+    Default is `prefer`.
+
+`PAPERLESS_DB_TIMEOUT=<float>`
+
+: Amount of time for a database connection to wait for the database to
+unlock. Mostly applicable for an sqlite based installation, consider
+changing to postgresql if you need to increase this.
+
+    Defaults to unset, keeping the Django defaults.
+
+## Paths and folders
+
+`PAPERLESS_CONSUMPTION_DIR=<path>`
+
+: This where your documents should go to be consumed. Make sure that
+it exists and that the user running the paperless service can
+read/write its contents before you start Paperless.
+
+    Don't change this when using docker, as it only changes the path
+    within the container. Change the local consumption directory in the
+    docker-compose.yml file instead.
+
+    Defaults to "../consume/", relative to the "src" directory.
+
+`PAPERLESS_DATA_DIR=<path>`
+
+: This is where paperless stores all its data (search index, SQLite
+database, classification model, etc).
+
+    Defaults to "../data/", relative to the "src" directory.
+
+`PAPERLESS_TRASH_DIR=<path>`
+
+: Instead of removing deleted documents, they are moved to this
+directory.
+
+    This must be writeable by the user running paperless. When running
+    inside docker, ensure that this path is within a permanent volume
+    (such as "../media/trash") so it won't get lost on upgrades.
+
+    Defaults to empty (i.e. really delete documents).
+
+`PAPERLESS_MEDIA_ROOT=<path>`
+
+: This is where your documents and thumbnails are stored.
+
+    You can set this and PAPERLESS_DATA_DIR to the same folder to have
+    paperless store all its data within the same volume.
+
+    Defaults to "../media/", relative to the "src" directory.
+
+`PAPERLESS_STATICDIR=<path>`
+
+: Override the default STATIC_ROOT here. This is where all static
+files created using "collectstatic" manager command are stored.
+
+    Unless you're doing something fancy, there is no need to override
+    this.
+
+    Defaults to "../static/", relative to the "src" directory.
+
+`PAPERLESS_FILENAME_FORMAT=<format>`
+
+: Changes the filenames paperless uses to store documents in the media
+directory. See [File name handling](advanced_usage#file_name_handling) for details.
+
+    Default is none, which disables this feature.
+
+`PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>`
+
+: Tells paperless to replace placeholders in
+[PAPERLESS_FILENAME_FORMAT]{.title-ref} that would resolve to
+'none' to be omitted from the resulting filename. This also holds
+true for directory names. See [File name handling](advanced_usage#file_name_handling) for
+details.
+
+    Defaults to [false]{.title-ref} which disables this feature.
+
+`PAPERLESS_LOGGING_DIR=<path>`
+
+: This is where paperless will store log files.
+
+    Defaults to "`PAPERLESS_DATA_DIR`/log/".
+
+## Logging
+
+`PAPERLESS_LOGROTATE_MAX_SIZE=<num>`
+
+: Maximum file size for log files before they are rotated, in bytes.
+
+    Defaults to 1 MiB.
+
+`PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>`
+
+: Number of rotated log files to keep.
+
+    Defaults to 20.
+
+## Hosting & Security {#hosting-and-security}
+
+`PAPERLESS_SECRET_KEY=<key>`
+
+: Paperless uses this to make session tokens. If you expose paperless
+on the internet, you need to change this, since the default secret
+is well known.
+
+    Use any sequence of characters. The more, the better. You don't
+    need to remember this. Just face-roll your keyboard.
+
+    Default is listed in the file `src/paperless/settings.py`.
+
+`PAPERLESS_URL=<url>`
+
+: This setting can be used to set the three options below
+(ALLOWED_HOSTS, CORS_ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS). If the
+other options are set the values will be combined with this one. Do
+not include a trailing slash. E.g. <https://paperless.domain.com>
+
+    Defaults to empty string, leaving the other settings unaffected.
+
+`PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list>`
+
+: A list of trusted origins for unsafe requests (e.g. POST). As of
+Django 4.0 this is required to access the Django admin via the web.
+See
+<https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins>
+
+    Can also be set using PAPERLESS_URL (see above).
+
+    Defaults to empty string, which does not add any origins to the
+    trusted list.
+
+`PAPERLESS_ALLOWED_HOSTS=<comma-separated-list>`
+
+: If you're planning on putting Paperless on the open internet, then
+you really should set this value to the domain name you're using.
+Failing to do so leaves you open to HTTP host header attacks:
+<https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation>
+
+    Just remember that this is a comma-separated list, so
+    "example.com" is fine, as is "example.com,www.example.com", but
+    NOT " example.com" or "example.com,"
+
+    Can also be set using PAPERLESS_URL (see above).
+
+    If manually set, please remember to include "localhost". Otherwise
+    docker healthcheck will fail.
+
+    Defaults to "\*", which is all hosts.
+
+`PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list>`
+
+: You need to add your servers to the list of allowed hosts that can
+do CORS calls. Set this to your public domain name.
+
+    Can also be set using PAPERLESS_URL (see above).
+
+    Defaults to "<http://localhost:8000>".
+
+`PAPERLESS_FORCE_SCRIPT_NAME=<path>`
+
+: To host paperless under a subpath url like example.com/paperless you
+set this value to /paperless. No trailing slash!
+
+    Defaults to none, which hosts paperless at "/".
+
+`PAPERLESS_STATIC_URL=<path>`
+
+: Override the STATIC_URL here. Unless you're hosting Paperless off a
+subdomain like /paperless/, you probably don't need to change this.
+If you do change it, be sure to include the trailing slash.
+
+    Defaults to "/static/".
+
+    !!! note
+
+        When hosting paperless behind a reverse proxy like Traefik or Nginx
+        at a subpath e.g. example.com/paperlessngx you will also need to set
+        `PAPERLESS_FORCE_SCRIPT_NAME` (see above).
+
+`PAPERLESS_AUTO_LOGIN_USERNAME=<username>`
+
+: Specify a username here so that paperless will automatically perform
+login with the selected user.
+
+    !!! danger
+
+        Do not use this when exposing paperless on the internet. There are
+        no checks in place that would prevent you from doing this.
+
+    Defaults to none, which disables this feature.
+
+`PAPERLESS_ADMIN_USER=<username>`
+
+: If this environment variable is specified, Paperless automatically
+creates a superuser with the provided username at start. This is
+useful in cases where you can not run the
+[createsuperuser]{.title-ref} command separately, such as Kubernetes
+or AWS ECS.
+
+    Requires [PAPERLESS_ADMIN_PASSWORD]{.title-ref} to be set.
+
+    !!! note
+
+        This will not change an existing \[super\]user's password, nor will
+        it recreate a user that already exists. You can leave this
+        throughout the lifecycle of the containers.
+
+`PAPERLESS_ADMIN_MAIL=<email>`
+
+: (Optional) Specify superuser email address. Only used when
+[PAPERLESS_ADMIN_USER]{.title-ref} is set.
+
+    Defaults to `root@localhost`.
+
+`PAPERLESS_ADMIN_PASSWORD=<password>`
+
+: Only used when [PAPERLESS_ADMIN_USER]{.title-ref} is set. This will
+be the password of the automatically created superuser.
+
+`PAPERLESS_COOKIE_PREFIX=<str>`
+
+: Specify a prefix that is added to the cookies used by paperless to
+identify the currently logged in user. This is useful for when
+you're running two instances of paperless on the same host.
+
+    After changing this, you will have to login again.
+
+    Defaults to `""`, which does not alter the cookie names.
+
+`PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>`
+
+: Allows authentication via HTTP_REMOTE_USER which is used by some SSO
+applications.
+
+    !!! warning
+
+        This will allow authentication by simply adding a
+        `Remote-User: <username>` header to a request. Use with care! You
+        especially *must:   ensure that any such header is not passed from
+        your proxy server to paperless.
+
+        If you're exposing paperless to the internet directly, do not use
+        this.
+
+        Also see the warning [in the official documentation
+        <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>]{.title-ref}.
+
+    Defaults to [false]{.title-ref} which disables this feature.
+
+`PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>`
+
+: If [PAPERLESS_ENABLE_HTTP_REMOTE_USER]{.title-ref} is enabled, this
+property allows to customize the name of the HTTP header from which
+the authenticated username is extracted. Values are in terms of
+\[HttpRequest.META\](<https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META>).
+Thus, the configured value must start with [HTTP\_]{.title-ref}
+followed by the normalized actual header name.
+
+    Defaults to [HTTP_REMOTE_USER]{.title-ref}.
+
+`PAPERLESS_LOGOUT_REDIRECT_URL=<str>`
+
+: URL to redirect the user to after a logout. This can be used
+together with [PAPERLESS_ENABLE_HTTP_REMOTE_USER]{.title-ref} to
+redirect the user back to the SSO application's logout page.
+
+    Defaults to None, which disables this feature.
+
+## OCR settings {#ocr}
+
+Paperless uses [OCRmyPDF](https://ocrmypdf.readthedocs.io/en/latest/)
+for performing OCR on documents and images. Paperless uses sensible
+defaults for most settings, but all of them can be configured to your
+needs.
+
+`PAPERLESS_OCR_LANGUAGE=<lang>`
+
+: Customize the language that paperless will attempt to use when
+parsing documents.
+
+    It should be a 3-letter language code consistent with ISO 639:
+    <https://www.loc.gov/standards/iso639-2/php/code_list.php>
+
+    Set this to the language most of your documents are written in.
+
+    This can be a combination of multiple languages such as `deu+eng`,
+    in which case tesseract will use whatever language matches best.
+    Keep in mind that tesseract uses much more cpu time with multiple
+    languages enabled.
+
+    Defaults to "eng".
+
+    !!! note
+
+        If your language contains a '-' such as chi-sim, you must use chi_sim
+
+`PAPERLESS_OCR_MODE=<mode>`
+
+: Tell paperless when and how to perform ocr on your documents. Four
+modes are available:
+
+    -   `skip`: Paperless skips all pages and will perform ocr only on
+        pages where no text is present. This is the safest option.
+
+    -   `skip_noarchive`: In addition to skip, paperless won't create
+        an archived version of your documents when it finds any text in
+        them. This is useful if you don't want to have two
+        almost-identical versions of your digital documents in the media
+        folder. This is the fastest option.
+
+    -   `redo`: Paperless will OCR all pages of your documents and
+        attempt to replace any existing text layers with new text. This
+        will be useful for documents from scanners that already
+        performed OCR with insufficient results. It will also perform
+        OCR on purely digital documents.
+
+        This option may fail on some documents that have features that
+        cannot be removed, such as forms. In this case, the text from
+        the document is used instead.
+
+    -   `force`: Paperless rasterizes your documents, converting any
+        text into images and puts the OCRed text on top. This works for
+        all documents, however, the resulting document may be
+        significantly larger and text won't appear as sharp when zoomed
+        in.
+
+    The default is `skip`, which only performs OCR when necessary and
+    always creates archived documents.
+
+    Read more about this in the [OCRmyPDF
+    documentation](https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped).
+
+`PAPERLESS_OCR_CLEAN=<mode>`
+
+: Tells paperless to use `unpaper` to clean any input document before
+sending it to tesseract. This uses more resources, but generally
+results in better OCR results. The following modes are available:
+
+    -   `clean`: Apply unpaper.
+    -   `clean-final`: Apply unpaper, and use the cleaned images to
+        build the output file instead of the original images.
+    -   `none`: Do not apply unpaper.
+
+    Defaults to `clean`.
+
+    !!! note
+
+        `clean-final` is incompatible with ocr mode `redo`. When both
+        `clean-final` and the ocr mode `redo` is configured, `clean` is used
+        instead.
+
+`PAPERLESS_OCR_DESKEW=<bool>`
+
+: Tells paperless to correct skewing (slight rotation of input images
+mainly due to improper scanning)
+
+    Defaults to `true`, which enables this feature.
+
+    !!! note
+
+        Deskewing is incompatible with ocr mode `redo`. Deskewing will get
+        disabled automatically if `redo` is used as the ocr mode.
+
+`PAPERLESS_OCR_ROTATE_PAGES=<bool>`
+
+: Tells paperless to correct page rotation (90°, 180° and 270°
+rotation).
+
+    If you notice that paperless is not rotating incorrectly rotated
+    pages (or vice versa), try adjusting the threshold up or down (see
+    below).
+
+    Defaults to `true`, which enables this feature.
+
+`PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>`
+
+: Adjust the threshold for automatic page rotation by
+`PAPERLESS_OCR_ROTATE_PAGES`. This is an arbitrary value reported by
+tesseract. "15" is a very conservative value, whereas "2" is a
+very aggressive option and will often result in correctly rotated
+pages being rotated as well.
+
+    Defaults to "12".
+
+`PAPERLESS_OCR_OUTPUT_TYPE=<type>`
+
+: Specify the the type of PDF documents that paperless should produce.
+
+    -   `pdf`: Modify the PDF document as little as possible.
+    -   `pdfa`: Convert PDF documents into PDF/A-2b documents, which is
+        a subset of the entire PDF specification and meant for storing
+        documents long term.
+    -   `pdfa-1`, `pdfa-2`, `pdfa-3` to specify the exact version of
+        PDF/A you wish to use.
+
+    If not specified, `pdfa` is used. Remember that paperless also keeps
+    the original input file as well as the archived version.
+
+`PAPERLESS_OCR_PAGES=<num>`
+
+: Tells paperless to use only the specified amount of pages for OCR.
+Documents with less than the specified amount of pages get OCR'ed
+completely.
+
+    Specifying 1 here will only use the first page.
+
+    When combined with `PAPERLESS_OCR_MODE=redo` or
+    `PAPERLESS_OCR_MODE=force`, paperless will not modify any text it
+    finds on excluded pages and copy it verbatim.
+
+    Defaults to 0, which disables this feature and always uses all
+    pages.
+
+`PAPERLESS_OCR_IMAGE_DPI=<num>`
+
+: Paperless will OCR any images you put into the system and convert
+them into PDF documents. This is useful if your scanner produces
+images. In order to do so, paperless needs to know the DPI of the
+image. Most images from scanners will have this information embedded
+and paperless will detect and use that information. In case this
+fails, it uses this value as a fallback.
+
+    Set this to the DPI your scanner produces images at.
+
+    Default is none, which will automatically calculate image DPI so
+    that the produced PDF documents are A4 sized.
+
+`PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>`
+
+: Paperless will raise a warning when OCRing images which are over
+this limit and will not OCR images which are more than twice this
+limit. Note this does not prevent the document from being consumed,
+but could result in missing text content.
+
+    If unset, will default to the value determined by
+    [Pillow](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.MAX_IMAGE_PIXELS).
+
+    !!! note
+
+        Increasing this limit could cause Paperless to consume additional
+        resources when consuming a file. Be sure you have sufficient system
+        resources.
+
+    !!! warning
+
+        The limit is intended to prevent malicious files from consuming
+        system resources and causing crashes and other errors. Only increase
+        this value if you are certain your documents are not malicious and
+        you need the text which was not OCRed
+
+`PAPERLESS_OCR_USER_ARGS=<json>`
+
+: OCRmyPDF offers many more options. Use this parameter to specify any
+additional arguments you wish to pass to OCRmyPDF. Since Paperless
+uses the API of OCRmyPDF, you have to specify these in a format that
+can be passed to the API. See [the API reference of
+OCRmyPDF](https://ocrmypdf.readthedocs.io/en/latest/api.html#reference)
+for valid parameters. All command line options are supported, but
+they use underscores instead of dashes.
+
+    !!! warning
+
+        Paperless has been tested to work with the OCR options provided
+        above. There are many options that are incompatible with each other,
+        so specifying invalid options may prevent paperless from consuming
+        any documents.
+
+    Specify arguments as a JSON dictionary. Keep note of lower case
+    booleans and double quoted parameter names and strings. Examples:
+
+    ``` json
+    {"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
+    ```
+
+## Tika settings {#tika}
+
+Paperless can make use of [Tika](https://tika.apache.org/) and
+[Gotenberg](https://gotenberg.dev/) for parsing and converting
+"Office" documents (such as ".doc", ".xlsx" and ".odt").
+Tika and Gotenberg are also needed to allow parsing of E-Mails (.eml).
+
+If you wish to use this, you must provide a Tika server and a Gotenberg server,
+configure their endpoints, and enable the feature.
+
+`PAPERLESS_TIKA_ENABLED=<bool>`
+
+: Enable (or disable) the Tika parser.
+
+    Defaults to false.
+
+`PAPERLESS_TIKA_ENDPOINT=<url>`
+
+: Set the endpoint URL were Paperless can reach your Tika server.
+
+    Defaults to "<http://localhost:9998>".
+
+`PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>`
+
+: Set the endpoint URL were Paperless can reach your Gotenberg server.
+
+    Defaults to "<http://localhost:3000>".
+
+If you run paperless on docker, you can add those services to the
+docker-compose file (see the provided `docker-compose.sqlite-tika.yml`
+file for reference). The changes requires are as follows:
+
+```yaml
+services:
+  # ...
+
+  webserver:
+    # ...
+
+    environment:
+      # ...
+
+      PAPERLESS_TIKA_ENABLED: 1
+      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
+      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
+
+    # ...
+
+    gotenberg:
+      image: gotenberg/gotenberg:7.6
+      restart: unless-stopped
+      # The gotenberg chromium route is used to convert .eml files. We do not
+      # want to allow external content like tracking pixels or even javascript.
+      command:
+        - 'gotenberg'
+        - '--chromium-disable-javascript=true'
+        - '--chromium-allow-list=file:///tmp/.*'
+
+  tika:
+    image: ghcr.io/paperless-ngx/tika:latest
+    restart: unless-stopped
+```
+
+Add the configuration variables to the environment of the webserver
+(alternatively put the configuration in the `docker-compose.env` file)
+and add the additional services below the webserver service. Watch out
+for indentation.
+
+Make sure to use the correct format [PAPERLESS_TIKA_ENABLED =
+1]{.title-ref} so python_dotenv can parse the statement correctly.
+
+## Software tweaks {#software_tweaks}
+
+`PAPERLESS_TASK_WORKERS=<num>`
+
+: Paperless does multiple things in the background: Maintain the
+search index, maintain the automatic matching algorithm, check
+emails, consume documents, etc. This variable specifies how many
+things it will do in parallel.
+
+    Defaults to 1
+
+`PAPERLESS_THREADS_PER_WORKER=<num>`
+
+: Furthermore, paperless uses multiple threads when consuming
+documents to speed up OCR. This variable specifies how many pages
+paperless will process in parallel on a single document.
+
+    !!! warning
+
+        Ensure that the product
+
+        `PAPERLESS_TASK_WORKERS \:   PAPERLESS_THREADS_PER_WORKER`
+
+        does not exceed your CPU core count or else paperless will be
+        extremely slow. If you want paperless to process many documents in
+        parallel, choose a high worker count. If you want paperless to
+        process very large documents faster, use a higher thread per worker
+        count.
+
+    The default is a balance between the two, according to your CPU core
+    count, with a slight favor towards threads per worker:
+
+    | CPU core count | Workers | Threads |
+    |----------------|---------|---------|
+    | > 1            | > 1     | > 1     |
+    | > 2            | > 2     | > 1     |
+    | > 4            | > 2     | > 2     |
+    | > 6            | > 2     | > 3     |
+    | > 8            | > 2     | > 4     |
+    | > 12           | > 3     | > 4     |
+    | > 16           | > 4     | > 4     |
+
+    If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust
+    PAPERLESS_THREADS_PER_WORKER automatically.
+
+`PAPERLESS_WORKER_TIMEOUT=<num>`
+
+: Machines with few cores or weak ones might not be able to finish OCR
+on large documents within the default 1800 seconds. So extending
+this timeout may prove to be useful on weak hardware setups.
+
+`PAPERLESS_WORKER_RETRY=<num>`
+
+: If PAPERLESS_WORKER_TIMEOUT has been configured, the retry time for
+a task can also be configured. By default, this value will be set to
+10s more than the worker timeout. This value should never be set
+less than the worker timeout.
+
+`PAPERLESS_TIME_ZONE=<timezone>`
+
+: Set the time zone here. See
+<https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE>
+for details on how to set it.
+
+    Defaults to UTC.
+
+## Polling {#polling}
+
+`PAPERLESS_CONSUMER_POLLING=<num>`
+
+: If paperless won't find documents added to your consume folder, it
+might not be able to automatically detect filesystem changes. In
+that case, specify a polling interval in seconds here, which will
+then cause paperless to periodically check your consumption
+directory for changes. This will also disable listening for file
+system changes with `inotify`.
+
+    Defaults to 0, which disables polling and uses filesystem
+    notifications.
+
+`PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>`
+
+: If consumer polling is enabled, sets the number of times paperless
+will check for a file to remain unmodified.
+
+    Defaults to 5.
+
+`PAPERLESS_CONSUMER_POLLING_DELAY=<num>`
+
+: If consumer polling is enabled, sets the delay in seconds between
+each check (above) paperless will do while waiting for a file to
+remain unmodified.
+
+    Defaults to 5.
+
+## iNotify {#inotify}
+
+`PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>`
+
+: Sets the time in seconds the consumer will wait for additional
+events from inotify before the consumer will consider a file ready
+and begin consumption. Certain scanners or network setups may
+generate multiple events for a single file, leading to multiple
+consumers working on the same file. Configure this to prevent that.
+
+    Defaults to 0.5 seconds.
+
+`PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>`
+
+: When the consumer detects a duplicate document, it will not touch
+the original document. This default behavior can be changed here.
+
+    Defaults to false.
+
+`PAPERLESS_CONSUMER_RECURSIVE=<bool>`
+
+: Enable recursive watching of the consumption directory. Paperless
+will then pickup files from files in subdirectories within your
+consumption directory as well.
+
+    Defaults to false.
+
+`PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>`
+
+: Set the names of subdirectories as tags for consumed files. E.g.
+<CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags "foo" and
+"bar" to the consumed file. Paperless will create any tags that
+don't exist yet.
+
+    This is useful for sorting documents with certain tags such as `car`
+    or `todo` prior to consumption. These folders won't be deleted.
+
+    PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.
+
+    Defaults to false.
+
+`PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>`
+
+: Enables the scanning and page separation based on detected barcodes.
+This allows for scanning and adding multiple documents per uploaded
+file, which are separated by one or multiple barcode pages.
+
+    For ease of use, it is suggested to use a standardized separation
+    page, e.g. [here](https://www.alliancegroup.co.uk/patch-codes.htm).
+
+    If no barcodes are detected in the uploaded file, no page separation
+    will happen.
+
+    The original document will be removed and the separated pages will
+    be saved as pdf.
+
+    Defaults to false.
+
+`PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>`
+
+: Whether TIFF image files should be scanned for barcodes. This will
+automatically convert any TIFF image(s) to pdfs for later
+processing. This only has an effect, if
+PAPERLESS_CONSUMER_ENABLE_BARCODES has been enabled.
+
+    Defaults to false.
+
+PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
+
+: Defines the string to be detected as a separator barcode. If
+paperless is used with the PATCH-T separator pages, users shouldn't
+change this.
+
+    Defaults to "PATCHT"
+
+`PAPERLESS_CONVERT_MEMORY_LIMIT=<num>`
+
+: On smaller systems, or even in the case of Very Large Documents, the
+consumer may explode, complaining about how it's "unable to extend
+pixel cache". In such cases, try setting this to a reasonably low
+value, like 32. The default is to use whatever is necessary to do
+everything without writing to disk, and units are in megabytes.
+
+    For more information on how to use this value, you should search the
+    web for "MAGICK_MEMORY_LIMIT".
+
+    Defaults to 0, which disables the limit.
+
+`PAPERLESS_CONVERT_TMPDIR=<path>`
+
+: Similar to the memory limit, if you've got a small system and your
+OS mounts /tmp as tmpfs, you should set this to a path that's on a
+physical disk, like /home/your_user/tmp or something. ImageMagick
+will use this as scratch space when crunching through very large
+documents.
+
+    For more information on how to use this value, you should search the
+    web for "MAGICK_TMPDIR".
+
+    Default is none, which disables the temporary directory.
+
+`PAPERLESS_POST_CONSUME_SCRIPT=<filename>`
+
+: After a document is consumed, Paperless can trigger an arbitrary
+script if you like. This script will be passed a number of arguments
+for you to work with. For more information, take a look at [Post-consumption script](advanced_usage#post_consume_script).
+
+    The default is blank, which means nothing will be executed.
+
+`PAPERLESS_FILENAME_DATE_ORDER=<format>`
+
+: Paperless will check the document text for document date
+information. Use this setting to enable checking the document
+filename for date information. The date order can be set to any
+option as specified in
+<https://dateparser.readthedocs.io/en/latest/settings.html#date-order>.
+The filename will be checked first, and if nothing is found, the
+document text will be checked as normal.
+
+    A date in a filename must have some separators ([.]{.title-ref},
+    [-]{.title-ref}, [/]{.title-ref}, etc) for it to be parsed.
+
+    Defaults to none, which disables this feature.
+
+`PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>`
+
+: Paperless searches an entire document for dates. The first date
+found will be used as the initial value for the created date. When
+this variable is greater than 0 (or left to it's default value),
+paperless will also suggest other dates found in the document, up to
+a maximum of this setting. Note that duplicates will be removed,
+which can result in fewer dates displayed in the frontend than this
+setting value.
+
+    The task to find all dates can be time-consuming and increases with
+    a higher (maximum) number of suggested dates and slower hardware.
+
+    Defaults to 3. Set to 0 to disable this feature.
+
+`PAPERLESS_THUMBNAIL_FONT_NAME=<filename>`
+
+: Paperless creates thumbnails for plain text files by rendering the
+content of the file on an image and uses a predefined font for that.
+This font can be changed here.
+
+    Note that this won't have any effect on already generated
+    thumbnails.
+
+    Defaults to
+    `/usr/share/fonts/liberation/LiberationSerif-Regular.ttf`.
+
+`PAPERLESS_IGNORE_DATES=<string>`
+
+: Paperless parses a documents creation date from filename and file
+content. You may specify a comma separated list of dates that should
+be ignored during this process. This is useful for special dates
+(like date of birth) that appear in documents regularly but are very
+unlikely to be the documents creation date.
+
+    The date is parsed using the order specified in PAPERLESS_DATE_ORDER
+
+    Defaults to an empty string to not ignore any dates.
+
+`PAPERLESS_DATE_ORDER=<format>`
+
+: Paperless will try to determine the document creation date from its
+contents. Specify the date format Paperless should expect to see
+within your documents.
+
+    This option defaults to DMY which translates to day first, month
+    second, and year last order. Characters D, M, or Y can be shuffled
+    to meet the required order.
+
+`PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>`
+
+: By default, paperless ignores certain files and folders in the
+consumption directory, such as system files created by the Mac OS.
+
+    This can be adjusted by configuring a custom json array with
+    patterns to exclude.
+
+    Defaults to
+    `[".DS_STORE/*", "._*", ".stfolder/*", ".stversions/*", ".localized/*", "desktop.ini"]`.
+
+## Binaries
+
+There are a few external software packages that Paperless expects to
+find on your system when it starts up. Unless you've done something
+creative with their installation, you probably won't need to edit any
+of these. However, if you've installed these programs somewhere where
+simply typing the name of the program doesn't automatically execute it
+(ie. the program isn't in your \$PATH), then you'll need to specify
+the literal path for that program.
+
+`PAPERLESS_CONVERT_BINARY=<path>`
+
+: Defaults to "convert".
+
+`PAPERLESS_GS_BINARY=<path>`
+
+: Defaults to "gs".
+
+## Docker-specific options {#docker}
+
+These options don't have any effect in `paperless.conf`. These options
+adjust the behavior of the docker container. Configure these in
+[docker-compose.env]{.title-ref}.
+
+`PAPERLESS_WEBSERVER_WORKERS=<num>`
+
+: The number of worker processes the webserver should spawn. More
+worker processes usually result in the front end to load data much
+quicker. However, each worker process also loads the entire
+application into memory separately, so increasing this value will
+increase RAM usage.
+
+    Defaults to 1.
+
+`PAPERLESS_BIND_ADDR=<ip address>`
+
+: The IP address the webserver will listen on inside the container.
+There are special setups where you may need to configure this value
+to restrict the Ip address or interface the webserver listens on.
+
+    Defaults to \[::\], meaning all interfaces, including IPv6.
+
+`PAPERLESS_PORT=<port>`
+
+: The port number the webserver will listen on inside the container.
+There are special setups where you may need this to avoid collisions
+with other services (like using podman with multiple containers in
+one pod).
+
+    Don't change this when using Docker. To change the port the
+    webserver is reachable outside of the container, instead refer to
+    the "ports" key in `docker-compose.yml`.
+
+    Defaults to 8000.
+
+`USERMAP_UID=<uid>`
+
+: The ID of the paperless user in the container. Set this to your
+actual user ID on the host system, which you can get by executing
+
+    ``` shell-session
+    $ id -u
+    ```
+
+    Paperless will change ownership on its folders to this user, so you
+    need to get this right in order to be able to write to the
+    consumption directory.
+
+    Defaults to 1000.
+
+`USERMAP_GID=<gid>`
+
+: The ID of the paperless Group in the container. Set this to your
+actual group ID on the host system, which you can get by executing
+
+    ``` shell-session
+    $ id -g
+    ```
+
+    Paperless will change ownership on its folders to this group, so you
+    need to get this right in order to be able to write to the
+    consumption directory.
+
+    Defaults to 1000.
+
+`PAPERLESS_OCR_LANGUAGES=<list>`
+
+: Additional OCR languages to install. By default, paperless comes
+with English, German, Italian, Spanish and French. If your language
+is not in this list, install additional languages with this
+configuration option:
+
+    ``` bash
+    PAPERLESS_OCR_LANGUAGES=tur ces
+    ```
+
+    To actually use these languages, also set the default OCR language
+    of paperless:
+
+    ``` bash
+    PAPERLESS_OCR_LANGUAGE=tur
+    ```
+
+    Defaults to none, which does not install any additional languages.
+
+`PAPERLESS_ENABLE_FLOWER=<defined>`
+
+: If this environment variable is defined, the Celery monitoring tool
+[Flower](https://flower.readthedocs.io/en/latest/index.html) will be
+started by the container.
+
+    You can read more about this in the [advanced documentation](advanced#celery-monitoring).
+
+## Update Checking {#update-checking}
+
+`PAPERLESS_ENABLE_UPDATE_CHECK=<bool>`
+
+!!! note
+
+    This setting was deprecated in favor of a frontend setting after
+    v1.9.2. A one-time migration is performed for users who have this
+    setting set. This setting is always ignored if the corresponding
+    frontend setting has been set.
diff --git a/docs/configuration.rst b/docs/configuration.rst
deleted file mode 100644 (file)
index f9c4f89..0000000
+++ /dev/null
@@ -1,925 +0,0 @@
-.. _configuration:
-
-*************
-Configuration
-*************
-
-Paperless provides a wide range of customizations.
-Depending on how you run paperless, these settings have to be defined in different
-places.
-
-*   If you run paperless on docker, ``paperless.conf`` is not used. Rather, configure
-    paperless by copying necessary options to ``docker-compose.env``.
-*   If you are running paperless on anything else, paperless will search for the
-    configuration file in these locations and use the first one it finds:
-
-    .. code::
-
-        /path/to/paperless/paperless.conf
-        /etc/paperless.conf
-        /usr/local/etc/paperless.conf
-
-
-Required services
-#################
-
-PAPERLESS_REDIS=<url>
-    This is required for processing scheduled tasks such as email fetching, index
-    optimization and for training the automatic document matcher.
-
-    * If your Redis server needs login credentials PAPERLESS_REDIS = ``redis://<username>:<password>@<host>:<port>``
-
-    * With the requirepass option PAPERLESS_REDIS = ``redis://:<password>@<host>:<port>``
-
-    `More information on securing your Redis Instance <https://redis.io/docs/getting-started/#securing-redis>`_.
-
-    Defaults to redis://localhost:6379.
-
-PAPERLESS_DBENGINE=<engine_name>
-    Optional, gives the ability to choose Postgres or MariaDB for database engine.
-    Available options are `postgresql` and `mariadb`.
-    Default is `postgresql`.
-
-PAPERLESS_DBHOST=<hostname>
-    By default, sqlite is used as the database backend. This can be changed here.
-
-    Set PAPERLESS_DBHOST and another database will be used instead of sqlite.
-
-PAPERLESS_DBPORT=<port>
-    Adjust port if necessary.
-
-    Default is 5432.
-
-PAPERLESS_DBNAME=<name>
-    Database name in PostgreSQL or MariaDB.
-
-    Defaults to "paperless".
-
-PAPERLESS_DBUSER=<name>
-    Database user in PostgreSQL or MariaDB.
-
-    Defaults to "paperless".
-
-PAPERLESS_DBPASS=<password>
-    Database password for PostgreSQL or MariaDB.
-
-    Defaults to "paperless".
-
-PAPERLESS_DBSSLMODE=<mode>
-    SSL mode to use when connecting to PostgreSQL.
-
-    See `the official documentation about sslmode <https://www.postgresql.org/docs/current/libpq-ssl.html>`_.
-
-    Default is ``prefer``.
-
-PAPERLESS_DB_TIMEOUT=<float>
-    Amount of time for a database connection to wait for the database to unlock.
-    Mostly applicable for an sqlite based installation, consider changing to postgresql
-    if you need to increase this.
-
-    Defaults to unset, keeping the Django defaults.
-
-Paths and folders
-#################
-
-PAPERLESS_CONSUMPTION_DIR=<path>
-    This where your documents should go to be consumed.  Make sure that it exists
-    and that the user running the paperless service can read/write its contents
-    before you start Paperless.
-
-    Don't change this when using docker, as it only changes the path within the
-    container. Change the local consumption directory in the docker-compose.yml
-    file instead.
-
-    Defaults to "../consume/", relative to the "src" directory.
-
-PAPERLESS_DATA_DIR=<path>
-    This is where paperless stores all its data (search index, SQLite database,
-    classification model, etc).
-
-    Defaults to "../data/", relative to the "src" directory.
-
-PAPERLESS_TRASH_DIR=<path>
-    Instead of removing deleted documents, they are moved to this directory.
-
-    This must be writeable by the user running paperless. When running inside
-    docker, ensure that this path is within a permanent volume (such as
-    "../media/trash") so it won't get lost on upgrades.
-
-    Defaults to empty (i.e. really delete documents).
-
-PAPERLESS_MEDIA_ROOT=<path>
-    This is where your documents and thumbnails are stored.
-
-    You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless
-    store all its data within the same volume.
-
-    Defaults to "../media/", relative to the "src" directory.
-
-PAPERLESS_STATICDIR=<path>
-    Override the default STATIC_ROOT here.  This is where all static files
-    created using "collectstatic" manager command are stored.
-
-    Unless you're doing something fancy, there is no need to override this.
-
-    Defaults to "../static/", relative to the "src" directory.
-
-PAPERLESS_FILENAME_FORMAT=<format>
-    Changes the filenames paperless uses to store documents in the media directory.
-    See :ref:`advanced-file_name_handling` for details.
-
-    Default is none, which disables this feature.
-
-PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>
-    Tells paperless to replace placeholders in `PAPERLESS_FILENAME_FORMAT` that would resolve
-    to 'none' to be omitted from the resulting filename. This also holds true for directory
-    names.
-    See :ref:`advanced-file_name_handling` for details.
-
-    Defaults to `false` which disables this feature.
-
-PAPERLESS_LOGGING_DIR=<path>
-    This is where paperless will store log files.
-
-    Defaults to "``PAPERLESS_DATA_DIR``/log/".
-
-
-Logging
-#######
-
-PAPERLESS_LOGROTATE_MAX_SIZE=<num>
-    Maximum file size for log files before they are rotated, in bytes.
-
-    Defaults to 1 MiB.
-
-PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>
-    Number of rotated log files to keep.
-
-    Defaults to 20.
-
-.. _hosting-and-security:
-
-Hosting & Security
-##################
-
-PAPERLESS_SECRET_KEY=<key>
-    Paperless uses this to make session tokens. If you expose paperless on the
-    internet, you need to change this, since the default secret is well known.
-
-    Use any sequence of characters. The more, the better. You don't need to
-    remember this. Just face-roll your keyboard.
-
-    Default is listed in the file ``src/paperless/settings.py``.
-
-PAPERLESS_URL=<url>
-    This setting can be used to set the three options below (ALLOWED_HOSTS,
-    CORS_ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS). If the other options are
-    set the values will be combined with this one. Do not include a trailing
-    slash. E.g. https://paperless.domain.com
-
-    Defaults to empty string, leaving the other settings unaffected.
-
-PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list>
-    A list of trusted origins for unsafe requests (e.g. POST). As of Django 4.0
-    this is required to access the Django admin via the web.
-    See https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins
-
-    Can also be set using PAPERLESS_URL (see above).
-
-    Defaults to empty string, which does not add any origins to the trusted list.
-
-PAPERLESS_ALLOWED_HOSTS=<comma-separated-list>
-    If you're planning on putting Paperless on the open internet, then you
-    really should set this value to the domain name you're using.  Failing to do
-    so leaves you open to HTTP host header attacks:
-    https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation
-
-    Just remember that this is a comma-separated list, so "example.com" is fine,
-    as is "example.com,www.example.com", but NOT " example.com" or "example.com,"
-
-    Can also be set using PAPERLESS_URL (see above).
-
-    If manually set, please remember to include "localhost". Otherwise docker
-    healthcheck will fail.
-
-    Defaults to "*", which is all hosts.
-
-PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list>
-    You need to add your servers to the list of allowed hosts that can do CORS
-    calls. Set this to your public domain name.
-
-    Can also be set using PAPERLESS_URL (see above).
-
-    Defaults to "http://localhost:8000".
-
-PAPERLESS_FORCE_SCRIPT_NAME=<path>
-    To host paperless under a subpath url like example.com/paperless you set
-    this value to /paperless. No trailing slash!
-
-    Defaults to none, which hosts paperless at "/".
-
-PAPERLESS_STATIC_URL=<path>
-    Override the STATIC_URL here.  Unless you're hosting Paperless off a
-    subdomain like /paperless/, you probably don't need to change this.
-    If you do change it, be sure to include the trailing slash.
-
-    Defaults to "/static/".
-
-    .. note::
-
-        When hosting paperless behind a reverse proxy like Traefik or Nginx at a subpath e.g.
-        example.com/paperlessngx you will also need to set ``PAPERLESS_FORCE_SCRIPT_NAME``
-        (see above).
-
-PAPERLESS_AUTO_LOGIN_USERNAME=<username>
-    Specify a username here so that paperless will automatically perform login
-    with the selected user.
-
-    .. danger::
-
-        Do not use this when exposing paperless on the internet. There are no
-        checks in place that would prevent you from doing this.
-
-    Defaults to none, which disables this feature.
-
-PAPERLESS_ADMIN_USER=<username>
-    If this environment variable is specified, Paperless automatically creates
-    a superuser with the provided username at start. This is useful in cases
-    where you can not run the `createsuperuser` command separately, such as Kubernetes
-    or AWS ECS.
-
-    Requires `PAPERLESS_ADMIN_PASSWORD` to be set.
-
-    .. note::
-
-        This will not change an existing [super]user's password, nor will
-        it recreate a user that already exists. You can leave this throughout
-        the lifecycle of the containers.
-
-PAPERLESS_ADMIN_MAIL=<email>
-    (Optional) Specify superuser email address. Only used when
-    `PAPERLESS_ADMIN_USER` is set.
-
-    Defaults to ``root@localhost``.
-
-PAPERLESS_ADMIN_PASSWORD=<password>
-    Only used when `PAPERLESS_ADMIN_USER` is set.
-    This will be the password of the automatically created superuser.
-
-
-PAPERLESS_COOKIE_PREFIX=<str>
-    Specify a prefix that is added to the cookies used by paperless to identify
-    the currently logged in user. This is useful for when you're running two
-    instances of paperless on the same host.
-
-    After changing this, you will have to login again.
-
-    Defaults to ``""``, which does not alter the cookie names.
-
-PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>
-    Allows authentication via HTTP_REMOTE_USER which is used by some SSO
-    applications.
-
-    .. warning::
-
-        This will allow authentication by simply adding a ``Remote-User: <username>`` header
-        to a request. Use with care! You especially *must* ensure that any such header is not
-        passed from your proxy server to paperless.
-
-        If you're exposing paperless to the internet directly, do not use this.
-
-        Also see the warning `in the official documentation <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>`.
-
-    Defaults to `false` which disables this feature.
-
-PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>
-    If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to
-    customize the name of the HTTP header from which the authenticated username
-    is extracted. Values are in terms of
-    [HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META).
-    Thus, the configured value must start with `HTTP_` followed by the
-    normalized actual header name.
-
-    Defaults to `HTTP_REMOTE_USER`.
-
-PAPERLESS_LOGOUT_REDIRECT_URL=<str>
-    URL to redirect the user to after a logout. This can be used together with
-    `PAPERLESS_ENABLE_HTTP_REMOTE_USER` to redirect the user back to the SSO
-    application's logout page.
-
-    Defaults to None, which disables this feature.
-
-.. _configuration-ocr:
-
-OCR settings
-############
-
-Paperless uses `OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/>`_ for
-performing OCR on documents and images. Paperless uses sensible defaults for
-most settings, but all of them can be configured to your needs.
-
-PAPERLESS_OCR_LANGUAGE=<lang>
-    Customize the language that paperless will attempt to use when
-    parsing documents.
-
-    It should be a 3-letter language code consistent with ISO
-    639: https://www.loc.gov/standards/iso639-2/php/code_list.php
-
-    Set this to the language most of your documents are written in.
-
-    This can be a combination of multiple languages such as ``deu+eng``,
-    in which case tesseract will use whatever language matches best.
-    Keep in mind that tesseract uses much more cpu time with multiple
-    languages enabled.
-
-    Defaults to "eng".
-
-               Note: If your language contains a '-' such as chi-sim, you must use chi_sim
-
-PAPERLESS_OCR_MODE=<mode>
-    Tell paperless when and how to perform ocr on your documents. Four modes
-    are available:
-
-    *   ``skip``: Paperless skips all pages and will perform ocr only on pages
-        where no text is present. This is the safest option.
-    *   ``skip_noarchive``: In addition to skip, paperless won't create an
-        archived version of your documents when it finds any text in them.
-        This is useful if you don't want to have two almost-identical versions
-        of your digital documents in the media folder. This is the fastest option.
-    *   ``redo``: Paperless will OCR all pages of your documents and attempt to
-        replace any existing text layers with new text. This will be useful for
-        documents from scanners that already performed OCR with insufficient
-        results. It will also perform OCR on purely digital documents.
-
-        This option may fail on some documents that have features that cannot
-        be removed, such as forms. In this case, the text from the document is
-        used instead.
-    *   ``force``: Paperless rasterizes your documents, converting any text
-        into images and puts the OCRed text on top. This works for all documents,
-        however, the resulting document may be significantly larger and text
-        won't appear as sharp when zoomed in.
-
-    The default is ``skip``, which only performs OCR when necessary and always
-    creates archived documents.
-
-    Read more about this in the `OCRmyPDF documentation <https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped>`_.
-
-PAPERLESS_OCR_CLEAN=<mode>
-    Tells paperless to use ``unpaper`` to clean any input document before
-    sending it to tesseract. This uses more resources, but generally results
-    in better OCR results. The following modes are available:
-
-    *   ``clean``: Apply unpaper.
-    *   ``clean-final``: Apply unpaper, and use the cleaned images to build the
-        output file instead of the original images.
-    *   ``none``: Do not apply unpaper.
-
-    Defaults to ``clean``.
-
-    .. note::
-
-        ``clean-final`` is incompatible with ocr mode ``redo``. When both
-        ``clean-final`` and the ocr mode ``redo`` is configured, ``clean``
-        is used instead.
-
-PAPERLESS_OCR_DESKEW=<bool>
-    Tells paperless to correct skewing (slight rotation of input images mainly
-    due to improper scanning)
-
-    Defaults to ``true``, which enables this feature.
-
-    .. note::
-
-        Deskewing is incompatible with ocr mode ``redo``. Deskewing will get
-        disabled automatically if ``redo`` is used as the ocr mode.
-
-PAPERLESS_OCR_ROTATE_PAGES=<bool>
-    Tells paperless to correct page rotation (90°, 180° and 270° rotation).
-
-    If you notice that paperless is not rotating incorrectly rotated
-    pages (or vice versa), try adjusting the threshold up or down (see below).
-
-    Defaults to ``true``, which enables this feature.
-
-
-PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>
-    Adjust the threshold for automatic page rotation by ``PAPERLESS_OCR_ROTATE_PAGES``.
-    This is an arbitrary value reported by tesseract. "15" is a very conservative value,
-    whereas "2" is a very aggressive option and will often result in correctly rotated pages
-    being rotated as well.
-
-    Defaults to "12".
-
-PAPERLESS_OCR_OUTPUT_TYPE=<type>
-    Specify the the type of PDF documents that paperless should produce.
-
-    *   ``pdf``: Modify the PDF document as little as possible.
-    *   ``pdfa``: Convert PDF documents into PDF/A-2b documents, which is a
-        subset of the entire PDF specification and meant for storing
-        documents long term.
-    *   ``pdfa-1``, ``pdfa-2``, ``pdfa-3`` to specify the exact version of
-        PDF/A you wish to use.
-
-    If not specified, ``pdfa`` is used. Remember that paperless also keeps
-    the original input file as well as the archived version.
-
-
-PAPERLESS_OCR_PAGES=<num>
-    Tells paperless to use only the specified amount of pages for OCR. Documents
-    with less than the specified amount of pages get OCR'ed completely.
-
-    Specifying 1 here will only use the first page.
-
-    When combined with ``PAPERLESS_OCR_MODE=redo`` or ``PAPERLESS_OCR_MODE=force``,
-    paperless will not modify any text it finds on excluded pages and copy it
-    verbatim.
-
-    Defaults to 0, which disables this feature and always uses all pages.
-
-PAPERLESS_OCR_IMAGE_DPI=<num>
-    Paperless will OCR any images you put into the system and convert them
-    into PDF documents. This is useful if your scanner produces images.
-    In order to do so, paperless needs to know the DPI of the image.
-    Most images from scanners will have this information embedded and
-    paperless will detect and use that information. In case this fails, it
-    uses this value as a fallback.
-
-    Set this to the DPI your scanner produces images at.
-
-    Default is none, which will automatically calculate image DPI so that
-    the produced PDF documents are A4 sized.
-
-PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>
-    Paperless will raise a warning when OCRing images which are over this limit and
-    will not OCR images which are more than twice this limit.  Note this does not
-    prevent the document from being consumed, but could result in missing text content.
-
-    If unset, will default to the value determined by
-    `Pillow <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.MAX_IMAGE_PIXELS>`_.
-
-    .. note::
-
-        Increasing this limit could cause Paperless to consume additional resources
-        when consuming a file.  Be sure you have sufficient system resources.
-
-    .. caution::
-
-        The limit is intended to prevent malicious files from consuming system resources
-        and causing crashes and other errors.  Only increase this value if you are certain
-        your documents are not malicious and you need the text which was not OCRed
-
-PAPERLESS_OCR_USER_ARGS=<json>
-    OCRmyPDF offers many more options. Use this parameter to specify any
-    additional arguments you wish to pass to OCRmyPDF. Since Paperless uses
-    the API of OCRmyPDF, you have to specify these in a format that can be
-    passed to the API. See `the API reference of OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/api.html#reference>`_
-    for valid parameters. All command line options are supported, but they
-    use underscores instead of dashes.
-
-    .. caution::
-
-        Paperless has been tested to work with the OCR options provided
-        above. There are many options that are incompatible with each other,
-        so specifying invalid options may prevent paperless from consuming
-        any documents.
-
-    Specify arguments as a JSON dictionary. Keep note of lower case booleans
-    and double quoted parameter names and strings. Examples:
-
-    .. code:: json
-
-        {"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
-
-.. _configuration-tika:
-
-Tika settings
-#############
-
-Paperless can make use of `Tika <https://tika.apache.org/>`_ and
-`Gotenberg <https://gotenberg.dev/>`_ for parsing and
-converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you
-wish to use this, you must provide a Tika server and a Gotenberg server,
-configure their endpoints, and enable the feature.
-
-PAPERLESS_TIKA_ENABLED=<bool>
-    Enable (or disable) the Tika parser.
-
-    Defaults to false.
-
-PAPERLESS_TIKA_ENDPOINT=<url>
-    Set the endpoint URL were Paperless can reach your Tika server.
-
-    Defaults to "http://localhost:9998".
-
-PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>
-    Set the endpoint URL were Paperless can reach your Gotenberg server.
-
-    Defaults to "http://localhost:3000".
-
-If you run paperless on docker, you can add those services to the docker-compose
-file (see the provided ``docker-compose.sqlite-tika.yml`` file for reference). The changes
-requires are as follows:
-
-.. code:: yaml
-
-    services:
-        # ...
-
-        webserver:
-            # ...
-
-            environment:
-                # ...
-
-                PAPERLESS_TIKA_ENABLED: 1
-                PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
-                PAPERLESS_TIKA_ENDPOINT: http://tika:9998
-
-        # ...
-
-        gotenberg:
-            image: gotenberg/gotenberg:7.6
-            restart: unless-stopped
-            command:
-                - "gotenberg"
-                - "--chromium-disable-routes=true"
-
-        tika:
-            image: ghcr.io/paperless-ngx/tika:latest
-            restart: unless-stopped
-
-Add the configuration variables to the environment of the webserver (alternatively
-put the configuration in the ``docker-compose.env`` file) and add the additional
-services below the webserver service. Watch out for indentation.
-
-Make sure to use the correct format `PAPERLESS_TIKA_ENABLED = 1` so python_dotenv can parse the statement correctly.
-
-Software tweaks
-###############
-
-PAPERLESS_TASK_WORKERS=<num>
-    Paperless does multiple things in the background: Maintain the search index,
-    maintain the automatic matching algorithm, check emails, consume documents,
-    etc. This variable specifies how many things it will do in parallel.
-
-    Defaults to 1
-
-
-PAPERLESS_THREADS_PER_WORKER=<num>
-    Furthermore, paperless uses multiple threads when consuming documents to
-    speed up OCR. This variable specifies how many pages paperless will process
-    in parallel on a single document.
-
-    .. caution::
-
-        Ensure that the product
-
-            PAPERLESS_TASK_WORKERS * PAPERLESS_THREADS_PER_WORKER
-
-        does not exceed your CPU core count or else paperless will be extremely slow.
-        If you want paperless to process many documents in parallel, choose a high
-        worker count. If you want paperless to process very large documents faster,
-        use a higher thread per worker count.
-
-    The default is a balance between the two, according to your CPU core count,
-    with a slight favor towards threads per worker:
-
-    +----------------+---------+---------+
-    | CPU core count | Workers | Threads |
-    +----------------+---------+---------+
-    |              1 |       1 |       1 |
-    +----------------+---------+---------+
-    |              2 |       2 |       1 |
-    +----------------+---------+---------+
-    |              4 |       2 |       2 |
-    +----------------+---------+---------+
-    |              6 |       2 |       3 |
-    +----------------+---------+---------+
-    |              8 |       2 |       4 |
-    +----------------+---------+---------+
-    |             12 |       3 |       4 |
-    +----------------+---------+---------+
-    |             16 |       4 |       4 |
-    +----------------+---------+---------+
-
-    If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust
-    PAPERLESS_THREADS_PER_WORKER automatically.
-
-
-PAPERLESS_WORKER_TIMEOUT=<num>
-    Machines with few cores or weak ones might not be able to finish OCR on
-    large documents within the default 1800 seconds. So extending this timeout
-    may prove to be useful on weak hardware setups.
-
-PAPERLESS_WORKER_RETRY=<num>
-    If PAPERLESS_WORKER_TIMEOUT has been configured, the retry time for a task can
-    also be configured.  By default, this value will be set to 10s more than the
-    worker timeout.  This value should never be set less than the worker timeout.
-
-PAPERLESS_TIME_ZONE=<timezone>
-    Set the time zone here.
-    See https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE
-    for details on how to set it.
-
-    Defaults to UTC.
-
-
-.. _configuration-polling:
-
-PAPERLESS_CONSUMER_POLLING=<num>
-    If paperless won't find documents added to your consume folder, it might
-    not be able to automatically detect filesystem changes. In that case,
-    specify a polling interval in seconds here, which will then cause paperless
-    to periodically check your consumption directory for changes. This will also
-    disable listening for file system changes with ``inotify``.
-
-    Defaults to 0, which disables polling and uses filesystem notifications.
-
-PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>
-    If consumer polling is enabled, sets the number of times paperless will check for a
-    file to remain unmodified.
-
-    Defaults to 5.
-
-PAPERLESS_CONSUMER_POLLING_DELAY=<num>
-    If consumer polling is enabled, sets the delay in seconds between each check (above) paperless
-    will do while waiting for a file to remain unmodified.
-
-    Defaults to 5.
-
-.. _configuration-inotify:
-
-PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>
-    Sets the time in seconds the consumer will wait for additional events
-    from inotify before the consumer will consider a file ready and begin consumption.
-    Certain scanners or network setups may generate multiple events for a single file,
-    leading to multiple consumers working on the same file.  Configure this to
-    prevent that.
-
-    Defaults to 0.5 seconds.
-
-PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>
-    When the consumer detects a duplicate document, it will not touch the
-    original document. This default behavior can be changed here.
-
-    Defaults to false.
-
-
-PAPERLESS_CONSUMER_RECURSIVE=<bool>
-    Enable recursive watching of the consumption directory. Paperless will
-    then pickup files from files in subdirectories within your consumption
-    directory as well.
-
-    Defaults to false.
-
-
-PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>
-    Set the names of subdirectories as tags for consumed files.
-    E.g. <CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags "foo" and "bar" to
-    the consumed file. Paperless will create any tags that don't exist yet.
-
-    This is useful for sorting documents with certain tags such as ``car`` or
-    ``todo`` prior to consumption. These folders won't be deleted.
-
-    PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.
-
-    Defaults to false.
-
-PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>
-    Enables the scanning and page separation based on detected barcodes.
-    This allows for scanning and adding multiple documents per uploaded
-    file, which are separated by one or multiple barcode pages.
-
-    For ease of use, it is suggested to use a standardized separation page,
-    e.g. `here <https://www.alliancegroup.co.uk/patch-codes.htm>`_.
-
-    If no barcodes are detected in the uploaded file, no page separation
-    will happen.
-
-    The original document will be removed and the separated pages will be
-    saved as pdf.
-
-    Defaults to false.
-
-
-PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>
-    Whether TIFF image files should be scanned for barcodes.
-    This will automatically convert any TIFF image(s) to pdfs for later
-    processing.
-    This only has an effect, if PAPERLESS_CONSUMER_ENABLE_BARCODES has been
-    enabled.
-
-    Defaults to false.
-
-PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
-  Defines the string to be detected as a separator barcode.
-  If paperless is used with the PATCH-T separator pages, users
-  shouldn't change this.
-
-  Defaults to "PATCHT"
-
-PAPERLESS_CONVERT_MEMORY_LIMIT=<num>
-    On smaller systems, or even in the case of Very Large Documents, the consumer
-    may explode, complaining about how it's "unable to extend pixel cache".  In
-    such cases, try setting this to a reasonably low value, like 32.  The
-    default is to use whatever is necessary to do everything without writing to
-    disk, and units are in megabytes.
-
-    For more information on how to use this value, you should search
-    the web for "MAGICK_MEMORY_LIMIT".
-
-    Defaults to 0, which disables the limit.
-
-PAPERLESS_CONVERT_TMPDIR=<path>
-    Similar to the memory limit, if you've got a small system and your OS mounts
-    /tmp as tmpfs, you should set this to a path that's on a physical disk, like
-    /home/your_user/tmp or something.  ImageMagick will use this as scratch space
-    when crunching through very large documents.
-
-    For more information on how to use this value, you should search
-    the web for "MAGICK_TMPDIR".
-
-    Default is none, which disables the temporary directory.
-
-PAPERLESS_POST_CONSUME_SCRIPT=<filename>
-    After a document is consumed, Paperless can trigger an arbitrary script if
-    you like.  This script will be passed a number of arguments for you to work
-    with. For more information, take a look at :ref:`advanced-post_consume_script`.
-
-    The default is blank, which means nothing will be executed.
-
-PAPERLESS_FILENAME_DATE_ORDER=<format>
-    Paperless will check the document text for document date information.
-    Use this setting to enable checking the document filename for date
-    information. The date order can be set to any option as specified in
-    https://dateparser.readthedocs.io/en/latest/settings.html#date-order.
-    The filename will be checked first, and if nothing is found, the document
-    text will be checked as normal.
-
-    A date in a filename must have some separators (`.`, `-`, `/`, etc)
-    for it to be parsed.
-
-    Defaults to none, which disables this feature.
-
-PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>
-    Paperless searches an entire document for dates. The first date found will
-    be used as the initial value for the created date. When this variable is
-    greater than 0 (or left to it's default value), paperless will also suggest
-    other dates found in the document, up to a maximum of this setting. Note that
-    duplicates will be removed, which can result in fewer dates displayed in the
-    frontend than this setting value.
-
-    The task to find all dates can be time-consuming and increases with a higher
-    (maximum) number of suggested dates and slower hardware.
-
-    Defaults to 3. Set to 0 to disable this feature.
-
-PAPERLESS_THUMBNAIL_FONT_NAME=<filename>
-    Paperless creates thumbnails for plain text files by rendering the content
-    of the file on an image and uses a predefined font for that. This
-    font can be changed here.
-
-    Note that this won't have any effect on already generated thumbnails.
-
-    Defaults to ``/usr/share/fonts/liberation/LiberationSerif-Regular.ttf``.
-
-PAPERLESS_IGNORE_DATES=<string>
-    Paperless parses a documents creation date from filename and file content.
-    You may specify a comma separated list of dates that should be ignored during
-    this process. This is useful for special dates (like date of birth) that appear
-    in documents regularly but are very unlikely to be the documents creation date.
-
-    The date is parsed using the order specified in PAPERLESS_DATE_ORDER
-
-    Defaults to an empty string to not ignore any dates.
-
-PAPERLESS_DATE_ORDER=<format>
-    Paperless will try to determine the document creation date from its contents.
-    Specify the date format Paperless should expect to see within your documents.
-
-    This option defaults to DMY which translates to day first, month second, and year
-    last order. Characters D, M, or Y can be shuffled to meet the required order.
-
-PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>
-    By default, paperless ignores certain files and folders in the consumption
-    directory, such as system files created by the Mac OS.
-
-    This can be adjusted by configuring a custom json array with patterns to exclude.
-
-    Defaults to ``[".DS_STORE/*", "._*", ".stfolder/*", ".stversions/*", ".localized/*", "desktop.ini"]``.
-
-Binaries
-########
-
-There are a few external software packages that Paperless expects to find on
-your system when it starts up.  Unless you've done something creative with
-their installation, you probably won't need to edit any of these.  However,
-if you've installed these programs somewhere where simply typing the name of
-the program doesn't automatically execute it (ie. the program isn't in your
-$PATH), then you'll need to specify the literal path for that program.
-
-PAPERLESS_CONVERT_BINARY=<path>
-    Defaults to "convert".
-
-PAPERLESS_GS_BINARY=<path>
-    Defaults to "gs".
-
-
-.. _configuration-docker:
-
-Docker-specific options
-#######################
-
-These options don't have any effect in ``paperless.conf``. These options adjust
-the behavior of the docker container. Configure these in `docker-compose.env`.
-
-PAPERLESS_WEBSERVER_WORKERS=<num>
-    The number of worker processes the webserver should spawn. More worker processes
-    usually result in the front end to load data much quicker. However, each worker process
-    also loads the entire application into memory separately, so increasing this value
-    will increase RAM usage.
-
-    Defaults to 1.
-
-PAPERLESS_BIND_ADDR=<ip address>
-    The IP address the webserver will listen on inside the container. There are
-    special setups where you may need to configure this value to restrict the
-    Ip address or interface the webserver listens on.
-
-    Defaults to [::], meaning all interfaces, including IPv6.
-
-PAPERLESS_PORT=<port>
-    The port number the webserver will listen on inside the container. There are
-    special setups where you may need this to avoid collisions with other
-    services (like using podman with multiple containers in one pod).
-
-    Don't change this when using Docker. To change the port the webserver is
-    reachable outside of the container, instead refer to the "ports" key in
-    ``docker-compose.yml``.
-
-    Defaults to 8000.
-
-USERMAP_UID=<uid>
-    The ID of the paperless user in the container. Set this to your actual user ID on the
-    host system, which you can get by executing
-
-    .. code:: shell-session
-
-        $ id -u
-
-    Paperless will change ownership on its folders to this user, so you need to get this right
-    in order to be able to write to the consumption directory.
-
-    Defaults to 1000.
-
-USERMAP_GID=<gid>
-    The ID of the paperless Group in the container. Set this to your actual group ID on the
-    host system, which you can get by executing
-
-    .. code:: shell-session
-
-        $ id -g
-
-    Paperless will change ownership on its folders to this group, so you need to get this right
-    in order to be able to write to the consumption directory.
-
-    Defaults to 1000.
-
-PAPERLESS_OCR_LANGUAGES=<list>
-    Additional OCR languages to install. By default, paperless comes with
-    English, German, Italian, Spanish and French. If your language is not in this list, install
-    additional languages with this configuration option:
-
-    .. code:: bash
-
-        PAPERLESS_OCR_LANGUAGES=tur ces
-
-    To actually use these languages, also set the default OCR language of paperless:
-
-    .. code:: bash
-
-        PAPERLESS_OCR_LANGUAGE=tur
-
-    Defaults to none, which does not install any additional languages.
-
-PAPERLESS_ENABLE_FLOWER=<defined>
-    If this environment variable is defined, the Celery monitoring tool
-    `Flower <https://flower.readthedocs.io/en/latest/index.html>`_ will
-    be started by the container.
-
-    You can read more about this in the :ref:`advanced setup <advanced-celery-monitoring>`
-    documentation.
-
-
-.. _configuration-update-checking:
-
-Update Checking
-###############
-
-PAPERLESS_ENABLE_UPDATE_CHECK=<bool>
-
-    .. note::
-
-            This setting was deprecated in favor of a frontend setting after v1.9.2. A one-time
-            migration is performed for users who have this setting set. This setting is always
-            ignored if the corresponding frontend setting has been set.
diff --git a/docs/development.md b/docs/development.md
new file mode 100644 (file)
index 0000000..3e6550f
--- /dev/null
@@ -0,0 +1,469 @@
+# Development
+
+This section describes the steps you need to take to start development
+on paperless-ngx.
+
+Check out the source from github. The repository is organized in the
+following way:
+
+- `main` always represents the latest release and will only see
+  changes when a new release is made.
+- `dev` contains the code that will be in the next release.
+- `feature-X` contain bigger changes that will be in some release, but
+  not necessarily the next one.
+
+When making functional changes to paperless, _always_ make your changes
+on the `dev` branch.
+
+Apart from that, the folder structure is as follows:
+
+- `docs/` - Documentation.
+- `src-ui/` - Code of the front end.
+- `src/` - Code of the back end.
+- `scripts/` - Various scripts that help with different parts of
+  development.
+- `docker/` - Files required to build the docker image.
+
+## Contributing to Paperless
+
+Maybe you've been using Paperless for a while and want to add a feature
+or two, or maybe you've come across a bug that you have some ideas how
+to solve. The beauty of open source software is that you can see what's
+wrong and help to get it fixed for everyone!
+
+Before contributing please review our [code of
+conduct](https://github.com/paperless-ngx/paperless-ngx/blob/main/CODE_OF_CONDUCT.md)
+and other important information in the [contributing
+guidelines](https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md).
+
+## Code formatting with pre-commit Hooks
+
+To ensure a consistent style and formatting across the project source,
+the project utilizes a Git [pre-commit]{.title-ref} hook to perform some
+formatting and linting before a commit is allowed. That way, everyone
+uses the same style and some common issues can be caught early on. See
+below for installation instructions.
+
+Once installed, hooks will run when you commit. If the formatting isn't
+quite right or a linter catches something, the commit will be rejected.
+You'll need to look at the output and fix the issue. Some hooks, such
+as the Python formatting tool [black]{.title-ref}, will format failing
+files, so all you need to do is [git add]{.title-ref} those files again
+and retry your commit.
+
+## Initial setup and first start
+
+After you forked and cloned the code from github you need to perform a
+first-time setup. To do the setup you need to perform the steps from the
+following chapters in a certain order:
+
+1.  Install prerequisites + pipenv as mentioned in
+    `[Bare metal route](/setup#bare_metal)
+
+2.  Copy `paperless.conf.example` to `paperless.conf` and enable debug
+    mode.
+
+3.  Install the Angular CLI interface:
+
+    ```shell-session
+    $ npm install -g @angular/cli
+    ```
+
+4.  Install pre-commit
+
+    ```shell-session
+    pre-commit install
+    ```
+
+5.  Create `consume` and `media` folders in the cloned root folder.
+
+    ```shell-session
+    mkdir -p consume media
+    ```
+
+6.  You can now either \...
+
+    - install redis or
+
+    - use the included scripts/start-services.sh to use docker to fire
+      up a redis instance (and some other services such as tika,
+      gotenberg and a database server) or
+
+    - spin up a bare redis container
+
+      > ```shell-session
+      > docker run -d -p 6379:6379 --restart unless-stopped redis:latest
+      > ```
+
+7.  Install the python dependencies by performing in the src/ directory.
+
+    ```shell-session
+    pipenv install --dev
+    ```
+
+> - Make sure you're using python 3.9.x or lower. Otherwise you might
+>   get issues with building dependencies. You can use
+>   [pyenv](https://github.com/pyenv/pyenv) to install a specific
+>   python version.
+
+8.  Generate the static UI so you can perform a login to get session
+    that is required for frontend development (this needs to be done one
+    time only). From src-ui directory:
+
+    ```shell-session
+    npm install .
+    ./node_modules/.bin/ng build --configuration production
+    ```
+
+9.  Apply migrations and create a superuser for your dev instance:
+
+    ```shell-session
+    python3 manage.py migrate
+    python3 manage.py createsuperuser
+    ```
+
+10. Now spin up the dev backend. Depending on which part of paperless
+    you're developing for, you need to have some or all of them
+    running.
+
+> ```shell-session
+> python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
+> ```
+
+11. Login with the superuser credentials provided in step 8 at
+    `http://localhost:8000` to create a session that enables you to use
+    the backend.
+
+Backend development environment is now ready, to start Frontend
+development go to `/src-ui` and run `ng serve`. From there you can use
+`http://localhost:4200` for a preview.
+
+## Back end development
+
+The backend is a django application. PyCharm works well for development,
+but you can use whatever you want.
+
+Configure the IDE to use the src/ folder as the base source folder.
+Configure the following launch configurations in your IDE:
+
+- python3 manage.py runserver
+- celery \--app paperless worker
+- python3 manage.py document_consumer
+
+To start them all:
+
+```shell-session
+python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
+```
+
+Testing and code style:
+
+- Run `pytest` in the src/ directory to execute all tests. This also
+  generates a HTML coverage report. When runnings test, paperless.conf
+  is loaded as well. However: the tests rely on the default
+  configuration. This is not ideal. But for now, make sure no settings
+  except for DEBUG are overridden when testing.
+
+- Coding style is enforced by the Git pre-commit hooks. These will
+  ensure your code is formatted and do some linting when you do a [git
+  commit]{.title-ref}.
+
+- You can also run `black` manually to format your code
+
+  !!! note
+
+      The line length rule E501 is generally useful for getting multiple
+      source files next to each other on the screen. However, in some
+      cases, its just not possible to make some lines fit, especially
+      complicated IF cases. Append `# NOQA: E501` to disable this check
+      for certain lines.
+
+## Front end development
+
+The front end is built using Angular. In order to get started, you need
+`npm`. Install the Angular CLI interface with
+
+```shell-session
+$ npm install -g @angular/cli
+```
+
+and make sure that it's on your path. Next, in the src-ui/ directory,
+install the required dependencies of the project.
+
+```shell-session
+$ npm install
+```
+
+You can launch a development server by running
+
+```shell-session
+$ ng serve
+```
+
+This will automatically update whenever you save. However, in-place
+compilation might fail on syntax errors, in which case you need to
+restart it.
+
+By default, the development server is available on
+`http://localhost:4200/` and is configured to access the API at
+`http://localhost:8000/api/`, which is the default of the backend. If
+you enabled DEBUG on the back end, several security overrides for
+allowed hosts, CORS and X-Frame-Options are in place so that the front
+end behaves exactly as in production. This also relies on you being
+logged into the back end. Without a valid session, The front end will
+simply not work.
+
+Testing and code style:
+
+- The frontend code (.ts, .html, .scss) use `prettier` for code
+  formatting via the Git `pre-commit` hooks which run automatically on
+  commit. See
+  [above](#code-formatting-with-pre-commit-hooks) for installation. You can also run this via cli with a
+  command such as
+
+  ```shell-session
+  $ git ls-files -- '*.ts' | xargs pre-commit run prettier --files
+  ```
+
+- Frontend testing uses jest and cypress. There is currently a need
+  for significantly more frontend tests. Unit tests and e2e tests,
+  respectively, can be run non-interactively with:
+
+  ```shell-session
+  $ ng test
+  $ npm run e2e:ci
+  ```
+
+  Cypress also includes a UI which can be run from within the `src-ui`
+  directory with
+
+  ```shell-session
+  $ ./node_modules/.bin/cypress open
+  ```
+
+In order to build the front end and serve it as part of django, execute
+
+```shell-session
+$ ng build --prod
+```
+
+This will build the front end and put it in a location from which the
+Django server will serve it as static content. This way, you can verify
+that authentication is working.
+
+## Localization
+
+Paperless is available in many different languages. Since paperless
+consists both of a django application and an Angular front end, both
+these parts have to be translated separately.
+
+### Front end localization
+
+- The Angular front end does localization according to the [Angular
+  documentation](https://angular.io/guide/i18n).
+- The source language of the project is "en_US".
+- The source strings end up in the file "src-ui/messages.xlf".
+- The translated strings need to be placed in the
+  "src-ui/src/locale/" folder.
+- In order to extract added or changed strings from the source files,
+  call `ng xi18n --ivy`.
+
+Adding new languages requires adding the translated files in the
+"src-ui/src/locale/" folder and adjusting a couple files.
+
+1.  Adjust "src-ui/angular.json":
+
+    ```json
+    "i18n": {
+        "sourceLocale": "en-US",
+        "locales": {
+            "de": "src/locale/messages.de.xlf",
+            "nl-NL": "src/locale/messages.nl_NL.xlf",
+            "fr": "src/locale/messages.fr.xlf",
+            "en-GB": "src/locale/messages.en_GB.xlf",
+            "pt-BR": "src/locale/messages.pt_BR.xlf",
+            "language-code": "language-file"
+        }
+    }
+    ```
+
+2.  Add the language to the available options in
+    "src-ui/src/app/services/settings.service.ts":
+
+    ```typescript
+    getLanguageOptions(): LanguageOption[] {
+        return [
+            {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"},
+            {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"},
+            {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"},
+            {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"},
+            {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"},
+            {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}
+            // Add your new language here
+        ]
+    }
+    ```
+
+    `dateInputFormat` is a special string that defines the behavior of
+    the date input fields and absolutely needs to contain "dd", "mm"
+    and "yyyy".
+
+3.  Import and register the Angular data for this locale in
+    "src-ui/src/app/app.module.ts":
+
+    ```typescript
+    import localeDe from '@angular/common/locales/de'
+    registerLocaleData(localeDe)
+    ```
+
+### Back end localization
+
+A majority of the strings that appear in the back end appear only when
+the admin is used. However, some of these are still shown on the front
+end (such as error messages).
+
+- The django application does localization according to the [django
+  documentation](https://docs.djangoproject.com/en/3.1/topics/i18n/translation/).
+- The source language of the project is "en_US".
+- Localization files end up in the folder "src/locale/".
+- In order to extract strings from the application, call
+  `python3 manage.py makemessages -l en_US`. This is important after
+  making changes to translatable strings.
+- The message files need to be compiled for them to show up in the
+  application. Call `python3 manage.py compilemessages` to do this.
+  The generated files don't get committed into git, since these are
+  derived artifacts. The build pipeline takes care of executing this
+  command.
+
+Adding new languages requires adding the translated files in the
+"src/locale/" folder and adjusting the file
+"src/paperless/settings.py" to include the new language:
+
+```python
+LANGUAGES = [
+    ("en-us", _("English (US)")),
+    ("en-gb", _("English (GB)")),
+    ("de", _("German")),
+    ("nl-nl", _("Dutch")),
+    ("fr", _("French")),
+    ("pt-br", _("Portuguese (Brazil)")),
+    # Add language here.
+]
+```
+
+## Building the documentation
+
+The documentation is built using material-mkdocs, see their [documentation](https://squidfunk.github.io/mkdocs-material/reference/). If you want to build the documentation locally, this is how you do it:
+
+1.  Install python dependencies.
+
+    ```shell-session
+    $ cd /path/to/paperless
+    $ pipenv install --dev
+    ```
+
+2.  Build the documentation
+
+    ```shell-session
+    $ cd /path/to/paperless
+    $ pipenv mkdocs build
+    ```
+
+## Building the Docker image
+
+The docker image is primarily built by the GitHub actions workflow, but
+it can be faster when developing to build and tag an image locally.
+
+To provide the build arguments automatically, build the image using the
+helper script `build-docker-image.sh`.
+
+Building the docker image from source:
+
+> ```shell-session
+> ./build-docker-image.sh Dockerfile -t <your-tag>
+> ```
+
+## Extending Paperless
+
+Paperless does not have any fancy plugin systems and will probably never
+have. However, some parts of the application have been designed to allow
+easy integration of additional features without any modification to the
+base code.
+
+### Making custom parsers
+
+Paperless uses parsers to add documents to paperless. A parser is
+responsible for:
+
+- Retrieve the content from the original
+- Create a thumbnail
+- Optional: Retrieve a created date from the original
+- Optional: Create an archived document from the original
+
+Custom parsers can be added to paperless to support more file types. In
+order to do that, you need to write the parser itself and announce its
+existence to paperless.
+
+The parser itself must extend `documents.parsers.DocumentParser` and
+must implement the methods `parse` and `get_thumbnail`. You can provide
+your own implementation to `get_date` if you don't want to rely on
+paperless' default date guessing mechanisms.
+
+```python
+class MyCustomParser(DocumentParser):
+
+    def parse(self, document_path, mime_type):
+        # This method does not return anything. Rather, you should assign
+        # whatever you got from the document to the following fields:
+
+        # The content of the document.
+        self.text = "content"
+
+        # Optional: path to a PDF document that you created from the original.
+        self.archive_path = os.path.join(self.tempdir, "archived.pdf")
+
+        # Optional: "created" date of the document.
+        self.date = get_created_from_metadata(document_path)
+
+    def get_thumbnail(self, document_path, mime_type):
+        # This should return the path to a thumbnail you created for this
+        # document.
+        return os.path.join(self.tempdir, "thumb.png")
+```
+
+If you encounter any issues during parsing, raise a
+`documents.parsers.ParseError`.
+
+The `self.tempdir` directory is a temporary directory that is guaranteed
+to be empty and removed after consumption finished. You can use that
+directory to store any intermediate files and also use it to store the
+thumbnail / archived document.
+
+After that, you need to announce your parser to paperless. You need to
+connect a handler to the `document_consumer_declaration` signal. Have a
+look in the file `src/paperless_tesseract/apps.py` on how that's done.
+The handler is a method that returns information about your parser:
+
+```python
+def myparser_consumer_declaration(sender, **kwargs):
+    return {
+        "parser": MyCustomParser,
+        "weight": 0,
+        "mime_types": {
+            "application/pdf": ".pdf",
+            "image/jpeg": ".jpg",
+        }
+    }
+```
+
+- `parser` is a reference to a class that extends `DocumentParser`.
+- `weight` is used whenever two or more parsers are able to parse a
+  file: The parser with the higher weight wins. This can be used to
+  override the parsers provided by paperless.
+- `mime_types` is a dictionary. The keys are the mime types your
+  parser supports and the value is the default file extension that
+  paperless should use when storing files and serving them for
+  download. We could guess that from the file extensions, but some
+  mime types have many extensions associated with them and the python
+  methods responsible for guessing the extension do not always return
+  the same value.
diff --git a/docs/extending.rst b/docs/extending.rst
deleted file mode 100644 (file)
index e8126fd..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-.. _extending:
-
-Paperless-ngx Development
-#########################
-
-This section describes the steps you need to take to start development on paperless-ngx.
-
-Check out the source from github. The repository is organized in the following way:
-
-*   ``main`` always represents the latest release and will only see changes
-    when a new release is made.
-*   ``dev`` contains the code that will be in the next release.
-*   ``feature-X`` contain bigger changes that will be in some release, but not
-    necessarily the next one.
-
-When making functional changes to paperless, *always* make your changes on the ``dev`` branch.
-
-Apart from that, the folder structure is as follows:
-
-*   ``docs/`` - Documentation.
-*   ``src-ui/`` - Code of the front end.
-*   ``src/`` - Code of the back end.
-*   ``scripts/`` - Various scripts that help with different parts of development.
-*   ``docker/`` - Files required to build the docker image.
-
-Contributing to Paperless
-=========================
-
-Maybe you've been using Paperless for a while and want to add a feature or two,
-or maybe you've come across a bug that you have some ideas how to solve.  The
-beauty of open source software is that you can see what's wrong and help to get
-it fixed for everyone!
-
-Before contributing please review our `code of conduct`_ and other important
-information in the `contributing guidelines`_.
-
-.. _code-formatting-with-pre-commit-hooks:
-
-Code formatting with pre-commit Hooks
-=====================================
-
-To ensure a consistent style and formatting across the project source, the project
-utilizes a Git `pre-commit` hook to perform some formatting and linting before a
-commit is allowed. That way, everyone uses the same style and some common issues
-can be caught early on. See below for installation instructions.
-
-Once installed, hooks will run when you commit. If the formatting isn't quite right
-or a linter catches something, the commit will be rejected. You'll need to look at the
-output and fix the issue. Some hooks, such as the Python formatting tool `black`,
-will format failing files, so all you need to do is `git add` those files again and
-retry your commit.
-
-Initial setup and first start
-=============================
-
-After you forked and cloned the code from github you need to perform a first-time setup.
-To do the setup you need to perform the steps from the following chapters in a certain order:
-
-1.  Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>`
-2.  Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode.
-3.  Install the Angular CLI interface:
-
-    .. code:: shell-session
-
-        $ npm install -g @angular/cli
-
-4.  Install pre-commit
-
-    .. code:: shell-session
-
-        pre-commit install
-
-5.  Create ``consume`` and ``media`` folders in the cloned root folder.
-
-    .. code:: shell-session
-
-        mkdir -p consume media
-
-6.  You can now either ...
-
-    *  install redis or
-    *  use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a database server) or
-    *  spin up a bare redis container
-
-        .. code:: shell-session
-
-            docker run -d -p 6379:6379 --restart unless-stopped redis:latest
-
-7.  Install the python dependencies by performing in the src/ directory.
-
-    .. code:: shell-session
-
-        pipenv install --dev
-
-  * Make sure you're using python 3.9.x or lower. Otherwise you might get issues with building dependencies. You can use `pyenv <https://github.com/pyenv/pyenv>`_ to install a specific python version.
-
-8.  Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From src-ui directory:
-
-    .. code:: shell-session
-
-        npm install .
-        ./node_modules/.bin/ng build --configuration production
-
-9.  Apply migrations and create a superuser for your dev instance:
-
-    .. code:: shell-session
-
-        python3 manage.py migrate
-        python3 manage.py createsuperuser
-
-10.  Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running.
-
-    .. code:: shell-session
-
-        python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
-
-11. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend.
-
-Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview.
-
-Back end development
-====================
-
-The backend is a django application. PyCharm works well for development, but you can use whatever
-you want.
-
-Configure the IDE to use the src/ folder as the base source folder. Configure the following
-launch configurations in your IDE:
-
-*   python3 manage.py runserver
-*   celery --app paperless worker
-*   python3 manage.py document_consumer
-
-To start them all:
-
-.. code:: shell-session
-
-    python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
-
-Testing and code style:
-
-*   Run ``pytest`` in the src/ directory to execute all tests. This also generates a HTML coverage
-    report. When runnings test, paperless.conf is loaded as well. However: the tests rely on the default
-    configuration. This is not ideal. But for now, make sure no settings except for DEBUG are overridden when testing.
-*   Coding style is enforced by the Git pre-commit hooks.  These will ensure your code is formatted and do some
-    linting when you do a `git commit`.
-*   You can also run ``black`` manually to format your code
-
-    .. note::
-
-        The line length rule E501 is generally useful for getting multiple source files
-        next to each other on the screen. However, in some cases, its just not possible
-        to make some lines fit, especially complicated IF cases. Append ``# NOQA: E501``
-        to disable this check for certain lines.
-
-Front end development
-=====================
-
-The front end is built using Angular. In order to get started, you need ``npm``.
-Install the Angular CLI interface with
-
-.. code:: shell-session
-
-    $ npm install -g @angular/cli
-
-and make sure that it's on your path. Next, in the src-ui/ directory, install the
-required dependencies of the project.
-
-.. code:: shell-session
-
-    $ npm install
-
-You can launch a development server by running
-
-.. code:: shell-session
-
-    $ ng serve
-
-This will automatically update whenever you save. However, in-place compilation might fail
-on syntax errors, in which case you need to restart it.
-
-By default, the development server is available on ``http://localhost:4200/`` and is configured
-to access the API at ``http://localhost:8000/api/``, which is the default of the backend.
-If you enabled DEBUG on the back end, several security overrides for allowed hosts, CORS and
-X-Frame-Options are in place so that the front end behaves exactly as in production. This also
-relies on you being logged into the back end. Without a valid session, The front end will simply
-not work.
-
-Testing and code style:
-
-*   The frontend code (.ts, .html, .scss) use ``prettier`` for code formatting via the Git
-    ``pre-commit`` hooks which run automatically on commit. See
-    :ref:`above <code-formatting-with-pre-commit-hooks>` for installation. You can also run this
-    via cli with a command such as
-
-    .. code:: shell-session
-
-        $ git ls-files -- '*.ts' | xargs pre-commit run prettier --files
-
-*   Frontend testing uses jest and cypress. There is currently a need for significantly more
-    frontend tests. Unit tests and e2e tests, respectively, can be run non-interactively with:
-
-    .. code:: shell-session
-
-        $ ng test
-        $ npm run e2e:ci
-
-    Cypress also includes a UI which can be run from within the ``src-ui`` directory with
-
-    .. code:: shell-session
-
-        $ ./node_modules/.bin/cypress open
-
-In order to build the front end and serve it as part of django, execute
-
-.. code:: shell-session
-
-    $ ng build --prod
-
-This will build the front end and put it in a location from which the Django server will serve
-it as static content. This way, you can verify that authentication is working.
-
-
-Localization
-============
-
-Paperless is available in many different languages. Since paperless consists both of a django
-application and an Angular front end, both these parts have to be translated separately.
-
-Front end localization
-----------------------
-
-*   The Angular front end does localization according to the `Angular documentation <https://angular.io/guide/i18n>`_.
-*   The source language of the project is "en_US".
-*   The source strings end up in the file "src-ui/messages.xlf".
-*   The translated strings need to be placed in the "src-ui/src/locale/" folder.
-*   In order to extract added or changed strings from the source files, call ``ng xi18n --ivy``.
-
-Adding new languages requires adding the translated files in the "src-ui/src/locale/" folder and adjusting a couple files.
-
-1.  Adjust "src-ui/angular.json":
-
-    .. code:: json
-
-        "i18n": {
-            "sourceLocale": "en-US",
-            "locales": {
-                "de": "src/locale/messages.de.xlf",
-                "nl-NL": "src/locale/messages.nl_NL.xlf",
-                "fr": "src/locale/messages.fr.xlf",
-                "en-GB": "src/locale/messages.en_GB.xlf",
-                "pt-BR": "src/locale/messages.pt_BR.xlf",
-                "language-code": "language-file"
-            }
-        }
-
-2.  Add the language to the available options in "src-ui/src/app/services/settings.service.ts":
-
-    .. code:: typescript
-
-        getLanguageOptions(): LanguageOption[] {
-            return [
-                {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"},
-                {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"},
-                {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"},
-                {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"},
-                {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"},
-                {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}
-                // Add your new language here
-            ]
-        }
-
-    ``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy".
-
-3.  Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts":
-
-    .. code:: typescript
-
-        import localeDe from '@angular/common/locales/de';
-        registerLocaleData(localeDe)
-
-Back end localization
----------------------
-
-A majority of the strings that appear in the back end appear only when the admin is used. However,
-some of these are still shown on the front end (such as error messages).
-
-*   The django application does localization according to the `django documentation <https://docs.djangoproject.com/en/3.1/topics/i18n/translation/>`_.
-*   The source language of the project is "en_US".
-*   Localization files end up in the folder "src/locale/".
-*   In order to extract strings from the application, call ``python3 manage.py makemessages -l en_US``. This is important after making changes to translatable strings.
-*   The message files need to be compiled for them to show up in the application. Call ``python3 manage.py compilemessages`` to do this. The generated files don't get
-    committed into git, since these are derived artifacts. The build pipeline takes care of executing this command.
-
-Adding new languages requires adding the translated files in the "src/locale/" folder and adjusting the file "src/paperless/settings.py" to include the new language:
-
-.. code:: python
-
-    LANGUAGES = [
-        ("en-us", _("English (US)")),
-        ("en-gb", _("English (GB)")),
-        ("de", _("German")),
-        ("nl-nl", _("Dutch")),
-        ("fr", _("French")),
-        ("pt-br", _("Portuguese (Brazil)")),
-        # Add language here.
-    ]
-
-
-Building the documentation
-==========================
-
-The documentation is built using sphinx. I've configured ReadTheDocs to automatically build
-the documentation when changes are pushed. If you want to build the documentation locally,
-this is how you do it:
-
-1.  Install python dependencies.
-
-    .. code:: shell-session
-
-        $ cd /path/to/paperless
-        $ pipenv install --dev
-
-2.  Build the documentation
-
-    .. code:: shell-session
-
-        $ cd /path/to/paperless/docs
-        $ pipenv run make clean html
-
-This will build the HTML documentation, and put the resulting files in the ``_build/html``
-directory.
-
-Building the Docker image
-=========================
-
-The docker image is primarily built by the GitHub actions workflow, but it can be
-faster when developing to build and tag an image locally.
-
-To provide the build arguments automatically, build the image using the helper
-script ``build-docker-image.sh``.
-
-Building the docker image from source:
-
-    .. code:: shell-session
-
-        ./build-docker-image.sh Dockerfile -t <your-tag>
-
-Extending Paperless
-===================
-
-Paperless does not have any fancy plugin systems and will probably never have. However,
-some parts of the application have been designed to allow easy integration of additional
-features without any modification to the base code.
-
-Making custom parsers
----------------------
-
-Paperless uses parsers to add documents to paperless. A parser is responsible for:
-
-*   Retrieve the content from the original
-*   Create a thumbnail
-*   Optional: Retrieve a created date from the original
-*   Optional: Create an archived document from the original
-
-Custom parsers can be added to paperless to support more file types. In order to do that,
-you need to write the parser itself and announce its existence to paperless.
-
-The parser itself must extend ``documents.parsers.DocumentParser`` and must implement the
-methods ``parse`` and ``get_thumbnail``. You can provide your own implementation to
-``get_date`` if you don't want to rely on paperless' default date guessing mechanisms.
-
-.. code:: python
-
-    class MyCustomParser(DocumentParser):
-
-        def parse(self, document_path, mime_type):
-            # This method does not return anything. Rather, you should assign
-            # whatever you got from the document to the following fields:
-
-            # The content of the document.
-            self.text = "content"
-
-            # Optional: path to a PDF document that you created from the original.
-            self.archive_path = os.path.join(self.tempdir, "archived.pdf")
-
-            # Optional: "created" date of the document.
-            self.date = get_created_from_metadata(document_path)
-
-        def get_thumbnail(self, document_path, mime_type):
-            # This should return the path to a thumbnail you created for this
-            # document.
-            return os.path.join(self.tempdir, "thumb.png")
-
-If you encounter any issues during parsing, raise a ``documents.parsers.ParseError``.
-
-The ``self.tempdir`` directory is a temporary directory that is guaranteed to be empty
-and removed after consumption finished. You can use that directory to store any
-intermediate files and also use it to store the thumbnail / archived document.
-
-After that, you need to announce your parser to paperless. You need to connect a
-handler to the ``document_consumer_declaration`` signal. Have a look in the file
-``src/paperless_tesseract/apps.py`` on how that's done. The handler is a method
-that returns information about your parser:
-
-.. code:: python
-
-    def myparser_consumer_declaration(sender, **kwargs):
-        return {
-            "parser": MyCustomParser,
-            "weight": 0,
-            "mime_types": {
-                "application/pdf": ".pdf",
-                "image/jpeg": ".jpg",
-            }
-        }
-
-*   ``parser`` is a reference to a class that extends ``DocumentParser``.
-
-*   ``weight`` is used whenever two or more parsers are able to parse a file: The parser with
-    the higher weight wins. This can be used to override the parsers provided by
-    paperless.
-
-*   ``mime_types`` is a dictionary. The keys are the mime types your parser supports and the value
-    is the default file extension that paperless should use when storing files and serving them for
-    download. We could guess that from the file extensions, but some mime types have many extensions
-    associated with them and the python methods responsible for guessing the extension do not always
-    return the same value.
-
-.. _code of conduct: https://github.com/paperless-ngx/paperless-ngx/blob/main/CODE_OF_CONDUCT.md
-.. _contributing guidelines: https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md
diff --git a/docs/faq.md b/docs/faq.md
new file mode 100644 (file)
index 0000000..ac83455
--- /dev/null
@@ -0,0 +1,125 @@
+# Frequently Asked Questions
+
+### _What's the general plan for Paperless-ngx?_
+
+**A:** While Paperless-ngx is already considered largely
+"feature-complete" it is a community-driven project and development
+will be guided in this way. New features can be submitted via GitHub
+discussions and "up-voted" by the community but this is not a
+guarantee the feature will be implemented. This project will always be
+open to collaboration in the form of PRs, ideas etc.
+
+### _I'm using docker. Where are my documents?_
+
+**A:** Your documents are stored inside the docker volume
+`paperless_media`. Docker manages this volume automatically for you. It
+is a persistent storage and will persist as long as you don't
+explicitly delete it. The actual location depends on your host operating
+system. On Linux, chances are high that this location is
+
+```
+/var/lib/docker/volumes/paperless_media/_data
+```
+
+!!! warning
+
+    Do not mess with this folder. Don't change permissions and don't move
+    files around manually. This folder is meant to be entirely managed by
+    docker and paperless.
+
+### Let's say I want to switch tools in a year. Can I easily move
+
+to other systems?\*
+
+**A:** Your documents are stored as plain files inside the media folder.
+You can always drag those files out of that folder to use them
+elsewhere. Here are a couple notes about that.
+
+- Paperless-ngx never modifies your original documents. It keeps
+  checksums of all documents and uses a scheduled sanity checker to
+  check that they remain the same.
+- By default, paperless uses the internal ID of each document as its
+  filename. This might not be very convenient for export. However, you
+  can adjust the way files are stored in paperless by
+  [configuring the filename format](advanced_usage#file_name_handling).
+- [The exporter](administration#exporter) is
+  another easy way to get your files out of paperless with reasonable
+  file names.
+
+### _What file types does paperless-ngx support?_
+
+**A:** Currently, the following files are supported:
+
+- PDF documents, PNG images, JPEG images, TIFF images and GIF images
+  are processed with OCR and converted into PDF documents.
+- Plain text documents are supported as well and are added verbatim to
+  paperless.
+- With the optional Tika integration enabled (see [Tika configuration](configuration#tika),
+  Paperless also supports various Office documents (.docx, .doc, odt,
+  .ppt, .pptx, .odp, .xls, .xlsx, .ods).
+
+Paperless-ngx determines the type of a file by inspecting its content.
+The file extensions do not matter.
+
+### _Will paperless-ngx run on Raspberry Pi?_
+
+**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
+The long answer is that certain parts of Paperless will run very slow,
+such as the OCR. On Raspberry Pi, try to OCR documents before feeding
+them into paperless so that paperless can reuse the text. The web
+interface is a lot snappier, since it runs in your browser and paperless
+has to do much less work to serve the data.
+
+!!! note
+
+    You can adjust some of the settings so that paperless uses less
+    processing power. See [setup](setup#less_powerful_devices) for details.
+
+### _How do I install paperless-ngx on Raspberry Pi?_
+
+**A:** Docker images are available for arm and arm64 hardware, so just
+follow the docker-compose instructions. Apart from more required disk
+space compared to a bare metal installation, docker comes with close to
+zero overhead, even on Raspberry Pi.
+
+If you decide to got with the bare metal route, be aware that some of
+the python requirements do not have precompiled packages for ARM /
+ARM64. Installation of these will require additional development
+libraries and compilation will take a long time.
+
+### _How do I run this on Unraid?_
+
+**A:** Paperless-ngx is available as [community
+app](https://unraid.net/community/apps?q=paperless-ngx) in Unraid. [Uli
+Fahrer](https://github.com/Tooa) created a container template for that.
+
+### _How do I run this on my toaster?_
+
+**A:** I honestly don't know! As for all other devices that might be
+able to run paperless, you're a bit on your own. If you can't run the
+docker image, the documentation has instructions for bare metal
+installs. I'm running paperless on an i3 processor from 2015 or so.
+This is also what I use to test new releases with. Apart from that, I
+also have a Raspberry Pi, which I occasionally build the image on and
+see if it works.
+
+### _How do I proxy this with NGINX?_
+
+**A:** See [here](setup#nginx).
+
+### _How do I get WebSocket support with Apache mod_wsgi_?
+
+**A:** `mod_wsgi` by itself does not support ASGI. Paperless will
+continue to work with WSGI, but certain features such as status
+notifications about document consumption won't be available.
+
+If you want to continue using `mod_wsgi`, you will have to run an
+ASGI-enabled web server as well that processes WebSocket connections,
+and configure Apache to redirect WebSocket connections to this server.
+Multiple options for ASGI servers exist:
+
+- `gunicorn` with `uvicorn` as the worker implementation (the default
+  of paperless)
+- `daphne` as a standalone server, which is the reference
+  implementation for ASGI.
+- `uvicorn` as a standalone server
diff --git a/docs/faq.rst b/docs/faq.rst
deleted file mode 100644 (file)
index 1b2892f..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-
-**************************
-Frequently asked questions
-**************************
-
-**Q:** *What's the general plan for Paperless-ngx?*
-
-**A:** While Paperless-ngx is already considered largely "feature-complete" it is a community-driven
-project and development will be guided in this way. New features can be submitted via
-GitHub discussions and "up-voted" by the community but this is not a guarantee the feature
-will be implemented. This project will always be open to collaboration in the form of PRs,
-ideas etc.
-
-**Q:** *I'm using docker. Where are my documents?*
-
-**A:** Your documents are stored inside the docker volume ``paperless_media``.
-Docker manages this volume automatically for you. It is a persistent storage
-and will persist as long as you don't explicitly delete it. The actual location
-depends on your host operating system. On Linux, chances are high that this location
-is
-
-.. code::
-
-    /var/lib/docker/volumes/paperless_media/_data
-
-.. caution::
-
-    Do not mess with this folder. Don't change permissions and don't move
-    files around manually. This folder is meant to be entirely managed by docker
-    and paperless.
-
-**Q:** *Let's say I want to switch tools in a year. Can I easily move to other systems?*
-
-**A:** Your documents are stored as plain files inside the media folder. You can always drag those files
-out of that folder to use them elsewhere. Here are a couple notes about that.
-
-*   Paperless-ngx never modifies your original documents. It keeps checksums of all documents and uses a
-    scheduled sanity checker to check that they remain the same.
-*   By default, paperless uses the internal ID of each document as its filename. This might not be very
-    convenient for export. However, you can adjust the way files are stored in paperless by
-    :ref:`configuring the filename format <advanced-file_name_handling>`.
-*   :ref:`The exporter <utilities-exporter>` is another easy way to get your files out of paperless with reasonable file names.
-
-**Q:** *What file types does paperless-ngx support?*
-
-**A:** Currently, the following files are supported:
-
-*   PDF documents, PNG images, JPEG images, TIFF images and GIF images are processed with OCR and converted into PDF documents.
-*   Plain text documents are supported as well and are added verbatim
-    to paperless.
-*   With the optional Tika integration enabled (see :ref:`Configuration <configuration-tika>`), Paperless also supports various
-    Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods).
-
-Paperless-ngx determines the type of a file by inspecting its content. The
-file extensions do not matter.
-
-**Q:** *Will paperless-ngx run on Raspberry Pi?*
-
-**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
-The long answer is that certain parts of
-Paperless will run very slow, such as the OCR. On Raspberry Pi,
-try to OCR documents before feeding them into paperless so that paperless can
-reuse the text. The web interface is a lot snappier, since it runs
-in your browser and paperless has to do much less work to serve the data.
-
-.. note::
-
-    You can adjust some of the settings so that paperless uses less processing
-    power. See :ref:`setup-less_powerful_devices` for details.
-
-
-**Q:** *How do I install paperless-ngx on Raspberry Pi?*
-
-**A:** Docker images are available for arm and arm64 hardware, so just follow
-the docker-compose instructions. Apart from more required disk space compared to
-a bare metal installation, docker comes with close to zero overhead, even on
-Raspberry Pi.
-
-If you decide to got with the bare metal route, be aware that some of the
-python requirements do not have precompiled packages for ARM / ARM64. Installation
-of these will require additional development libraries and compilation will take
-a long time.
-
-**Q:** *How do I run this on Unraid?*
-
-**A:** Paperless-ngx is available as `community app <https://unraid.net/community/apps?q=paperless-ngx>`_
-in Unraid. `Uli Fahrer <https://github.com/Tooa>`_ created a container template for that.
-
-**Q:** *How do I run this on my toaster?*
-
-**A:** I honestly don't know! As for all other devices that might be able
-to run paperless, you're a bit on your own. If you can't run the docker image,
-the documentation has instructions for bare metal installs. I'm running
-paperless on an i3 processor from 2015 or so. This is also what I use to test
-new releases with. Apart from that, I also have a Raspberry Pi, which I
-occasionally build the image on and see if it works.
-
-**Q:** *How do I proxy this with NGINX?*
-
-**A:** See :ref:`here <setup-nginx>`.
-
-.. _faq-mod_wsgi:
-
-**Q:** *How do I get WebSocket support with Apache mod_wsgi*?
-
-**A:** ``mod_wsgi`` by itself does not support ASGI. Paperless will continue
-to work with WSGI, but certain features such as status notifications about
-document consumption won't be available.
-
-If you want to continue using ``mod_wsgi``, you will have to run an ASGI-enabled
-web server as well that processes WebSocket connections, and configure Apache to
-redirect WebSocket connections to this server. Multiple options for ASGI servers
-exist:
-
-* ``gunicorn`` with ``uvicorn`` as the worker implementation (the default of paperless)
-* ``daphne`` as a standalone server, which is the reference implementation for ASGI.
-* ``uvicorn`` as a standalone server
diff --git a/docs/index.md b/docs/index.md
new file mode 100644 (file)
index 0000000..75a09b2
--- /dev/null
@@ -0,0 +1,138 @@
+<div class="grid-left" markdown>
+![image](assets/logo_full_black.svg#only-light){.index-logo}
+![image](assets/logo_full_white.svg#only-dark){.index-logo}
+
+**Paperless-ngx** is a _community-supported_ open-source document management system that transforms your
+physical documents into a searchable online archive so you can keep, well, _less paper_.
+
+[Get started](/setup/){ .md-button .md-button--primary .index-callout }
+[Demo](https://demo.paperless-ngx.com){ .md-button .md-button--secondary target=\_blank }
+
+</div>
+<div class="grid-right" markdown>
+![image](assets/screenshots/documents-smallcards.png#only-light){.index-screenshot}
+![image](assets/screenshots/documents-smallcards-dark.png#only-dark){.index-screenshot}
+</div>
+<div class="clear"></div>
+
+## Why This Exists
+
+Paper is a nightmare. Environmental issues aside, there's no excuse for
+it in the 21st century. It takes up space, collects dust, doesn't
+support any form of a search feature, indexing is tedious, it's heavy
+and prone to damage & loss.
+
+This software is designed to make "going paperless" easier. No more worrying
+about finding stuff again, feed documents right from the post box into
+the scanner and then shred them. Perhaps you might find it useful too.
+
+## Paperless, a history
+
+Paperless is a simple Django application running in two parts: a
+_Consumer_ (the thing that does the indexing) and the _Web server_ (the
+part that lets you search & download already-indexed documents). If you
+want to learn more about its functions keep on reading after the
+installation section.
+
+Paperless-ngx is a document management system that transforms your
+physical documents into a searchable online archive so you can keep,
+well, _less paper_.
+
+Paperless-ngx forked from paperless-ng to continue the great work and
+distribute responsibility of supporting and advancing the project among
+a team of people.
+
+NG stands for both Angular (the framework used for the Frontend) and
+next-gen. Publishing this project under a different name also avoids
+confusion between paperless and paperless-ngx.
+
+If you want to learn about what's different in paperless-ngx from
+Paperless, check out these resources in the documentation:
+
+- [Some screenshots](#screenshots) of the new UI are available.
+- Read [this section](/advanced_usage/#advanced-automatic_matching) if you want to learn about how paperless automates all
+  tagging using machine learning.
+- Paperless now comes with a [proper email consumer](/usage/#usage-email) that's fully tested and production ready.
+- Paperless creates searchable PDF/A documents from whatever you put into the consumption directory. This means
+  that you can select text in image-only documents coming from your scanner.
+- See [this note](/administration/#utilities-encyption) about GnuPG encryption in paperless-ngx.
+- Paperless is now integrated with a
+  [task processing queue](/setup#task_processor) that tells you at a glance when and why something is not working.
+- The [changelog](/changelog) contains a detailed list of all changes in paperless-ngx.
+
+## Screenshots
+
+This is what Paperless-ngx looks like.
+
+The dashboard shows customizable views on your document and allows
+document uploads:
+
+[![image](assets/screenshots/dashboard.png)](assets/screenshots/dashboard.png)
+
+The document list provides three different styles to scroll through your
+documents:
+
+[![image](assets/screenshots/documents-table.png)](assets/screenshots/documents-table.png)
+
+[![image](assets/screenshots/documents-smallcards.png)](assets/screenshots/documents-smallcards.png)
+
+[![image](assets/screenshots/documents-largecards.png)](assets/screenshots/documents-largecards.png)
+
+Paperless-ngx also supports dark mode:
+
+[![image](assets/screenshots/documents-smallcards-dark.png)](assets/screenshots/documents-smallcards-dark.png)
+
+Extensive filtering mechanisms:
+
+[![image](assets/screenshots/documents-filter.png)](assets/screenshots/documents-filter.png)
+
+Bulk editing of document tags, correspondents, etc.:
+
+[![image](assets/screenshots/bulk-edit.png)](assets/screenshots/bulk-edit.png)
+
+Side-by-side editing of documents:
+
+[![image](assets/screenshots/editing.png)](assets/screenshots/editing.png)
+
+Tag editing. This looks about the same for correspondents and document
+types.
+
+[![image](assets/screenshots/new-tag.png)](assets/screenshots/new-tag.png)
+
+Searching provides auto complete and highlights the results.
+
+[![image](assets/screenshots/search-preview.png)](assets/screenshots/search-preview.png)
+
+[![image](assets/screenshots/search-results.png)](assets/screenshots/search-results.png)
+
+Fancy mail filters!
+
+[![image](assets/screenshots/mail-rules-edited.png)](assets/screenshots/mail-rules-edited.png)
+
+Mobile devices are supported.
+
+[![image](assets/screenshots/mobile.png)](assets/screenshots/mobile.png)
+
+## Support
+
+Community support is available via [GitHub Discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/) and [the Matrix chat room](https://matrix.to/#/#paperless:matrix.org).
+
+### Feature Requests
+
+Feature requests can be submitted via [GitHub Discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests) where you can search for existing ideas, add your own and vote for the ones you care about.
+
+### Bugs
+
+For bugs please [open an issue](https://github.com/paperless-ngx/paperless-ngx/issues) or [start a discussion](https://github.com/paperless-ngx/paperless-ngx/discussions/categories/support) if you have questions.
+
+## Contributing
+
+People interested in continuing the work on paperless-ngx are encouraged to reach out on [GitHub](https://github.com/paperless-ngx/paperless-ngx) or [the Matrix chat room](https://matrix.to/#/#paperless:matrix.org). If you would like to contribute to the project on an ongoing basis there are multiple teams (frontend, ci/cd, etc) that could use your help so please reach out!
+
+### Translation
+
+Paperless-ngx is available in many languages that are coordinated on [Crowdin](https://crwd.in/paperless-ngx). If you want to help out by translating paperless-ngx into your language, please head over to https://crwd.in/paperless-ngx, and thank you!
+
+## Scanners & Software
+
+Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on [the wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations).
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644 (file)
index 7358045..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-*********
-Paperless
-*********
-
-Paperless is a simple Django application running in two parts:
-a *Consumer* (the thing that does the indexing) and
-the *Web server* (the part that lets you search &
-download already-indexed documents). If you want to learn more about its
-functions keep on reading after the installation section.
-
-
-Why This Exists
-===============
-
-Paper is a nightmare.  Environmental issues aside, there's no excuse for it in
-the 21st century.  It takes up space, collects dust, doesn't support any form
-of a search feature, indexing is tedious, it's heavy and prone to damage &
-loss.
-
-I wrote this to make "going paperless" easier.  I do not have to worry about
-finding stuff again. I feed documents right from the post box into the scanner
-and then shred them.  Perhaps you might find it useful too.
-
-
-Paperless-ngx
-=============
-
-Paperless-ngx is a document management system that transforms your physical
-documents into a searchable online archive so you can keep, well, *less paper*.
-
-Paperless-ngx forked from paperless-ng to continue the great work and
-distribute responsibility of supporting and advancing the project among a team
-of people.
-
-NG stands for both Angular (the framework used for the
-Frontend) and next-gen. Publishing this project under a different name also
-avoids confusion between paperless and paperless-ngx.
-
-If you want to learn about what's different in paperless-ngx from Paperless, check out these
-resources in the documentation:
-
-*   :ref:`Some screenshots <screenshots>` of the new UI are available.
-*   Read :ref:`this section <advanced-automatic_matching>` if you want to
-    learn about how paperless automates all tagging using machine learning.
-*   Paperless now comes with a :ref:`proper email consumer <usage-email>`
-    that's fully tested and production ready.
-*   Paperless creates searchable PDF/A documents from whatever you put into
-    the consumption directory. This means that you can select text in
-    image-only documents coming from your scanner.
-*   See :ref:`this note <utilities-encyption>` about GnuPG encryption in
-    paperless-ngx.
-*   Paperless is now integrated with a
-    :ref:`task processing queue <setup-task_processor>` that tells you
-    at a glance when and why something is not working.
-*   The :doc:`changelog </changelog>` contains a detailed list of all changes
-    in paperless-ngx.
-
-Contents
-========
-
-.. toctree::
-   :maxdepth: 1
-
-   setup
-   usage_overview
-   advanced_usage
-   administration
-   configuration
-   api
-   faq
-   troubleshooting
-   extending
-   scanners
-   screenshots
-   changelog
diff --git a/docs/requirements.txt b/docs/requirements.txt
deleted file mode 100644 (file)
index d911401..0000000
+++ /dev/null
@@ -1 +0,0 @@
-myst-parser==0.18.1
diff --git a/docs/scanners.rst b/docs/scanners.rst
deleted file mode 100644 (file)
index 68b0b33..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.. _scanners:
-
-*******************
-Scanners & Software
-*******************
-
-Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on `the wiki <https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations>`_.
diff --git a/docs/screenshots.rst b/docs/screenshots.rst
deleted file mode 100644 (file)
index 1815575..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-.. _screenshots:
-
-***********
-Screenshots
-***********
-
-This is what Paperless-ngx looks like.
-
-The dashboard shows customizable views on your document and allows document uploads:
-
-.. image:: _static/screenshots/dashboard.png
-    :target: _static/screenshots/dashboard.png
-
-The document list provides three different styles to scroll through your documents:
-
-.. image:: _static/screenshots/documents-table.png
-    :target: _static/screenshots/documents-table.png
-.. image:: _static/screenshots/documents-smallcards.png
-    :target: _static/screenshots/documents-smallcards.png
-.. image:: _static/screenshots/documents-largecards.png
-    :target: _static/screenshots/documents-largecards.png
-
-Paperless-ngx also supports "dark mode":
-
-.. image:: _static/screenshots/documents-smallcards-dark.png
-    :target: _static/screenshots/documents-smallcards-dark.png
-
-Extensive filtering mechanisms:
-
-.. image:: _static/screenshots/documents-filter.png
-    :target: _static/screenshots/documents-filter.png
-
-Bulk editing of document tags, correspondents, etc.:
-
-.. image:: _static/screenshots/bulk-edit.png
-    :target: _static/screenshots/bulk-edit.png
-
-Side-by-side editing of documents:
-
-.. image:: _static/screenshots/editing.png
-    :target: _static/screenshots/editing.png
-
-Tag editing. This looks about the same for correspondents and document types.
-
-.. image:: _static/screenshots/new-tag.png
-    :target: _static/screenshots/new-tag.png
-
-Searching provides auto complete and highlights the results.
-
-.. image:: _static/screenshots/search-preview.png
-    :target: _static/screenshots/search-preview.png
-.. image:: _static/screenshots/search-results.png
-    :target: _static/screenshots/search-results.png
-
-Fancy mail filters!
-
-.. image:: _static/screenshots/mail-rules-edited.png
-    :target: _static/screenshots/mail-rules-edited.png
-
-Mobile devices are supported.
-
-.. image:: _static/screenshots/mobile.png
-    :target: _static/screenshots/mobile.png
diff --git a/docs/setup.md b/docs/setup.md
new file mode 100644 (file)
index 0000000..5ba453a
--- /dev/null
@@ -0,0 +1,856 @@
+## Installation
+
+You can go multiple routes to setup and run Paperless:
+
+- [Use the easy install docker script](/setup#docker_script)
+- [Pull the image from Docker Hub](/setup#docker_hub)
+- [Build the Docker image yourself](/setup#docker_build)
+- [Install Paperless directly on your system manually (bare metal)](/setup#bare_metal)
+
+The Docker routes are quick & easy. These are the recommended routes.
+This configures all the stuff from the above automatically so that it
+just works and uses sensible defaults for all configuration options.
+Here you find a cheat-sheet for docker beginners: [CLI
+Basics](https://www.sehn.tech/refs/devops-with-docker/)
+
+The bare metal route is complicated to setup but makes it easier should
+you want to contribute some code back. You need to configure and run the
+above mentioned components yourself.
+
+### Docker using the Installation Script {#docker_script}
+
+Paperless provides an interactive installation script. This script will
+ask you for a couple configuration options, download and create the
+necessary configuration files, pull the docker image, start paperless
+and create your user account. This script essentially performs all the
+steps described in [Docker setup](#docker_hub) automatically.
+
+1.  Make sure that docker and docker-compose are installed.
+
+2.  Download and run the installation script:
+
+    ```shell-session
+    $ bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
+    ```
+
+### From GHCR / Docker Hub {#docker_hub}
+
+1.  Login with your user and create a folder in your home-directory to have a place for your
+    configuration files and consumption directory.
+
+    ```shell-session
+    $ mkdir -v ~/paperless-ngx
+    ```
+
+2.  Go to the [/docker/compose directory on the project
+    page](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+    and download one of the `docker-compose.*.yml` files,
+    depending on which database backend you want to use. Rename this
+    file to `docker-compose.*.yml`. If you want to enable
+    optional support for Office documents, download a file with
+    `-tika` in the file name. Download the
+    `docker-compose.env` file and the `.env` file as well and store them
+    in the same directory.
+
+    !!! tip
+
+        For new installations, it is recommended to use PostgreSQL as the
+        database backend.
+
+3.  Install [Docker](https://www.docker.com/) and
+    [docker-compose](https://docs.docker.com/compose/install/).
+
+    !!! warning
+
+        If you want to use the included `docker-compose.*.yml` file, you
+        need to have at least Docker version **17.09.0** and docker-compose
+        version **1.17.0**. To check do: `docker-compose -v` or
+        `docker -v`
+
+        See the [Docker installation guide](https://docs.docker.com/engine/install/) on how to install the current
+        version of Docker for your operating system or Linux distribution of
+        choice. To get the latest version of docker-compose, follow the
+        [docker-compose installation guide](https://docs.docker.com/compose/install/linux/) if your package repository
+        doesn't include it.
+
+4.  Modify `docker-compose.yml` to your preferences. You may want to
+    change the path to the consumption directory. Find the line that
+    specifies where to mount the consumption directory:
+
+    ```yaml
+    - ./consume:/usr/src/paperless/consume
+    ```
+
+    Replace the part BEFORE the colon with a local directory of your
+    choice:
+
+    ```yaml
+    - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume
+    ```
+
+    Don't change the part after the colon or paperless wont find your
+    documents.
+
+    You may also need to change the default port that the webserver will
+    use from the default (8000):
+
+    ```yaml
+    ports:
+      - 8000:8000
+    ```
+
+    Replace the part BEFORE the colon with a port of your choice:
+
+    ```yaml
+    ports:
+      - 8010:8000
+    ```
+
+    Don't change the part after the colon or edit other lines that
+    refer to port 8000. Modifying the part before the colon will map
+    requests on another port to the webserver running on the default
+    port.
+
+    **Rootless**
+
+    If you want to run Paperless as a rootless container, you will need
+    to do the following in your `docker-compose.yml`:
+
+    - set the `user` running the container to map to the `paperless`
+      user in the container. This value (`user_id` below), should be
+      the same id that `USERMAP_UID` and `USERMAP_GID` are set to in
+      the next step. See `USERMAP_UID` and `USERMAP_GID`
+      [here](/configuration#docker).
+
+    Your entry for Paperless should contain something like:
+
+    > ```
+    > webserver:
+    >   image: ghcr.io/paperless-ngx/paperless-ngx:latest
+    >   user: <user_id>
+    > ```
+
+5.  Modify `docker-compose.env`, following the comments in the file. The
+    most important change is to set `USERMAP_UID` and `USERMAP_GID` to
+    the uid and gid of your user on the host system. Use `id -u` and
+    `id -g` to get these.
+
+    This ensures that both the docker container and you on the host
+    machine have write access to the consumption directory. If your UID
+    and GID on the host system is 1000 (the default for the first normal
+    user on most systems), it will work out of the box without any
+    modifications. `id "username"` to check.
+
+    !!! note
+
+        You can copy any setting from the file `paperless.conf.example` and
+        paste it here. Have a look at [configuration](/configuration] to see what's available.
+
+    !!! note
+
+        You can utilize Docker secrets for some configuration settings by
+        appending `_FILE` to some configuration values. This is
+        supported currently only by:
+
+        - PAPERLESS_DBUSER
+        - PAPERLESS_DBPASS
+        - PAPERLESS_SECRET_KEY
+        - PAPERLESS_AUTO_LOGIN_USERNAME
+        - PAPERLESS_ADMIN_USER
+        - PAPERLESS_ADMIN_MAIL
+        - PAPERLESS_ADMIN_PASSWORD
+
+    !!! warning
+
+        Some file systems such as NFS network shares don't support file
+        system notifications with `inotify`. When storing the consumption
+        directory on such a file system, paperless will not pick up new
+        files with the default configuration. You will need to use
+        `PAPERLESS_CONSUMER_POLLING`, which will disable inotify. See
+        [here](/configuration#polling).
+
+6.  Run `docker-compose pull`, followed by `docker-compose up -d`. This
+    will pull the image, create and start the necessary containers.
+
+7.  To be able to login, you will need a super user. To create it,
+    execute the following command:
+
+    ```shell-session
+    $ docker-compose run --rm webserver createsuperuser
+    ```
+
+    This will prompt you to set a username, an optional e-mail address
+    and finally a password (at least 8 characters).
+
+8.  The default `docker-compose.yml` exports the webserver on your local
+    port
+
+    8000\. If you did not change this, you should now be able to visit
+    your Paperless instance at `http://127.0.0.1:8000` or your servers
+    IP-Address:8000. Use the login credentials you have created with the
+    previous step.
+
+### Build the Docker image yourself {#docker_build}
+
+1.  Clone the entire repository of paperless:
+
+    ```shell-session
+    git clone https://github.com/paperless-ngx/paperless-ngx
+    ```
+
+    The master branch always reflects the latest stable version.
+
+2.  Copy one of the `docker/compose/docker-compose.*.yml` to
+    `docker-compose.yml` in the root folder, depending on which database
+    backend you want to use. Copy `docker-compose.env` into the project
+    root as well.
+
+3.  In the `docker-compose.yml` file, find the line that instructs
+    docker-compose to pull the paperless image from Docker Hub:
+
+    ```yaml
+    webserver:
+      image: ghcr.io/paperless-ngx/paperless-ngx:latest
+    ```
+
+    and replace it with a line that instructs docker-compose to build
+    the image from the current working directory instead:
+
+    ```yaml
+    webserver:
+      build:
+        context: .
+        args:
+          QPDF_VERSION: x.y.x
+          PIKEPDF_VERSION: x.y.z
+          PSYCOPG2_VERSION: x.y.z
+          JBIG2ENC_VERSION: 0.29
+    ```
+
+    !!! note
+
+        You should match the build argument versions to the version for the
+        release you have checked out. These are pre-built images with
+        certain, more updated software. If you want to build these images
+        your self, that is possible, but beyond the scope of these steps.
+
+4.  Follow steps 3 to 8 of [Docker Setup](setup#docker_hub)
+    role="ref"}. When asked to run `docker-compose pull` to pull the
+    image, do
+
+    ```shell-session
+    $ docker-compose build
+    ```
+
+    instead to build the image.
+
+### Bare Metal Route {#bare_metal}
+
+Paperless runs on linux only. The following procedure has been tested on
+a minimal installation of Debian/Buster, which is the current stable
+release at the time of writing. Windows is not and will never be
+supported.
+
+1.  Install dependencies. Paperless requires the following packages.
+
+    - `python3` 3.8, 3.9
+    - `python3-pip`
+    - `python3-dev`
+    - `default-libmysqlclient-dev` for MariaDB
+    - `fonts-liberation` for generating thumbnails for plain text
+      files
+    - `imagemagick` >= 6 for PDF conversion
+    - `gnupg` for handling encrypted documents
+    - `libpq-dev` for PostgreSQL
+    - `libmagic-dev` for mime type detection
+    - `mariadb-client` for MariaDB compile time
+    - `mime-support` for mime type detection
+    - `libzbar0` for barcode detection
+    - `poppler-utils` for barcode detection
+
+    Use this list for your preferred package management:
+
+    ```
+    python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev libmagic-dev mime-support libzbar0 poppler-utils
+    ```
+
+    These dependencies are required for OCRmyPDF, which is used for text
+    recognition.
+
+    - `unpaper`
+    - `ghostscript`
+    - `icc-profiles-free`
+    - `qpdf`
+    - `liblept5`
+    - `libxml2`
+    - `pngquant` (suggested for certain PDF image optimizations)
+    - `zlib1g`
+    - `tesseract-ocr` >= 4.0.0 for OCR
+    - `tesseract-ocr` language packs (`tesseract-ocr-eng`,
+      `tesseract-ocr-deu`, etc)
+
+    Use this list for your preferred package management:
+
+    ```
+    unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr
+    ```
+
+    On Raspberry Pi, these libraries are required as well:
+
+    - `libatlas-base-dev`
+    - `libxslt1-dev`
+
+    You will also need `build-essential`, `python3-setuptools` and
+    `python3-wheel` for installing some of the python dependencies.
+
+2.  Install `redis` >= 6.0 and configure it to start automatically.
+
+3.  Optional. Install `postgresql` and configure a database, user and
+    password for paperless. If you do not wish to use PostgreSQL,
+    MariaDB and SQLite are available as well.
+
+    !!! note
+
+        On bare-metal installations using SQLite, ensure the [JSON1
+        extension](https://code.djangoproject.com/wiki/JSON1Extension) is
+        enabled. This is usually the case, but not always.
+
+4.  Get the release archive from
+    <https://github.com/paperless-ngx/paperless-ngx/releases>. If you
+    clone the git repo as it is, you also have to compile the front end
+    by yourself. Extract the archive to a place from where you wish to
+    execute it, such as `/opt/paperless`.
+
+5.  Configure paperless. See [configuration](configuration) for details.
+    Edit the included `paperless.conf` and adjust the settings to your
+    needs. Required settings for getting
+    paperless running are:
+
+    - `PAPERLESS_REDIS` should point to your redis server, such as
+      <redis://localhost:6379>.
+    - `PAPERLESS_DBENGINE` optional, and should be one of [postgres,
+      mariadb, or sqlite]{.title-ref}
+    - `PAPERLESS_DBHOST` should be the hostname on which your
+      PostgreSQL server is running. Do not configure this to use
+      SQLite instead. Also configure port, database name, user and
+      password as necessary.
+    - `PAPERLESS_CONSUMPTION_DIR` should point to a folder which
+      paperless should watch for documents. You might want to have
+      this somewhere else. Likewise, `PAPERLESS_DATA_DIR` and
+      `PAPERLESS_MEDIA_ROOT` define where paperless stores its data.
+      If you like, you can point both to the same directory.
+    - `PAPERLESS_SECRET_KEY` should be a random sequence of
+      characters. It's used for authentication. Failure to do so
+      allows third parties to forge authentication credentials.
+    - `PAPERLESS_URL` if you are behind a reverse proxy. This should
+      point to your domain. Please see
+      [configuration](configuration) for more
+      information.
+
+    Many more adjustments can be made to paperless, especially the OCR
+    part. The following options are recommended for everyone:
+
+    - Set `PAPERLESS_OCR_LANGUAGE` to the language most of your
+      documents are written in.
+    - Set `PAPERLESS_TIME_ZONE` to your local time zone.
+
+6.  Create a system user under which you wish to run paperless.
+
+    ```shell-session
+    adduser paperless --system --home /opt/paperless --group
+    ```
+
+7.  Ensure that these directories exist and that the paperless user has
+    write permissions to the following directories:
+
+    - `/opt/paperless/media`
+    - `/opt/paperless/data`
+    - `/opt/paperless/consume`
+
+    Adjust as necessary if you configured different folders.
+
+8.  Install python requirements from the `requirements.txt` file. It is
+    up to you if you wish to use a virtual environment or not. First you
+    should update your pip, so it gets the actual packages.
+
+    ```shell-session
+    sudo -Hu paperless pip3 install --upgrade pip
+    ```
+
+    ```shell-session
+    sudo -Hu paperless pip3 install -r requirements.txt
+    ```
+
+    This will install all python dependencies in the home directory of
+    the new paperless user.
+
+9.  Go to `/opt/paperless/src`, and execute the following commands:
+
+    ```bash
+    \# This creates the database schema.
+    sudo -Hu paperless python3 manage.py migrate
+
+    \# This creates your first paperless user
+    sudo -Hu paperless python3 manage.py createsuperuser
+    ```
+
+10. Optional: Test that paperless is working by executing
+
+    ```bash
+    \# This collects static files from paperless and django.
+    sudo -Hu paperless python3 manage.py runserver
+    ```
+
+    and pointing your browser to <http://localhost:8000/>.
+
+    !!! warning
+
+        This is a development server which should not be used in production.
+        It is not audited for security and performance is inferior to
+        production ready web servers.
+
+    !!! tip
+
+        This will not start the consumer. Paperless does this in a separate
+        process.
+
+11. Setup systemd services to run paperless automatically. You may use
+    the service definition files included in the `scripts` folder as a
+    starting point.
+
+    Paperless needs the `webserver` script to run the webserver, the
+    `consumer` script to watch the input folder, `taskqueue` for the
+    background workers used to handle things like document consumption
+    and the `scheduler` script to run tasks such as email checking at
+    certain times .
+
+    !!! note
+
+        The `socket` script enables `gunicorn` to run on port 80 without
+        root privileges. For this you need to uncomment the
+        `Require=paperless-webserver.socket` in the `webserver` script
+        and configure `gunicorn` to listen on port 80 (see
+        `paperless/gunicorn.conf.py`).
+
+    You may need to adjust the path to the `gunicorn` executable. This
+    will be installed as part of the python dependencies, and is either
+    located in the `bin` folder of your virtual environment, or in
+    `~/.local/bin/` if no virtual environment is used.
+
+    These services rely on redis and optionally the database server, but
+    don't need to be started in any particular order. The example files
+    depend on redis being started. If you use a database server, you
+    should add additional dependencies.
+
+    !!! warning
+
+        The included scripts run a `gunicorn` standalone server, which is
+        fine for running paperless. It does support SSL, however, the
+        documentation of GUnicorn states that you should use a proxy server
+        in front of gunicorn instead.
+
+        For instructions on how to use nginx for that,
+        [see the instructions below](/setup#nginx).
+
+12. Optional: Install a samba server and make the consumption folder
+    available as a network share.
+
+13. Configure ImageMagick to allow processing of PDF documents. Most
+    distributions have this disabled by default, since PDF documents can
+    contain malware. If you don't do this, paperless will fall back to
+    ghostscript for certain steps such as thumbnail generation.
+
+    Edit `/etc/ImageMagick-6/policy.xml` and adjust
+
+    ```
+    <policy domain="coder" rights="none" pattern="PDF" />
+    ```
+
+    to
+
+    ```
+    <policy domain="coder" rights="read|write" pattern="PDF" />
+    ```
+
+14. Optional: Install the
+    [jbig2enc](https://ocrmypdf.readthedocs.io/en/latest/jbig2.html)
+    encoder. This will reduce the size of generated PDF documents.
+    You'll most likely need to compile this by yourself, because this
+    software has been patented until around 2017 and binary packages are
+    not available for most distributions.
+
+15. Optional: If using the NLTK machine learning processing (see
+    `PAPERLESS_ENABLE_NLTK` in [configuration](configuration#software_tweaks) for details),
+    download the NLTK data for the Snowball
+    Stemmer, Stopwords and Punkt tokenizer to your
+    `PAPERLESS_DATA_DIR/nltk`. Refer to the [NLTK
+    instructions](https://www.nltk.org/data.html) for details on how to
+    download the data.
+
+# Migrating to Paperless-ngx
+
+Migration is possible both from Paperless-ng or directly from the
+'original' Paperless.
+
+## Migrating from Paperless-ng
+
+Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and
+thus upgrading should be trivial for most users, especially when using
+docker. However, as with any major change, it is recommended to take a
+full backup first. Once you are ready, simply change the docker image to
+point to the new source. E.g. if using Docker Compose, edit
+`docker-compose.yml` and change:
+
+```
+image: jonaswinkler/paperless-ng:latest
+```
+
+to
+
+```
+image: ghcr.io/paperless-ngx/paperless-ngx:latest
+```
+
+and then run `docker-compose up -d` which will pull the new image
+recreate the container. That's it!
+
+Users who installed with the bare-metal route should also update their
+Git clone to point to `https://github.com/paperless-ngx/paperless-ngx`,
+e.g. using the command
+`git remote set-url origin https://github.com/paperless-ngx/paperless-ngx`
+and then pull the lastest version.
+
+## Migrating from Paperless
+
+At its core, paperless-ngx is still paperless and fully compatible.
+However, some things have changed under the hood, so you need to adapt
+your setup depending on how you installed paperless.
+
+This setup describes how to update an existing paperless Docker
+installation. The important things to keep in mind are as follows:
+
+- Read the [changelog](/changelog) and
+  take note of breaking changes.
+- You should decide if you want to stick with SQLite or want to
+  migrate your database to PostgreSQL. See [documentation](#sqlite_to_psql)
+  for details on
+  how to move your data from SQLite to PostgreSQL. Both work fine with
+  paperless. However, if you already have a database server running
+  for other services, you might as well use it for paperless as well.
+- The task scheduler of paperless, which is used to execute periodic
+  tasks such as email checking and maintenance, requires a
+  [redis](https://redis.io/) message broker instance. The
+  docker-compose route takes care of that.
+- The layout of the folder structure for your documents and data
+  remains the same, so you can just plug your old docker volumes into
+  paperless-ngx and expect it to find everything where it should be.
+
+Migration to paperless-ngx is then performed in a few simple steps:
+
+1.  Stop paperless.
+
+    ```bash
+    $ cd /path/to/current/paperless
+    $ docker-compose down
+    ```
+
+2.  Do a backup for two purposes: If something goes wrong, you still
+    have your data. Second, if you don't like paperless-ngx, you can
+    switch back to paperless.
+
+3.  Download the latest release of paperless-ngx. You can either go with
+    the docker-compose files from
+    [here](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+    or clone the repository to build the image yourself (see
+    [above](/setup#docker_build)). You can
+    either replace your current paperless folder or put paperless-ngx in
+    a different location.
+
+    !!! warning
+
+        Paperless-ngx includes a `.env` file. This will set the project name
+        for docker compose to `paperless`, which will also define the name
+        of the volumes by paperless-ngx. However, if you experience that
+        paperless-ngx is not using your old paperless volumes, verify the
+        names of your volumes with
+
+        ``` shell-session
+        $ docker volume ls | grep _data
+        ```
+
+        and adjust the project name in the `.env` file so that it matches
+        the name of the volumes before the `_data` part.
+
+4.  Download the `docker-compose.sqlite.yml` file to
+    `docker-compose.yml`. If you want to switch to PostgreSQL, do that
+    after you migrated your existing SQLite database.
+
+5.  Adjust `docker-compose.yml` and `docker-compose.env` to your needs.
+    See [Docker setup](setup#docker_hub) details on
+    which edits are advised.
+
+6.  [Update paperless.](/administration#updating)
+
+7.  In order to find your existing documents with the new search
+    feature, you need to invoke a one-time operation that will create
+    the search index:
+
+    ```shell-session
+    $ docker-compose run --rm webserver document_index reindex
+    ```
+
+    This will migrate your database and create the search index. After
+    that, paperless will take care of maintaining the index by itself.
+
+8.  Start paperless-ngx.
+
+    ```bash
+    $ docker-compose up -d
+    ```
+
+    This will run paperless in the background and automatically start it
+    on system boot.
+
+9.  Paperless installed a permanent redirect to `admin/` in your
+    browser. This redirect is still in place and prevents access to the
+    new UI. Clear your browsing cache in order to fix this.
+
+10. Optionally, follow the instructions below to migrate your existing
+    data to PostgreSQL.
+
+## Migrating from LinuxServer.io Docker Image
+
+As with any upgrades and large changes, it is highly recommended to
+create a backup before starting. This assumes the image was running
+using Docker Compose, but the instructions are translatable to Docker
+commands as well.
+
+1.  Stop and remove the paperless container
+2.  If using an external database, stop the container
+3.  Update Redis configuration
+    a) If `REDIS_URL` is already set, change it to `PAPERLESS_REDIS`
+    and continue to step 4.
+    b) Otherwise, in the `docker-compose.yml` add a new service for
+    Redis, following [the example compose
+    files](https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose)
+    c) Set the environment variable `PAPERLESS_REDIS` so it points to
+    the new Redis container
+4.  Update user mapping
+    a) If set, change the environment variable `PUID` to `USERMAP_UID`
+    b) If set, change the environment variable `PGID` to `USERMAP_GID`
+5.  Update configuration paths
+    a) Set the environment variable `PAPERLESS_DATA_DIR` to `/config`
+6.  Update media paths
+    a) Set the environment variable `PAPERLESS_MEDIA_ROOT` to
+    `/data/media`
+7.  Update timezone
+    a) Set the environment variable `PAPERLESS_TIME_ZONE` to the same
+    value as `TZ`
+8.  Modify the `image:` to point to
+    `ghcr.io/paperless-ngx/paperless-ngx:latest` or a specific version
+    if preferred.
+9.  Start the containers as before, using `docker-compose`.
+
+## Moving data from SQLite to PostgreSQL or MySQL/MariaDB {#sqlite_to_psql}
+
+Moving your data from SQLite to PostgreSQL or MySQL/MariaDB is done via
+executing a series of django management commands as below. The commands
+below use PostgreSQL, but are applicable to MySQL/MariaDB with the
+
+!!! warning
+
+    Make sure that your SQLite database is migrated to the latest version.
+    Starting paperless will make sure that this is the case. If your try to
+    load data from an old database schema in SQLite into a newer database
+    schema in PostgreSQL, you will run into trouble.
+
+!!! warning
+
+    On some database fields, PostgreSQL enforces predefined limits on
+    maximum length, whereas SQLite does not. The fields in question are the
+    title of documents (128 characters), names of document types, tags and
+    correspondents (128 characters), and filenames (1024 characters). If you
+    have data in these fields that surpasses these limits, migration to
+    PostgreSQL is not possible and will fail with an error.
+
+!!! warning
+
+    MySQL is case insensitive by default, treating values like "Name" and
+    "NAME" as identical. See [MySQL caveats](advanced##mysql-caveats) for details.
+
+!!! warning
+
+    MySQL also enforces limits on maximum lengths, but does so differently than
+    PostgreSQL.  It may not be possible to migrate to MySQL due to this.
+
+1.  Stop paperless, if it is running.
+
+2.  Tell paperless to use PostgreSQL:
+
+    a) With docker, copy the provided `docker-compose.postgres.yml`
+    file to `docker-compose.yml`. Remember to adjust the consumption
+    directory, if necessary.
+    b) Without docker, configure the database in your `paperless.conf`
+    file. See [configuration](configuration) for
+    details.
+
+3.  Open a shell and initialize the database:
+
+    a) With docker, run the following command to open a shell within
+    the paperless container:
+
+        ``` shell-session
+        $ cd /path/to/paperless
+        $ docker-compose run --rm webserver /bin/bash
+        ```
+
+        This will launch the container and initialize the PostgreSQL
+        database.
+
+    b) Without docker, remember to activate any virtual environment,
+    switch to the `src` directory and create the database schema:
+
+        ``` shell-session
+        $ cd /path/to/paperless/src
+        $ python3 manage.py migrate
+        ```
+
+        This will not copy any data yet.
+
+4.  Dump your data from SQLite:
+
+    ```shell-session
+    $ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
+    ```
+
+5.  Load your data into PostgreSQL:
+
+    ```shell-session
+    $ python3 manage.py loaddata data.json
+    ```
+
+6.  If operating inside Docker, you may exit the shell now.
+
+    ```shell-session
+    $ exit
+    ```
+
+7.  Start paperless.
+
+## Moving back to Paperless
+
+Lets say you migrated to Paperless-ngx and used it for a while, but
+decided that you don't like it and want to move back (If you do, send
+me a mail about what part you didn't like!), you can totally do that
+with a few simple steps.
+
+Paperless-ngx modified the database schema slightly, however, these
+changes can be reverted while keeping your current data, so that your
+current data will be compatible with original Paperless.
+
+Execute this:
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose run --rm webserver migrate documents 0023
+```
+
+Or without docker:
+
+```shell-session
+$ cd /path/to/paperless/src
+$ python3 manage.py migrate documents 0023
+```
+
+After that, you need to clear your cookies (Paperless-ngx comes with
+updated dependencies that do cookie-processing differently) and probably
+your cache as well.
+
+# Considerations for less powerful devices {#less_powerful_devices}
+
+Paperless runs on Raspberry Pi. However, some things are rather slow on
+the Pi and configuring some options in paperless can help improve
+performance immensely:
+
+- Stick with SQLite to save some resources.
+- Consider setting `PAPERLESS_OCR_PAGES` to 1, so that paperless will
+  only OCR the first page of your documents. In most cases, this page
+  contains enough information to be able to find it.
+- `PAPERLESS_TASK_WORKERS` and `PAPERLESS_THREADS_PER_WORKER` are
+  configured to use all cores. The Raspberry Pi models 3 and up have 4
+  cores, meaning that paperless will use 2 workers and 2 threads per
+  worker. This may result in sluggish response times during
+  consumption, so you might want to lower these settings (example: 2
+  workers and 1 thread to always have some computing power left for
+  other tasks).
+- Keep `PAPERLESS_OCR_MODE` at its default value `skip` and consider
+  OCR'ing your documents before feeding them into paperless. Some
+  scanners are able to do this! You might want to even specify
+  `skip_noarchive` to skip archive file generation for already ocr'ed
+  documents entirely.
+- If you want to perform OCR on the device, consider using
+  `PAPERLESS_OCR_CLEAN=none`. This will speed up OCR times and use
+  less memory at the expense of slightly worse OCR results.
+- If using docker, consider setting `PAPERLESS_WEBSERVER_WORKERS` to
+  1.  This will save some memory.
+- Consider setting `PAPERLESS_ENABLE_NLTK` to false, to disable the
+  more advanced language processing, which can take more memory and
+  processing time.
+
+For details, refer to [configuration](configuration).
+
+!!! note
+
+    Updating the
+    [automatic matching algorithm](/advanced_usage#automatic_matching) takes quite a bit of time. However, the update mechanism
+    checks if your data has changed before doing the heavy lifting. If you
+    experience the algorithm taking too much cpu time, consider changing the
+    schedule in the admin interface to daily. You can also manually invoke
+    the task by changing the date and time of the next run to today/now.
+
+    The actual matching of the algorithm is fast and works on Raspberry Pi
+    as well as on any other device.
+
+# Using nginx as a reverse proxy {#nginx}
+
+If you want to expose paperless to the internet, you should hide it
+behind a reverse proxy with SSL enabled.
+
+In addition to the usual configuration for SSL, the following
+configuration is required for paperless to operate:
+
+```nginx
+http {
+
+    # Adjust as required. This is the maximum size for file uploads.
+    # The default value 1M might be a little too small.
+    client_max_body_size 10M;
+
+    server {
+
+        location / {
+
+            # Adjust host and port as required.
+            proxy_pass http://localhost:8000/;
+
+            # These configuration options are required for WebSockets to work.
+            proxy_http_version 1.1;
+            proxy_set_header Upgrade $http_upgrade;
+            proxy_set_header Connection "upgrade";
+
+            proxy_redirect off;
+            proxy_set_header Host $host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header X-Forwarded-Host $server_name;
+        }
+    }
+}
+```
+
+The `PAPERLESS_URL` configuration variable is also required when using a
+reverse proxy. Please refer to the [hosting and security](configuration#hosting-and-security) docs.
+
+Also read
+[this](https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu),
+towards the end of the section.
diff --git a/docs/setup.rst b/docs/setup.rst
deleted file mode 100644 (file)
index 15f16d1..0000000
+++ /dev/null
@@ -1,846 +0,0 @@
-
-*****
-Setup
-*****
-
-Overview of Paperless-ngx
-#########################
-
-Compared to paperless, paperless-ngx works a little different under the hood and has
-more moving parts that work together. While this increases the complexity of
-the system, it also brings many benefits.
-
-Paperless consists of the following components:
-
-*   **The webserver:** This is pretty much the same as in paperless. It serves
-    the administration pages, the API, and the new frontend. This is the main
-    tool you'll be using to interact with paperless. You may start the webserver
-    with
-
-    .. code:: shell-session
-
-        $ cd /path/to/paperless/src/
-        $ gunicorn -c ../gunicorn.conf.py paperless.wsgi
-
-    or by any other means such as Apache ``mod_wsgi``.
-
-*   **The consumer:** This is what watches your consumption folder for documents.
-    However, the consumer itself does not really consume your documents.
-    Now it notifies a task processor that a new file is ready for consumption.
-    I suppose it should be named differently.
-    This was also used to check your emails, but that's now done elsewhere as well.
-
-    Start the consumer with the management command ``document_consumer``:
-
-    .. code:: shell-session
-
-        $ cd /path/to/paperless/src/
-        $ python3 manage.py document_consumer
-
-    .. _setup-task_processor:
-
-*   **The task processor:** Paperless relies on `Celery - Distributed Task Queue <https://docs.celeryq.dev/en/stable/index.html>`_
-    for doing most of the heavy lifting. This is a task queue that accepts tasks from
-    multiple sources and processes these in parallel. It also comes with a scheduler that executes
-    certain commands periodically.
-
-    This task processor is responsible for:
-
-    *   Consuming documents. When the consumer finds new documents, it notifies the task processor to
-        start a consumption task.
-    *   The task processor also performs the consumption of any documents you upload through
-        the web interface.
-    *   Consuming emails. It periodically checks your configured accounts for new emails and
-        notifies the task processor to consume the attachment of an email.
-    *   Maintaining the search index and the automatic matching algorithm. These are things that paperless
-        needs to do from time to time in order to operate properly.
-
-    This allows paperless to process multiple documents from your consumption folder in parallel! On
-    a modern multi core system, this makes the consumption process with full OCR blazingly fast.
-
-    The task processor comes with a built-in admin interface that you can use to check whenever any of the
-    tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific
-    file, etc).
-
-*   A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible
-    for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different
-    process (maybe even on different machines!), and therefore, this is necessary.
-
-*   Optional: A database server. Paperless supports PostgreSQL, MariaDB and SQLite for storing its data.
-
-
-Installation
-############
-
-You can go multiple routes to setup and run Paperless:
-
-* :ref:`Use the easy install docker script <setup-docker_script>`
-* :ref:`Pull the image from Docker Hub <setup-docker_hub>`
-* :ref:`Build the Docker image yourself <setup-docker_build>`
-* :ref:`Install Paperless directly on your system manually (bare metal) <setup-bare_metal>`
-
-The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff
-from the above automatically so that it just works and uses sensible defaults for all configuration options.
-Here you find a cheat-sheet for docker beginners: `CLI Basics <https://www.sehn.tech/refs/devops-with-docker/>`_
-
-The bare metal route is complicated to setup but makes it easier
-should you want to contribute some code back. You need to configure and
-run the above mentioned components yourself.
-
-.. _CLI Basics: https://www.sehn.tech/refs/devops-with-docker/
-
-.. _setup-docker_script:
-
-Install Paperless from Docker Hub using the installation script
-===============================================================
-
-Paperless provides an interactive installation script. This script will ask you
-for a couple configuration options, download and create the necessary configuration files, pull the docker image, start paperless and create your user account. This script essentially
-performs all the steps described in :ref:`setup-docker_hub` automatically.
-
-1.  Make sure that docker and docker-compose are installed.
-2.  Download and run the installation script:
-
-    .. code:: shell-session
-
-        $ bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
-
-.. _setup-docker_hub:
-
-Install Paperless from Docker Hub
-=================================
-
-1.  Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ngx` to have a place for your configuration files and consumption directory.
-
-2.  Go to the `/docker/compose directory on the project page <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
-    and download one of the `docker-compose.*.yml` files, depending on which database backend you
-    want to use. Rename this file to `docker-compose.yml`.
-    If you want to enable optional support for Office documents, download a file with `-tika` in the file name.
-    Download the ``docker-compose.env`` file and the ``.env`` file as well and store them
-    in the same directory.
-
-    .. hint::
-
-        For new installations, it is recommended to use PostgreSQL as the database
-        backend.
-
-3.  Install `Docker`_ and `docker-compose`_.
-
-    .. caution::
-
-        If you want to use the included ``docker-compose.*.yml`` file, you
-        need to have at least Docker version **17.09.0** and docker-compose
-        version **1.17.0**.
-        To check do: `docker-compose -v` or `docker -v`
-
-        See the `Docker installation guide`_ on how to install the current
-        version of Docker for your operating system or Linux distribution of
-        choice. To get the latest version of docker-compose, follow the
-        `docker-compose installation guide`_ if your package repository doesn't
-        include it.
-
-        .. _Docker installation guide: https://docs.docker.com/engine/installation/
-        .. _docker-compose installation guide: https://docs.docker.com/compose/install/
-
-4.  Modify ``docker-compose.yml`` to your preferences. You may want to change the path
-    to the consumption directory. Find the line that specifies where
-    to mount the consumption directory:
-
-    .. code::
-
-        - ./consume:/usr/src/paperless/consume
-
-    Replace the part BEFORE the colon with a local directory of your choice:
-
-    .. code::
-
-        - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume
-
-    Don't change the part after the colon or paperless wont find your documents.
-
-    You may also need to change the default port that the webserver will use
-    from the default (8000):
-
-     .. code::
-
-        ports:
-          - 8000:8000
-
-    Replace the part BEFORE the colon with a port of your choice:
-
-     .. code::
-
-        ports:
-          - 8010:8000
-
-    Don't change the part after the colon or edit other lines that refer to
-    port 8000. Modifying the part before the colon will map requests on another
-    port to the webserver running on the default port.
-
-    **Rootless**
-
-    If you want to run Paperless as a rootless container, you will need to do the
-    following in your ``docker-compose.yml``:
-
-    - set the ``user`` running the container to map to the ``paperless`` user in the
-      container.
-      This value (``user_id`` below), should be the same id that ``USERMAP_UID`` and
-      ``USERMAP_GID`` are set to in the next step.
-      See ``USERMAP_UID`` and ``USERMAP_GID`` :ref:`here <configuration-docker>`.
-
-    Your entry for Paperless should contain something like:
-
-     .. code::
-
-        webserver:
-          image: ghcr.io/paperless-ngx/paperless-ngx:latest
-          user: <user_id>
-
-5.  Modify ``docker-compose.env``, following the comments in the file. The
-    most important change is to set ``USERMAP_UID`` and ``USERMAP_GID``
-    to the uid and gid of your user on the host system. Use ``id -u`` and
-    ``id -g`` to get these.
-
-    This ensures that
-    both the docker container and you on the host machine have write access
-    to the consumption directory. If your UID and GID on the host system is
-    1000 (the default for the first normal user on most systems), it will
-    work out of the box without any modifications. `id "username"` to check.
-
-    .. note::
-
-        You can copy any setting from the file ``paperless.conf.example`` and paste it here.
-        Have a look at :ref:`configuration` to see what's available.
-
-    .. note::
-
-        You can utilize Docker secrets for some configuration settings by
-        appending `_FILE` to some configuration values.  This is supported currently
-        only by:
-
-          * PAPERLESS_DBUSER
-          * PAPERLESS_DBPASS
-          * PAPERLESS_SECRET_KEY
-          * PAPERLESS_AUTO_LOGIN_USERNAME
-          * PAPERLESS_ADMIN_USER
-          * PAPERLESS_ADMIN_MAIL
-          * PAPERLESS_ADMIN_PASSWORD
-
-    .. caution::
-
-        Some file systems such as NFS network shares don't support file system
-        notifications with ``inotify``. When storing the consumption directory
-        on such a file system, paperless will not pick up new files
-        with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``,
-        which will disable inotify. See :ref:`here <configuration-polling>`.
-
-6.  Run ``docker-compose pull``, followed by ``docker-compose up -d``.
-    This will pull the image, create and start the necessary containers.
-
-7.  To be able to login, you will need a super user. To create it, execute the
-    following command:
-
-    .. code-block:: shell-session
-
-        $ docker-compose run --rm webserver createsuperuser
-
-    This will prompt you to set a username, an optional e-mail address and
-    finally a password (at least 8 characters).
-
-8.  The default ``docker-compose.yml`` exports the webserver on your local port
-    8000. If you did not change this, you should now be able to visit your
-    Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000.
-    Use the login credentials you have created with the previous step.
-
-.. _Docker: https://www.docker.com/
-.. _docker-compose: https://docs.docker.com/compose/install/
-
-.. _setup-docker_build:
-
-Build the Docker image yourself
-===============================
-
-1.  Clone the entire repository of paperless:
-
-    .. code:: shell-session
-
-        git clone https://github.com/paperless-ngx/paperless-ngx
-
-    The master branch always reflects the latest stable version.
-
-2.  Copy one of the ``docker/compose/docker-compose.*.yml`` to ``docker-compose.yml`` in the root folder,
-    depending on which database backend you want to use. Copy
-    ``docker-compose.env`` into the project root as well.
-
-3.  In the ``docker-compose.yml`` file, find the line that instructs docker-compose to pull the paperless image from Docker Hub:
-
-    .. code:: yaml
-
-        webserver:
-            image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
-    and replace it with a line that instructs docker-compose to build the image from the current working directory instead:
-
-    .. code:: yaml
-
-        webserver:
-            build:
-              context: .
-              args:
-                QPDF_VERSION: x.y.x
-                PIKEPDF_VERSION: x.y.z
-                PSYCOPG2_VERSION: x.y.z
-                JBIG2ENC_VERSION: 0.29
-
-    .. note::
-
-        You should match the build argument versions to the version for the release you have
-        checked out.  These are pre-built images with certain, more updated software.
-        If you want to build these images your self, that is possible, but beyond
-        the scope of these steps.
-
-4.  Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
-    ``docker-compose pull`` to pull the image, do
-
-    .. code:: shell-session
-
-        $ docker-compose build
-
-    instead to build the image.
-
-.. _setup-bare_metal:
-
-Bare Metal Route
-================
-
-Paperless runs on linux only. The following procedure has been tested on a minimal
-installation of Debian/Buster, which is the current stable release at the time of
-writing. Windows is not and will never be supported.
-
-1.  Install dependencies. Paperless requires the following packages.
-
-    *   ``python3`` 3.8, 3.9
-    *   ``python3-pip``
-    *   ``python3-dev``
-
-    *   ``default-libmysqlclient-dev`` for MariaDB
-    *   ``fonts-liberation`` for generating thumbnails for plain text files
-    *   ``imagemagick`` >= 6 for PDF conversion
-    *   ``gnupg`` for handling encrypted documents
-    *   ``libpq-dev`` for PostgreSQL
-    *   ``libmagic-dev`` for mime type detection
-    *   ``mariadb-client`` for MariaDB compile time
-    *   ``mime-support`` for mime type detection
-    *   ``libzbar0`` for barcode detection
-    *   ``poppler-utils`` for barcode detection
-
-    Use this list for your preferred package management:
-
-    .. code::
-
-        python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev libmagic-dev mime-support libzbar0 poppler-utils
-
-    These dependencies are required for OCRmyPDF, which is used for text recognition.
-
-    *   ``unpaper``
-    *   ``ghostscript``
-    *   ``icc-profiles-free``
-    *   ``qpdf``
-    *   ``liblept5``
-    *   ``libxml2``
-    *   ``pngquant`` (suggested for certain PDF image optimizations)
-    *   ``zlib1g``
-    *   ``tesseract-ocr`` >= 4.0.0 for OCR
-    *   ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc)
-
-    Use this list for your preferred package management:
-
-    .. code::
-
-        unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr
-
-    On Raspberry Pi, these libraries are required as well:
-
-    *   ``libatlas-base-dev``
-    *   ``libxslt1-dev``
-
-    You will also need ``build-essential``, ``python3-setuptools`` and ``python3-wheel``
-    for installing some of the python dependencies.
-
-2.  Install ``redis`` >= 6.0 and configure it to start automatically.
-
-3.  Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish
-    to use PostgreSQL, MariaDB and SQLite are available as well.
-
-    .. note::
-
-        On bare-metal installations using SQLite, ensure the
-        `JSON1 extension <https://code.djangoproject.com/wiki/JSON1Extension>`_ is enabled. This is
-        usually the case, but not always.
-
-4.  Get the release archive from `<https://github.com/paperless-ngx/paperless-ngx/releases>`_.
-    If you clone the git repo as it is, you also have to compile the front end by yourself.
-    Extract the archive to a place from where you wish to execute it, such as ``/opt/paperless``.
-
-5.  Configure paperless. See :ref:`configuration` for details. Edit the included ``paperless.conf`` and adjust the
-    settings to your needs. Required settings for getting paperless running are:
-
-    *   ``PAPERLESS_REDIS`` should point to your redis server, such as redis://localhost:6379.
-    *   ``PAPERLESS_DBENGINE`` optional, and should be one of `postgres, mariadb, or sqlite`
-    *   ``PAPERLESS_DBHOST`` should be the hostname on which your PostgreSQL server is running. Do not configure this
-        to use SQLite instead. Also configure port, database name, user and password as necessary.
-    *   ``PAPERLESS_CONSUMPTION_DIR`` should point to a folder which paperless should watch for documents. You might
-        want to have this somewhere else. Likewise, ``PAPERLESS_DATA_DIR`` and ``PAPERLESS_MEDIA_ROOT`` define where
-        paperless stores its data. If you like, you can point both to the same directory.
-    *   ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure
-        to do so allows third parties to forge authentication credentials.
-    *   ``PAPERLESS_URL`` if you are behind a reverse proxy. This should point to your domain. Please see
-        :ref:`configuration` for more information.
-
-    Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended
-    for everyone:
-
-    *   Set ``PAPERLESS_OCR_LANGUAGE`` to the language most of your documents are written in.
-    *   Set ``PAPERLESS_TIME_ZONE`` to your local time zone.
-
-6.  Create a system user under which you wish to run paperless.
-
-    .. code:: shell-session
-
-        adduser paperless --system --home /opt/paperless --group
-
-7.  Ensure that these directories exist
-    and that the paperless user has write permissions to the following directories:
-
-    *   ``/opt/paperless/media``
-    *   ``/opt/paperless/data``
-    *   ``/opt/paperless/consume``
-
-    Adjust as necessary if you configured different folders.
-
-8.  Install python requirements from the ``requirements.txt`` file.
-    It is up to you if you wish to use a virtual environment or not. First you should update your pip, so it gets the actual packages.
-
-    .. code:: shell-session
-
-        sudo -Hu paperless pip3 install --upgrade pip
-
-    .. code:: shell-session
-
-        sudo -Hu paperless pip3 install -r requirements.txt
-
-    This will install all python dependencies in the home directory of
-    the new paperless user.
-
-9.  Go to ``/opt/paperless/src``, and execute the following commands:
-
-    .. code:: bash
-
-        # This creates the database schema.
-        sudo -Hu paperless python3 manage.py migrate
-
-        # This creates your first paperless user
-        sudo -Hu paperless python3 manage.py createsuperuser
-
-10. Optional: Test that paperless is working by executing
-
-      .. code:: bash
-
-        # This collects static files from paperless and django.
-        sudo -Hu paperless python3 manage.py runserver
-
-    and pointing your browser to http://localhost:8000/.
-
-    .. warning::
-
-        This is a development server which should not be used in
-        production. It is not audited for security and performance
-        is inferior to production ready web servers.
-
-    .. hint::
-
-        This will not start the consumer. Paperless does this in a
-        separate process.
-
-11. Setup systemd services to run paperless automatically. You may
-    use the service definition files included in the ``scripts`` folder
-    as a starting point.
-
-    Paperless needs the ``webserver`` script to run the webserver, the
-    ``consumer`` script to watch the input folder, ``taskqueue`` for the background workers
-    used to handle things like document consumption and the ``scheduler`` script to run tasks such as
-    email checking at certain times .
-
-               The ``socket`` script enables ``gunicorn`` to run on port 80 without
-               root privileges. For this you need to uncomment the ``Require=paperless-webserver.socket``
-               in the ``webserver`` script and configure ``gunicorn`` to listen on port 80 (see ``paperless/gunicorn.conf.py``).
-
-    You may need to adjust the path to the ``gunicorn`` executable. This
-    will be installed as part of the python dependencies, and is either located
-    in the ``bin`` folder of your virtual environment, or in ``~/.local/bin/`` if
-    no virtual environment is used.
-
-    These services rely on redis and optionally the database server, but
-    don't need to be started in any particular order. The example files
-    depend on redis being started. If you use a database server, you should
-    add additional dependencies.
-
-    .. caution::
-
-        The included scripts run a ``gunicorn`` standalone server,
-        which is fine for running paperless. It does support SSL,
-        however, the documentation of GUnicorn states that you should
-        use a proxy server in front of gunicorn instead.
-
-        For instructions on how to use nginx for that,
-        :ref:`see the instructions below <setup-nginx>`.
-
-12. Optional: Install a samba server and make the consumption folder
-    available as a network share.
-
-13. Configure ImageMagick to allow processing of PDF documents. Most distributions have
-    this disabled by default, since PDF documents can contain malware. If
-    you don't do this, paperless will fall back to ghostscript for certain steps
-    such as thumbnail generation.
-
-    Edit ``/etc/ImageMagick-6/policy.xml`` and adjust
-
-    .. code::
-
-        <policy domain="coder" rights="none" pattern="PDF" />
-
-    to
-
-    .. code::
-
-        <policy domain="coder" rights="read|write" pattern="PDF" />
-
-14. Optional: Install the `jbig2enc <https://ocrmypdf.readthedocs.io/en/latest/jbig2.html>`_
-    encoder. This will reduce the size of generated PDF documents. You'll most likely need
-    to compile this by yourself, because this software has been patented until around 2017 and
-    binary packages are not available for most distributions.
-
-15. Optional: If using the NLTK machine learning processing (see ``PAPERLESS_ENABLE_NLTK`` in
-    :ref:`configuration` for details), download the NLTK data for the Snowball Stemmer, Stopwords
-    and Punkt tokenizer to your ``PAPERLESS_DATA_DIR/nltk``.  Refer to
-    the `NLTK instructions <https://www.nltk.org/data.html>`_ for details on how to
-    download the data.
-
-
-Migrating to Paperless-ngx
-##########################
-
-Migration is possible both from Paperless-ng or directly from the 'original' Paperless.
-
-Migrating from Paperless-ng
-===========================
-
-Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and thus upgrading should be
-trivial for most users, especially when using docker. However, as with any major change, it is
-recommended to take a full backup first. Once you are ready, simply change the docker image to
-point to the new source. E.g. if using Docker Compose, edit ``docker-compose.yml`` and change:
-
-.. code::
-
-  image: jonaswinkler/paperless-ng:latest
-
-to
-
-.. code::
-
-  image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
-and then run ``docker-compose up -d`` which will pull the new image recreate the container.
-That's it!
-
-Users who installed with the bare-metal route should also update their Git clone to point to
-``https://github.com/paperless-ngx/paperless-ngx``, e.g. using the command
-``git remote set-url origin https://github.com/paperless-ngx/paperless-ngx`` and then pull the
-lastest version.
-
-Migrating from Paperless
-========================
-
-At its core, paperless-ngx is still paperless and fully compatible. However, some
-things have changed under the hood, so you need to adapt your setup depending on
-how you installed paperless.
-
-This setup describes how to update an existing paperless Docker installation.
-The important things to keep in mind are as follows:
-
-* Read the :doc:`changelog </changelog>` and take note of breaking changes.
-* You should decide if you want to stick with SQLite or want to migrate your database
-  to PostgreSQL. See :ref:`setup-sqlite_to_psql` for details on how to move your data from
-  SQLite to PostgreSQL. Both work fine with paperless. However, if you already have a
-  database server running for other services, you might as well use it for paperless as well.
-* The task scheduler of paperless, which is used to execute periodic tasks
-  such as email checking and maintenance, requires a `redis`_ message broker
-  instance. The docker-compose route takes care of that.
-* The layout of the folder structure for your documents and data remains the
-  same, so you can just plug your old docker volumes into paperless-ngx and
-  expect it to find everything where it should be.
-
-Migration to paperless-ngx is then performed in a few simple steps:
-
-1.  Stop paperless.
-
-    .. code:: bash
-
-        $ cd /path/to/current/paperless
-        $ docker-compose down
-
-2.  Do a backup for two purposes: If something goes wrong, you still have your
-    data. Second, if you don't like paperless-ngx, you can switch back to
-    paperless.
-
-3.  Download the latest release of paperless-ngx. You can either go with the
-    docker-compose files from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`__
-    or clone the repository to build the image yourself (see :ref:`above <setup-docker_build>`).
-    You can either replace your current paperless folder or put paperless-ngx
-    in a different location.
-
-    .. caution::
-
-        Paperless-ngx includes a ``.env`` file. This will set the
-        project name for docker compose to ``paperless``, which will also define the name
-        of the volumes by paperless-ngx. However, if you experience that paperless-ngx
-        is not using your old paperless volumes, verify the names of your volumes with
-
-        .. code:: shell-session
-
-            $ docker volume ls | grep _data
-
-        and adjust the project name in the ``.env`` file so that it matches the name
-        of the volumes before the ``_data`` part.
-
-
-4.  Download the ``docker-compose.sqlite.yml`` file to ``docker-compose.yml``.
-    If you want to switch to PostgreSQL, do that after you migrated your existing
-    SQLite database.
-
-5.  Adjust ``docker-compose.yml`` and ``docker-compose.env`` to your needs.
-    See :ref:`setup-docker_hub` for details on which edits are advised.
-
-6.  :ref:`Update paperless. <administration-updating>`
-
-7.  In order to find your existing documents with the new search feature, you need
-    to invoke a one-time operation that will create the search index:
-
-    .. code:: shell-session
-
-        $ docker-compose run --rm webserver document_index reindex
-
-    This will migrate your database and create the search index. After that,
-    paperless will take care of maintaining the index by itself.
-
-8.  Start paperless-ngx.
-
-    .. code:: bash
-
-        $ docker-compose up -d
-
-    This will run paperless in the background and automatically start it on system boot.
-
-9.  Paperless installed a permanent redirect to ``admin/`` in your browser. This
-    redirect is still in place and prevents access to the new UI. Clear your
-    browsing cache in order to fix this.
-
-10.  Optionally, follow the instructions below to migrate your existing data to PostgreSQL.
-
-
-.. _setup-sqlite_to_psql:
-
-Moving data from SQLite to PostgreSQL
-=====================================
-
-Moving your data from SQLite to PostgreSQL is done via executing a series of django
-management commands as below.
-
-.. caution::
-
-    Make sure that your SQLite database is migrated to the latest version.
-    Starting paperless will make sure that this is the case. If your try to
-    load data from an old database schema in SQLite into a newer database
-    schema in PostgreSQL, you will run into trouble.
-
-.. warning::
-
-    On some database fields, PostgreSQL enforces predefined limits on maximum
-    length, whereas SQLite does not. The fields in question are the title of documents
-    (128 characters), names of document types, tags and correspondents (128 characters),
-    and filenames (1024 characters). If you have data in these fields that surpasses these
-    limits, migration to PostgreSQL is not possible and will fail with an error.
-
-
-1.  Stop paperless, if it is running.
-2.  Tell paperless to use PostgreSQL:
-
-    a)  With docker, copy the provided ``docker-compose.postgres.yml`` file to
-        ``docker-compose.yml``. Remember to adjust the consumption directory,
-        if necessary.
-    b)  Without docker, configure the database in your ``paperless.conf`` file.
-        See :ref:`configuration` for details.
-
-3.  Open a shell and initialize the database:
-
-    a)  With docker, run the following command to open a shell within the paperless
-        container:
-
-        .. code:: shell-session
-
-            $ cd /path/to/paperless
-            $ docker-compose run --rm webserver /bin/bash
-
-        This will launch the container and initialize the PostgreSQL database.
-
-    b)  Without docker, remember to activate any virtual environment, switch to
-        the ``src`` directory and create the database schema:
-
-        .. code:: shell-session
-
-            $ cd /path/to/paperless/src
-            $ python3 manage.py migrate
-
-        This will not copy any data yet.
-
-4.  Dump your data from SQLite:
-
-    .. code:: shell-session
-
-        $ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
-
-5.  Load your data into PostgreSQL:
-
-    .. code:: shell-session
-
-        $ python3 manage.py loaddata data.json
-
-6.  If operating inside Docker, you may exit the shell now.
-
-    .. code:: shell-session
-
-        $ exit
-
-7.  Start paperless.
-
-
-Moving back to Paperless
-========================
-
-Lets say you migrated to Paperless-ngx and used it for a while, but decided that
-you don't like it and want to move back (If you do, send me a mail about what
-part you didn't like!), you can totally do that with a few simple steps.
-
-Paperless-ngx modified the database schema slightly, however, these changes can
-be reverted while keeping your current data, so that your current data will
-be compatible with original Paperless.
-
-Execute this:
-
-.. code:: shell-session
-
-    $ cd /path/to/paperless
-    $ docker-compose run --rm webserver migrate documents 0023
-
-Or without docker:
-
-.. code:: shell-session
-
-    $ cd /path/to/paperless/src
-    $ python3 manage.py migrate documents 0023
-
-After that, you need to clear your cookies (Paperless-ngx comes with updated
-dependencies that do cookie-processing differently) and probably your cache
-as well.
-
-.. _setup-less_powerful_devices:
-
-
-Considerations for less powerful devices
-########################################
-
-Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and
-configuring some options in paperless can help improve performance immensely:
-
-*   Stick with SQLite to save some resources.
-*   Consider setting ``PAPERLESS_OCR_PAGES`` to 1, so that paperless will only OCR
-    the first page of your documents. In most cases, this page contains enough
-    information to be able to find it.
-*   ``PAPERLESS_TASK_WORKERS`` and ``PAPERLESS_THREADS_PER_WORKER`` are configured
-    to use all cores. The Raspberry Pi models 3 and up have 4 cores, meaning that
-    paperless will use 2 workers and 2 threads per worker. This may result in
-    sluggish response times during consumption, so you might want to lower these
-    settings (example: 2 workers and 1 thread to always have some computing power
-    left for other tasks).
-*   Keep ``PAPERLESS_OCR_MODE`` at its default value ``skip`` and consider OCR'ing
-    your documents before feeding them into paperless. Some scanners are able to
-    do this! You might want to even specify ``skip_noarchive`` to skip archive
-    file generation for already ocr'ed documents entirely.
-*   If you want to perform OCR on the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
-    This will speed up OCR times and use less memory at the expense of slightly worse
-    OCR results.
-*   If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to
-    1. This will save some memory.
-*   Consider setting ``PAPERLESS_ENABLE_NLTK`` to false, to disable the more
-    advanced language processing, which can take more memory and processing time.
-
-For details, refer to :ref:`configuration`.
-
-.. note::
-
-    Updating the :ref:`automatic matching algorithm <advanced-automatic_matching>`
-    takes quite a bit of time. However, the update mechanism checks if your
-    data has changed before doing the heavy lifting. If you experience the
-    algorithm taking too much cpu time, consider changing the schedule in the
-    admin interface to daily. You can also manually invoke the task
-    by changing the date and time of the next run to today/now.
-
-    The actual matching of the algorithm is fast and works on Raspberry Pi as
-    well as on any other device.
-
-.. _redis: https://redis.io/
-
-
-.. _setup-nginx:
-
-Using nginx as a reverse proxy
-##############################
-
-If you want to expose paperless to the internet, you should hide it behind a
-reverse proxy with SSL enabled.
-
-In addition to the usual configuration for SSL,
-the following configuration is required for paperless to operate:
-
-.. code:: nginx
-
-    http {
-
-        # Adjust as required. This is the maximum size for file uploads.
-        # The default value 1M might be a little too small.
-        client_max_body_size 10M;
-
-        server {
-
-            location / {
-
-                # Adjust host and port as required.
-                proxy_pass http://localhost:8000/;
-
-                # These configuration options are required for WebSockets to work.
-                proxy_http_version 1.1;
-                proxy_set_header Upgrade $http_upgrade;
-                proxy_set_header Connection "upgrade";
-
-                proxy_redirect off;
-                proxy_set_header Host $host;
-                proxy_set_header X-Real-IP $remote_addr;
-                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-                proxy_set_header X-Forwarded-Host $server_name;
-            }
-        }
-    }
-
-The ``PAPERLESS_URL`` configuration variable is also required when using a reverse proxy. Please refer to the :ref:`hosting-and-security` docs.
-
-Also read `this <https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu>`__, towards the end of the section.
diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
new file mode 100644 (file)
index 0000000..f522058
--- /dev/null
@@ -0,0 +1,334 @@
+# Troubleshooting
+
+## No files are added by the consumer
+
+Check for the following issues:
+
+- Ensure that the directory you're putting your documents in is the
+  folder paperless is watching. With docker, this setting is performed
+  in the `docker-compose.yml` file. Without docker, look at the
+  `CONSUMPTION_DIR` setting. Don't adjust this setting if you're
+  using docker.
+
+- Ensure that redis is up and running. Paperless does its task
+  processing asynchronously, and for documents to arrive at the task
+  processor, it needs redis to run.
+
+- Ensure that the task processor is running. Docker does this
+  automatically. Manually invoke the task processor by executing
+
+  ```shell-session
+  $ celery --app paperless worker
+  ```
+
+- Look at the output of paperless and inspect it for any errors.
+
+- Go to the admin interface, and check if there are failed tasks. If
+  so, the tasks will contain an error message.
+
+## Consumer warns `OCR for XX failed`
+
+If you find the OCR accuracy to be too low, and/or the document consumer
+warns that
+`OCR for XX failed, but we're going to stick with what we've got since FORGIVING_OCR is enabled`,
+then you might need to install the [Tesseract language
+files](http://packages.ubuntu.com/search?keywords=tesseract-ocr)
+marching your document's languages.
+
+As an example, if you are running Paperless-ngx from any Ubuntu or
+Debian box, and your documents are written in Spanish you may need to
+run:
+
+    apt-get install -y tesseract-ocr-spa
+
+## Consumer fails to pickup any new files
+
+If you notice that the consumer will only pickup files in the
+consumption directory at startup, but won't find any other files added
+later, you will need to enable filesystem polling with the configuration
+option `PAPERLESS_CONSUMER_POLLING`, see
+`[here](/configuration#polling).
+
+This will disable listening to filesystem changes with inotify and
+paperless will manually check the consumption directory for changes
+instead.
+
+## Paperless always redirects to /admin
+
+You probably had the old paperless installed at some point. Paperless
+installed a permanent redirect to /admin in your browser, and you need
+to clear your browsing data / cache to fix that.
+
+## Operation not permitted
+
+You might see errors such as:
+
+```shell-session
+chown: changing ownership of '../export': Operation not permitted
+```
+
+The container tries to set file ownership on the listed directories.
+This is required so that the user running paperless inside docker has
+write permissions to these folders. This happens when pointing these
+directories to NFS shares, for example.
+
+Ensure that `chown` is possible on these directories.
+
+## Classifier error: No training data available
+
+This indicates that the Auto matching algorithm found no documents to
+learn from. This may have two reasons:
+
+- You don't use the Auto matching algorithm: The error can be safely
+  ignored in this case.
+- You are using the Auto matching algorithm: The classifier explicitly
+  excludes documents with Inbox tags. Verify that there are documents
+  in your archive without inbox tags. The algorithm will only learn
+  from documents not in your inbox.
+
+## UserWarning in sklearn on every single document
+
+You may encounter warnings like this:
+
+```
+/usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
+UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
+This might lead to breaking code or invalid results. Use at your own risk.
+```
+
+This happens when certain dependencies of paperless that are responsible
+for the auto matching algorithm are updated. After updating these, your
+current training data _might_ not be compatible anymore. This can be
+ignored in most cases. This warning will disappear automatically when
+paperless updates the training data.
+
+If you want to get rid of the warning or actually experience issues with
+automatic matching, delete the file `classification_model.pickle` in the
+data directory and let paperless recreate it.
+
+## 504 Server Error: Gateway Timeout when adding Office documents
+
+You may experience these errors when using the optional TIKA
+integration:
+
+```
+requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert
+```
+
+Gotenberg is a server that converts Office documents into PDF documents
+and has a default timeout of 30 seconds. When conversion takes longer,
+Gotenberg raises this error.
+
+You can increase the timeout by configuring a command flag for Gotenberg
+(see also [here](https://gotenberg.dev/docs/modules/api#properties)). If
+using docker-compose, this is achieved by the following configuration
+change in the `docker-compose.yml` file:
+
+```yaml
+# The gotenberg chromium route is used to convert .eml files. We do not
+# want to allow external content like tracking pixels or even javascript.
+command:
+  - 'gotenberg'
+  - '--chromium-disable-javascript=true'
+  - '--chromium-allow-list=file:///tmp/.*'
+  - '--api-timeout=60'
+```
+
+## Permission denied errors in the consumption directory
+
+You might encounter errors such as:
+
+```shell-session
+The following error occured while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'
+```
+
+This happens when paperless does not have permission to delete files
+inside the consumption directory. Ensure that `USERMAP_UID` and
+`USERMAP_GID` are set to the user id and group id you use on the host
+operating system, if these are different from `1000`. See [Docker setup](setup#docker_hub).
+
+Also ensure that you are able to read and write to the consumption
+directory on the host.
+
+## OSError: \[Errno 19\] No such device when consuming files
+
+If you experience errors such as:
+
+```shell-session
+File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file
+return CompoundStorage(dbfile, use_mmap=storage.supports_mmap)
+File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__
+self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)
+OSError: [Errno 19] No such device
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker
+res = f(*task["args"], **task["kwargs"])
+File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file
+override_tag_ids=override_tag_ids)
+File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file
+raise ConsumerError(e)
+```
+
+Paperless uses a search index to provide better and faster full text
+searching. This search index is stored inside the `data` folder. The
+search index uses memory-mapped files (mmap). The above error indicates
+that paperless was unable to create and open these files.
+
+This happens when you're trying to store the data directory on certain
+file systems (mostly network shares) that don't support memory-mapped
+files.
+
+## Web-UI stuck at "Loading\..."
+
+This might have multiple reasons.
+
+1.  If you built the docker image yourself or deployed using the bare
+    metal route, make sure that there are files in
+    `<paperless-root>/static/frontend/<lang-code>/`. If there are no
+    files, make sure that you executed `collectstatic` successfully,
+    either manually or as part of the docker image build.
+
+    If the front end is still missing, make sure that the front end is
+    compiled (files present in `src/documents/static/frontend`). If it
+    is not, you need to compile the front end yourself or download the
+    release archive instead of cloning the repository.
+
+2.  Check the output of the web server. You might see errors like this:
+
+    ```
+    [2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request.
+    Traceback (most recent call last):
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
+        self.handle_request(listener, req, client, addr)
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
+        util.reraise(*sys.exc_info())
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
+        raise value
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request
+        resp.write_file(respiter)
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file
+        if not self.sendfile(respiter):
+    File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
+        sent += os.sendfile(sockno, fileno, offset + sent, count)
+    OSError: [Errno 22] Invalid argument
+    ```
+
+    To fix this issue, add
+
+    ```
+    SENDFILE=0
+    ```
+
+    to your [docker-compose.env]{.title-ref} file.
+
+## Error while reading metadata
+
+You might find messages like these in your log files:
+
+```
+[WARNING] [paperless.parsing.tesseract] Error while reading metadata
+```
+
+This indicates that paperless failed to read PDF metadata from one of
+your documents. This happens when you open the affected documents in
+paperless for editing. Paperless will continue to work, and will simply
+not show the invalid metadata.
+
+## Consumer fails with a FileNotFoundError
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
+Traceback (most recent call last):
+  File "/app/paperless/src/paperless_tesseract/parsers.py", line 261, in parse
+    ocrmypdf.ocr(**args)
+  File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py", line 337, in ocr
+    return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
+  File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 385, in run_pipeline
+    exec_concurrent(context, executor)
+  File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 302, in exec_concurrent
+    pdf = post_process(pdf, context, executor)
+  File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 235, in post_process
+    pdf_out = metadata_fixup(pdf_out, context)
+  File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py", line 798, in metadata_fixup
+    with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:
+  File "/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py", line 923, in open
+    pdf = Pdf._open(
+FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
+```
+
+This probably indicates paperless tried to consume the same file twice.
+This can happen for a number of reasons, depending on how documents are
+placed into the consume folder. If paperless is using inotify (the
+default) to check for documents, try adjusting the
+[inotify configuration](/configuration#inotify). If polling is enabled, try adjusting the
+[polling configuration](/configuration#polling).
+
+## Consumer fails waiting for file to remain unmodified.
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.
+```
+
+This indicates paperless timed out while waiting for the file to be
+completely written to the consume folder. Adjusting
+[polling configuration](/configuration#polling) values should resolve the issue.
+
+!!! note
+
+    The user will need to manually move the file out of the consume folder
+    and back in, for the initial failing file to be consumed.
+
+## Consumer fails reporting "OS reports file as busy still".
+
+You might find messages like these in your log files:
+
+```
+[WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still
+```
+
+This indicates paperless was unable to open the file, as the OS reported
+the file as still being in use. To prevent a crash, paperless did not
+try to consume the file. If paperless is using inotify (the default) to
+check for documents, try adjusting the
+[inotify configuration](/configuration#inotify). If polling is enabled, try adjusting the
+[polling configuration](/configuration#polling).
+
+!!! note
+
+    The user will need to manually move the file out of the consume folder
+    and back in, for the initial failing file to be consumed.
+
+## Log reports "Creating PaperlessTask failed".
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked
+```
+
+You are likely using an sqlite based installation, with an increased
+number of workers and are running into sqlite's concurrency
+limitations. Uploading or consuming multiple files at once results in
+many workers attempting to access the database simultaneously.
+
+Consider changing to the PostgreSQL database if you will be processing
+many documents at once often. Otherwise, try tweaking the
+`PAPERLESS_DB_TIMEOUT` setting to allow more time for the database to
+unlock. This may have minor performance implications.
+
+## gunicorn fails to start with "is not a valid port number"
+
+You are likely running using Kubernetes, which automatically creates an
+environment variable named [\${serviceName}\_PORT]{.title-ref}. This is
+the same environment variable which is used by Paperless to optionally
+change the port gunicorn listens on.
+
+To fix this, set [PAPERLESS_PORT]{.title-ref} again to your desired
+port, or the default of 8000.
diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst
deleted file mode 100644 (file)
index 2d10bb1..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-***************
-Troubleshooting
-***************
-
-No files are added by the consumer
-##################################
-
-Check for the following issues:
-
-*   Ensure that the directory you're putting your documents in is the folder
-    paperless is watching. With docker, this setting is performed in the
-    ``docker-compose.yml`` file. Without docker, look at the ``CONSUMPTION_DIR``
-    setting. Don't adjust this setting if you're using docker.
-*   Ensure that redis is up and running. Paperless does its task processing
-    asynchronously, and for documents to arrive at the task processor, it needs
-    redis to run.
-*   Ensure that the task processor is running. Docker does this automatically.
-    Manually invoke the task processor by executing
-
-    .. code:: shell-session
-
-        $ celery --app paperless worker
-
-*   Look at the output of paperless and inspect it for any errors.
-*   Go to the admin interface, and check if there are failed tasks. If so, the
-    tasks will contain an error message.
-
-Consumer warns ``OCR for XX failed``
-####################################
-
-If you find the OCR accuracy to be too low, and/or the document consumer warns
-that ``OCR for XX failed, but we're going to stick with what we've got since
-FORGIVING_OCR is enabled``, then you might need to install the
-`Tesseract language files <http://packages.ubuntu.com/search?keywords=tesseract-ocr>`_
-marching your document's languages.
-
-As an example, if you are running Paperless-ngx from any Ubuntu or Debian
-box, and your documents are written in Spanish you may need to run::
-
-    apt-get install -y tesseract-ocr-spa
-
-Consumer fails to pickup any new files
-######################################
-
-If you notice that the consumer will only pickup files in the consumption
-directory at startup, but won't find any other files added later, you will need to
-enable filesystem polling with the configuration option
-``PAPERLESS_CONSUMER_POLLING``, see :ref:`here <configuration-polling>`.
-
-This will disable listening to filesystem changes with inotify and paperless will
-manually check the consumption directory for changes instead.
-
-
-Paperless always redirects to /admin
-####################################
-
-You probably had the old paperless installed at some point. Paperless installed
-a permanent redirect to /admin in your browser, and you need to clear your
-browsing data / cache to fix that.
-
-
-Operation not permitted
-#######################
-
-You might see errors such as:
-
-.. code:: shell-session
-
-    chown: changing ownership of '../export': Operation not permitted
-
-The container tries to set file ownership on the listed directories. This is
-required so that the user running paperless inside docker has write permissions
-to these folders. This happens when pointing these directories to NFS shares,
-for example.
-
-Ensure that ``chown`` is possible on these directories.
-
-
-Classifier error: No training data available
-############################################
-
-This indicates that the Auto matching algorithm found no documents to learn from.
-This may have two reasons:
-
-*   You don't use the Auto matching algorithm: The error can be safely ignored in this case.
-*   You are using the Auto matching algorithm: The classifier explicitly excludes documents
-    with Inbox tags. Verify that there are documents in your archive without inbox tags.
-    The algorithm will only learn from documents not in your inbox.
-
-
-UserWarning in sklearn on every single document
-###############################################
-
-You may encounter warnings like this:
-
-.. code::
-
-    /usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
-    UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
-    This might lead to breaking code or invalid results. Use at your own risk.
-
-This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are
-updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored
-in most cases. This warning will disappear automatically when paperless updates the training data.
-
-If you want to get rid of the warning or actually experience issues with automatic matching, delete
-the file ``classification_model.pickle`` in the data directory and let paperless recreate it.
-
-
-504 Server Error: Gateway Timeout when adding Office documents
-##############################################################
-
-You may experience these errors when using the optional TIKA integration:
-
-.. code::
-
-    requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert
-
-Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 30 seconds.
-When conversion takes longer, Gotenberg raises this error.
-
-You can increase the timeout by configuring a command flag for Gotenberg (see also `here <https://gotenberg.dev/docs/modules/api#properties>`__).
-If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file:
-
-.. code:: yaml
-
-    gotenberg:
-        image: gotenberg/gotenberg:7.6
-        restart: unless-stopped
-        command:
-            - "gotenberg"
-            - "--chromium-disable-routes=true"
-            - "--api-timeout=60"
-
-Permission denied errors in the consumption directory
-#####################################################
-
-You might encounter errors such as:
-
-.. code:: shell-session
-
-    The following error occured while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'
-
-This happens when paperless does not have permission to delete files inside the consumption directory.
-Ensure that ``USERMAP_UID`` and ``USERMAP_GID`` are set to the user id and group id you use on the host operating system, if these are
-different from ``1000``. See :ref:`setup-docker_hub`.
-
-Also ensure that you are able to read and write to the consumption directory on the host.
-
-
-OSError: [Errno 19] No such device when consuming files
-#######################################################
-
-If you experience errors such as:
-
-.. code:: shell-session
-
-    File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file
-    return CompoundStorage(dbfile, use_mmap=storage.supports_mmap)
-    File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__
-    self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)
-    OSError: [Errno 19] No such device
-
-    During handling of the above exception, another exception occurred:
-
-    Traceback (most recent call last):
-    File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker
-    res = f(*task["args"], **task["kwargs"])
-    File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file
-    override_tag_ids=override_tag_ids)
-    File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file
-    raise ConsumerError(e)
-
-Paperless uses a search index to provide better and faster full text searching. This search index is stored inside
-the ``data`` folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless
-was unable to create and open these files.
-
-This happens when you're trying to store the data directory on certain file systems (mostly network shares)
-that don't support memory-mapped files.
-
-
-Web-UI stuck at "Loading..."
-############################
-
-This might have multiple reasons.
-
-
-1.  If you built the docker image yourself or deployed using the bare metal route,
-    make sure that there are files in ``<paperless-root>/static/frontend/<lang-code>/``.
-    If there are no files, make sure that you executed ``collectstatic`` successfully, either
-    manually or as part of the docker image build.
-
-    If the front end is still missing, make sure that the front end is compiled (files present in
-    ``src/documents/static/frontend``). If it is not, you need to compile the front end yourself
-    or download the release archive instead of cloning the repository.
-
-2.  Check the output of the web server. You might see errors like this:
-
-
-    .. code::
-
-        [2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request.
-        Traceback (most recent call last):
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
-            self.handle_request(listener, req, client, addr)
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
-            util.reraise(*sys.exc_info())
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
-            raise value
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request
-            resp.write_file(respiter)
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file
-            if not self.sendfile(respiter):
-        File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
-            sent += os.sendfile(sockno, fileno, offset + sent, count)
-        OSError: [Errno 22] Invalid argument
-
-    To fix this issue, add
-
-    .. code::
-
-        SENDFILE=0
-
-    to your `docker-compose.env` file.
-
-Error while reading metadata
-############################
-
-You might find messages like these in your log files:
-
-.. code::
-
-    [WARNING] [paperless.parsing.tesseract] Error while reading metadata
-
-This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you
-open the affected documents in paperless for editing. Paperless will continue to work, and will simply not
-show the invalid metadata.
-
-Consumer fails with a FileNotFoundError
-#######################################
-
-You might find messages like these in your log files:
-
-.. code::
-
-    [ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
-    Traceback (most recent call last):
-      File "/app/paperless/src/paperless_tesseract/parsers.py", line 261, in parse
-        ocrmypdf.ocr(**args)
-      File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py", line 337, in ocr
-        return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
-      File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 385, in run_pipeline
-        exec_concurrent(context, executor)
-      File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 302, in exec_concurrent
-        pdf = post_process(pdf, context, executor)
-      File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 235, in post_process
-        pdf_out = metadata_fixup(pdf_out, context)
-      File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py", line 798, in metadata_fixup
-        with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:
-      File "/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py", line 923, in open
-        pdf = Pdf._open(
-    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
-
-This probably indicates paperless tried to consume the same file twice.  This can happen for a number of reasons,
-depending on how documents are placed into the consume folder.  If paperless is using inotify (the default) to
-check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`.  If polling is enabled,
-try adjusting the :ref:`polling configuration <configuration-polling>`.
-
-Consumer fails waiting for file to remain unmodified.
-#####################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
-    [ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.
-
-This indicates paperless timed out while waiting for the file to be completely written to the consume folder.
-Adjusting :ref:`polling configuration <configuration-polling>` values should resolve the issue.
-
-.. note::
-
-    The user will need to manually move the file out of the consume folder and
-    back in, for the initial failing file to be consumed.
-
-Consumer fails reporting "OS reports file as busy still".
-#########################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
-    [WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still
-
-This indicates paperless was unable to open the file, as the OS reported the file as still being in use.  To prevent a
-crash, paperless did not try to consume the file.  If paperless is using inotify (the default) to
-check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`.  If polling is enabled,
-try adjusting the :ref:`polling configuration <configuration-polling>`.
-
-.. note::
-
-    The user will need to manually move the file out of the consume folder and
-    back in, for the initial failing file to be consumed.
-
-Log reports "Creating PaperlessTask failed".
-#########################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
-    [ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked
-
-You are likely using an sqlite based installation, with an increased number of workers and are running into sqlite's concurrency limitations.
-Uploading or consuming multiple files at once results in many workers attempting to access the database simultaneously.
-
-Consider changing to the PostgreSQL database if you will be processing many documents at once often.  Otherwise,
-try tweaking the ``PAPERLESS_DB_TIMEOUT`` setting to allow more time for the database to unlock.  This may have
-minor performance implications.
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644 (file)
index 0000000..8506482
--- /dev/null
@@ -0,0 +1,483 @@
+# Usage Overview
+
+Paperless is an application that manages your personal documents. With
+the help of a document scanner (see [the scanners wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations)), paperless transforms your wieldy physical document binders
+into a searchable archive and provides many utilities for finding and
+managing your documents.
+
+## Terms and definitions
+
+Paperless essentially consists of two different parts for managing your
+documents:
+
+- The _consumer_ watches a specified folder and adds all documents in
+  that folder to paperless.
+- The _web server_ provides a UI that you use to manage and search for
+  your scanned documents.
+
+Each document has a couple of fields that you can assign to them:
+
+- A _Document_ is a piece of paper that sometimes contains valuable
+  information.
+- The _correspondent_ of a document is the person, institution or
+  company that a document either originates from, or is sent to.
+- A _tag_ is a label that you can assign to documents. Think of labels
+  as more powerful folders: Multiple documents can be grouped together
+  with a single tag, however, a single document can also have multiple
+  tags. This is not possible with folders. The reason folders are not
+  implemented in paperless is simply that tags are much more versatile
+  than folders.
+- A _document type_ is used to demarcate the type of a document such
+  as letter, bank statement, invoice, contract, etc. It is used to
+  identify what a document is about.
+- The _date added_ of a document is the date the document was scanned
+  into paperless. You cannot and should not change this date.
+- The _date created_ of a document is the date the document was
+  initially issued. This can be the date you bought a product, the
+  date you signed a contract, or the date a letter was sent to you.
+- The _archive serial number_ (short: ASN) of a document is the
+  identifier of the document in your physical document binders. See
+  [recommended workflow](#usage-reccomended_workflow) below.
+- The _content_ of a document is the text that was OCR'ed from the
+  document. This text is fed into the search engine and is used for
+  matching tags, correspondents and document types.
+
+## Adding documents to paperless
+
+Once you've got Paperless setup, you need to start feeding documents
+into it. When adding documents to paperless, it will perform the
+following operations on your documents:
+
+1.  OCR the document, if it has no text. Digital documents usually have
+    text, and this step will be skipped for those documents.
+2.  Paperless will create an archivable PDF/A document from your
+    document. If this document is coming from your scanner, it will have
+    embedded selectable text.
+3.  Paperless performs automatic matching of tags, correspondents and
+    types on the document before storing it in the database.
+
+!!! tip
+
+    This process can be configured to fit your needs. If you don't want
+    paperless to create archived versions for digital documents, you can
+    configure that by configuring `PAPERLESS_OCR_MODE=skip_noarchive`.
+    Please read the
+    [relevant section in the documentation](/configuration#ocr).
+
+!!! note
+
+    No matter which options you choose, Paperless will always store the
+    original document that it found in the consumption directory or in the
+    mail and will never overwrite that document. Archived versions are
+    stored alongside the original versions.
+
+### The consumption directory
+
+The primary method of getting documents into your database is by putting
+them in the consumption directory. The consumer runs in an infinite
+loop, looking for new additions to this directory. When it finds them,
+the consumer goes about the process of parsing them with the OCR,
+indexing what it finds, and storing it in the media directory.
+
+Getting stuff into this directory is up to you. If you're running
+Paperless on your local computer, you might just want to drag and drop
+files there, but if you're running this on a server and want your
+scanner to automatically push files to this directory, you'll need to
+setup some sort of service to accept the files from the scanner.
+Typically, you're looking at an FTP server like
+[Proftpd](http://www.proftpd.org/) or a Windows folder share with
+[Samba](http://www.samba.org/).
+
+### Web UI Upload
+
+The dashboard has a file drop field to upload documents to paperless.
+Simply drag a file onto this field or select a file with the file
+dialog. Multiple files are supported.
+
+You can also upload documents on any other page of the web UI by
+dragging-and-dropping files into your browser window.
+
+### Mobile upload {#usage-mobile_upload}
+
+The mobile app over at <https://github.com/qcasey/paperless_share>
+allows Android users to share any documents with paperless. This can be
+combined with any of the mobile scanning apps out there, such as Office
+Lens.
+
+Furthermore, there is the [Paperless
+App](https://github.com/bauerj/paperless_app) as well, which not only
+has document upload, but also document browsing and download features.
+
+### IMAP (Email) {#usage-email}
+
+You can tell paperless-ngx to consume documents from your email
+accounts. This is a very flexible and powerful feature, if you regularly
+received documents via mail that you need to archive. The mail consumer
+can be configured via the frontend settings (/settings/mail) in the following
+manner:
+
+1.  Define e-mail accounts.
+2.  Define mail rules for your account.
+
+These rules perform the following:
+
+1.  Connect to the mail server.
+2.  Fetch all matching mails (as defined by folder, maximum age and the
+    filters)
+3.  Check if there are any consumable attachments.
+4.  If so, instruct paperless to consume the attachments and optionally
+    use the metadata provided in the rule for the new document.
+5.  If documents were consumed from a mail, the rule action is performed
+    on that mail.
+
+Paperless will completely ignore mails that do not match your filters.
+It will also only perform the action on mails that it has consumed
+documents from.
+
+The actions all ensure that the same mail is not consumed twice by
+different means. These are as follows:
+
+- **Delete:** Immediately deletes mail that paperless has consumed
+  documents from. Use with caution.
+- **Mark as read:** Mark consumed mail as read. Paperless will not
+  consume documents from already read mails. If you read a mail before
+  paperless sees it, it will be ignored.
+- **Flag:** Sets the 'important' flag on mails with consumed
+  documents. Paperless will not consume flagged mails.
+- **Move to folder:** Moves consumed mails out of the way so that
+  paperless wont consume them again.
+- **Add custom Tag:** Adds a custom tag to mails with consumed
+  documents (the IMAP standard calls these "keywords"). Paperless
+  will not consume mails already tagged. Not all mail servers support
+  this feature!
+
+!!! warning
+
+    The mail consumer will perform these actions on all mails it has
+    consumed documents from. Keep in mind that the actual consumption
+    process may fail for some reason, leaving you with missing documents in
+    paperless.
+
+!!! note
+
+    With the correct set of rules, you can completely automate your email
+    documents. Create rules for every correspondent you receive digital
+    documents from and paperless will read them automatically. The default
+    action "mark as read" is pretty tame and will not cause any damage or
+    data loss whatsoever.
+
+    You can also setup a special folder in your mail account for paperless
+    and use your favorite mail client to move to be consumed mails into that
+    folder automatically or manually and tell paperless to move them to yet
+    another folder after consumption. It's up to you.
+
+!!! note
+
+    When defining a mail rule with a folder, you may need to try different
+    characters to define how the sub-folders are separated. Common values
+    include ".", "/" or "\|", but this varies by the mail server.
+    Check the documentation for your mail server. In the event of an error
+    fetching mail from a certain folder, check the Paperless logs. When a
+    folder is not located, Paperless will attempt to list all folders found
+    in the account to the Paperless logs.
+
+!!! note
+
+    Paperless will process the rules in the order defined in the admin page.
+
+    You can define catch-all rules and have them executed last to consume
+    any documents not matched by previous rules. Such a rule may assign an
+    "Unknown mail document" tag to consumed documents so you can inspect
+    them further.
+
+Paperless is set up to check your mails every 10 minutes. This can be
+configured on the 'Scheduled tasks' page in the admin.
+
+### REST API
+
+You can also submit a document using the REST API, see [docs][api#file-uploads]
+for details.
+
+## Best practices {#basic-searching}
+
+Paperless offers a couple tools that help you organize your document
+collection. However, it is up to you to use them in a way that helps you
+organize documents and find specific documents when you need them. This
+section offers a couple ideas for managing your collection.
+
+Document types allow you to classify documents according to what they
+are. You can define types such as "Receipt", "Invoice", or
+"Contract". If you used to collect all your receipts in a single
+binder, you can recreate that system in paperless by defining a document
+type, assigning documents to that type and then filtering by that type
+to only see all receipts.
+
+Not all documents need document types. Sometimes its hard to determine
+what the type of a document is or it is hard to justify creating a
+document type that you only need once or twice. This is okay. As long as
+the types you define help you organize your collection in the way you
+want, paperless is doing its job.
+
+Tags can be used in many different ways. Think of tags are more
+versatile folders or binders. If you have a binder for documents related
+to university / your car or health care, you can create these binders in
+paperless by creating tags and assigning them to relevant documents.
+Just as with documents, you can filter the document list by tags and
+only see documents of a certain topic.
+
+With physical documents, you'll often need to decide which folder the
+document belongs to. The advantage of tags over folders and binders is
+that a single document can have multiple tags. A physical document
+cannot magically appear in two different folders, but with tags, this is
+entirely possible.
+
+!!! tip
+
+    This can be used in many different ways. One example: Imagine you're
+    working on a particular task, such as signing up for university. Usually
+    you'll need to collect a bunch of different documents that are already
+    sorted into various folders. With the tag system of paperless, you can
+    create a new group of documents that are relevant to this task without
+    destroying the already existing organization. When you're done with the
+    task, you could delete the tag again, which would be equal to sorting
+    documents back into the folder they belong into. Or keep the tag, up to
+    you.
+
+All of the logic above applies to correspondents as well. Attach them to
+documents if you feel that they help you organize your collection.
+
+When you've started organizing your documents, create a couple saved
+views for document collections you regularly access. This is equal to
+having labeled physical binders on your desk, except that these saved
+views are dynamic and simply update themselves as you add documents to
+the system.
+
+Here are a couple examples of tags and types that you could use in your
+collection.
+
+- An `inbox` tag for newly added documents that you haven't manually
+  edited yet.
+- A tag `car` for everything car related (repairs, registration,
+  insurance, etc)
+- A tag `todo` for documents that you still need to do something with,
+  such as reply, or perform some task online.
+- A tag `bank account x` for all bank statement related to that
+  account.
+- A tag `mail` for anything that you added to paperless via its mail
+  processing capabilities.
+- A tag `missing_metadata` when you still need to add some metadata to
+  a document, but can't or don't want to do this right now.
+
+## Searching {#basic-usage_searching}
+
+Paperless offers an extensive searching mechanism that is designed to
+allow you to quickly find a document you're looking for (for example,
+that thing that just broke and you bought a couple months ago, that
+contract you signed 8 years ago).
+
+When you search paperless for a document, it tries to match this query
+against your documents. Paperless will look for matching documents by
+inspecting their content, title, correspondent, type and tags. Paperless
+returns a scored list of results, so that documents matching your query
+better will appear further up in the search results.
+
+By default, paperless returns only documents which contain all words
+typed in the search bar. However, paperless also offers advanced search
+syntax if you want to drill down the results further.
+
+Matching documents with logical expressions:
+
+```
+shopname AND (product1 OR product2)
+```
+
+Matching specific tags, correspondents or types:
+
+```
+type:invoice tag:unpaid
+correspondent:university certificate
+```
+
+Matching dates:
+
+```
+created:[2005 to 2009]
+added:yesterday
+modified:today
+```
+
+Matching inexact words:
+
+```
+produ*name
+```
+
+!!! note
+
+    Inexact terms are hard for search indexes. These queries might take a
+    while to execute. That's why paperless offers auto complete and query
+    correction.
+
+All of these constructs can be combined as you see fit. If you want to
+learn more about the query language used by paperless, paperless uses
+Whoosh's default query language. Head over to [Whoosh query
+language](https://whoosh.readthedocs.io/en/latest/querylang.html). For
+details on what date parsing utilities are available, see [Date
+parsing](https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries).
+
+## The recommended workflow {#usage-recommended_workflow}
+
+Once you have familiarized yourself with paperless and are ready to use
+it for all your documents, the recommended workflow for managing your
+documents is as follows. This workflow also takes into account that some
+documents have to be kept in physical form, but still ensures that you
+get all the advantages for these documents as well.
+
+The following diagram shows how easy it is to manage your documents.
+
+![image](assets/recommended_workflow.png){width=400}
+
+### Preparations in paperless
+
+- Create an inbox tag that gets assigned to all new documents.
+- Create a TODO tag.
+
+### Processing of the physical documents
+
+Keep a physical inbox. Whenever you receive a document that you need to
+archive, put it into your inbox. Regularly, do the following for all
+documents in your inbox:
+
+1.  For each document, decide if you need to keep the document in
+    physical form. This applies to certain important documents, such as
+    contracts and certificates.
+2.  If you need to keep the document, write a running number on the
+    document before scanning, starting at one and counting upwards. This
+    is the archive serial number, or ASN in short.
+3.  Scan the document.
+4.  If the document has an ASN assigned, store it in a _single_ binder,
+    sorted by ASN. Don't order this binder in any other way.
+5.  If the document has no ASN, throw it away. Yay!
+
+Over time, you will notice that your physical binder will fill up. If it
+is full, label the binder with the range of ASNs in this binder (i.e.,
+"Documents 1 to 343"), store the binder in your cellar or elsewhere,
+and start a new binder.
+
+The idea behind this process is that you will never have to use the
+physical binders to find a document. If you need a specific physical
+document, you may find this document by:
+
+1.  Searching in paperless for the document.
+2.  Identify the ASN of the document, since it appears on the scan.
+3.  Grab the relevant document binder and get the document. This is easy
+    since they are sorted by ASN.
+
+### Processing of documents in paperless
+
+Once you have scanned in a document, proceed in paperless as follows.
+
+1.  If the document has an ASN, assign the ASN to the document.
+2.  Assign a correspondent to the document (i.e., your employer, bank,
+    etc) This isn't strictly necessary but helps in finding a document
+    when you need it.
+3.  Assign a document type (i.e., invoice, bank statement, etc) to the
+    document This isn't strictly necessary but helps in finding a
+    document when you need it.
+4.  Assign a proper title to the document (the name of an item you
+    bought, the subject of the letter, etc)
+5.  Check that the date of the document is correct. Paperless tries to
+    read the date from the content of the document, but this fails
+    sometimes if the OCR is bad or multiple dates appear on the
+    document.
+6.  Remove inbox tags from the documents.
+
+!!! tip
+
+    You can setup manual matching rules for your correspondents and tags and
+    paperless will assign them automatically. After consuming a couple
+    documents, you can even ask paperless to *learn* when to assign tags and
+    correspondents by itself. For details on this feature, see
+    [advanced matching](advanced_usage#matching).
+
+### Task management
+
+Some documents require attention and require you to act on the document.
+You may take two different approaches to handle these documents based on
+how regularly you intend to scan documents and use paperless.
+
+- If you scan and process your documents in paperless regularly,
+  assign a TODO tag to all scanned documents that you need to process.
+  Create a saved view on the dashboard that shows all documents with
+  this tag.
+- If you do not scan documents regularly and use paperless solely for
+  archiving, create a physical todo box next to your physical inbox
+  and put documents you need to process in the TODO box. When you
+  performed the task associated with the document, move it to the
+  inbox.
+
+## Architectue
+
+Paperless-ngx consists of the following components:
+
+- **The webserver:** This serves the administration pages, the API,
+  and the new frontend. This is the main tool you'll be using to interact
+  with paperless. You may start the webserver directly with
+
+  ```shell-session
+  $ cd /path/to/paperless/src/
+  $ gunicorn -c ../gunicorn.conf.py paperless.wsgi
+  ```
+
+  or by any other means such as Apache `mod_wsgi`.
+
+- **The consumer:** This is what watches your consumption folder for
+  documents. However, the consumer itself does not really consume your
+  documents. Now it notifies a task processor that a new file is ready
+  for consumption. I suppose it should be named differently. This was
+  also used to check your emails, but that's now done elsewhere as
+  well.
+
+  Start the consumer with the management command `document_consumer`:
+
+  ```shell-session
+  $ cd /path/to/paperless/src/
+  $ python3 manage.py document_consumer
+  ```
+
+- **The task processor:** Paperless relies on [Celery - Distributed
+  Task Queue](https://docs.celeryq.dev/en/stable/index.html) for doing
+  most of the heavy lifting. This is a task queue that accepts tasks
+  from multiple sources and processes these in parallel. It also comes
+  with a scheduler that executes certain commands periodically.
+
+  This task processor is responsible for:
+
+  - Consuming documents. When the consumer finds new documents, it
+    notifies the task processor to start a consumption task.
+  - The task processor also performs the consumption of any
+    documents you upload through the web interface.
+  - Consuming emails. It periodically checks your configured
+    accounts for new emails and notifies the task processor to
+    consume the attachment of an email.
+  - Maintaining the search index and the automatic matching
+    algorithm. These are things that paperless needs to do from time
+    to time in order to operate properly.
+
+  This allows paperless to process multiple documents from your
+  consumption folder in parallel! On a modern multi core system, this
+  makes the consumption process with full OCR blazingly fast.
+
+  The task processor comes with a built-in admin interface that you
+  can use to check whenever any of the tasks fail and inspect the
+  errors (i.e., wrong email credentials, errors during consuming a
+  specific file, etc).
+
+- A [redis](https://redis.io/) message broker: This is a really
+  lightweight service that is responsible for getting the tasks from
+  the webserver and the consumer to the task scheduler. These run in a
+  different process (maybe even on different machines!), and
+  therefore, this is necessary.
+
+- Optional: A database server. Paperless supports PostgreSQL, MariaDB
+  and SQLite for storing its data.
diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst
deleted file mode 100644 (file)
index a321afb..0000000
+++ /dev/null
@@ -1,420 +0,0 @@
-**************
-Usage Overview
-**************
-
-Paperless is an application that manages your personal documents. With
-the help of a document scanner (see :ref:`scanners`), paperless transforms
-your wieldy physical document binders into a searchable archive and
-provides many utilities for finding and managing your documents.
-
-
-Terms and definitions
-#####################
-
-Paperless essentially consists of two different parts for managing your
-documents:
-
-* The *consumer* watches a specified folder and adds all documents in that
-  folder to paperless.
-* The *web server* provides a UI that you use to manage and search for your
-  scanned documents.
-
-Each document has a couple of fields that you can assign to them:
-
-* A *Document* is a piece of paper that sometimes contains valuable
-  information.
-* The *correspondent* of a document is the person, institution or company that
-  a document either originates from, or is sent to.
-* A *tag* is a label that you can assign to documents. Think of labels as more
-  powerful folders: Multiple documents can be grouped together with a single
-  tag, however, a single document can also have multiple tags. This is not
-  possible with folders. The reason folders are not implemented in paperless
-  is simply that tags are much more versatile than folders.
-* A *document type* is used to demarcate the type of a document such as letter,
-  bank statement, invoice, contract, etc. It is used to identify what a document
-  is about.
-* The *date added* of a document is the date the document was scanned into
-  paperless. You cannot and should not change this date.
-* The *date created* of a document is the date the document was initially issued.
-  This can be the date you bought a product, the date you signed a contract, or
-  the date a letter was sent to you.
-* The *archive serial number* (short: ASN) of a document is the identifier of
-  the document in your physical document binders. See
-  :ref:`usage-recommended_workflow` below.
-* The *content* of a document is the text that was OCR'ed from the document.
-  This text is fed into the search engine and is used for matching tags,
-  correspondents and document types.
-
-
-Frontend overview
-#################
-
-.. warning::
-
-    TBD. Add some fancy screenshots!
-
-Adding documents to paperless
-#############################
-
-Once you've got Paperless setup, you need to start feeding documents into it.
-When adding documents to paperless, it will perform the following operations on
-your documents:
-
-1.  OCR the document, if it has no text. Digital documents usually have text,
-    and this step will be skipped for those documents.
-2.  Paperless will create an archivable PDF/A document from your document.
-    If this document is coming from your scanner, it will have embedded selectable text.
-3.  Paperless performs automatic matching of tags, correspondents and types on the
-    document before storing it in the database.
-
-.. hint::
-
-    This process can be configured to fit your needs. If you don't want paperless
-    to create archived versions for digital documents, you can configure that by
-    configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the
-    :ref:`relevant section in the documentation <configuration-ocr>`.
-
-.. note::
-
-    No matter which options you choose, Paperless will always store the original
-    document that it found in the consumption directory or in the mail and
-    will never overwrite that document. Archived versions are stored alongside the
-    original versions.
-
-
-The consumption directory
-=========================
-
-The primary method of getting documents into your database is by putting them in
-the consumption directory.  The consumer runs in an infinite loop, looking for new
-additions to this directory. When it finds them, the consumer goes about the process
-of parsing them with the OCR, indexing what it finds, and storing it in the media directory.
-
-Getting stuff into this directory is up to you.  If you're running Paperless
-on your local computer, you might just want to drag and drop files there, but if
-you're running this on a server and want your scanner to automatically push
-files to this directory, you'll need to setup some sort of service to accept the
-files from the scanner.  Typically, you're looking at an FTP server like
-`Proftpd`_ or a Windows folder share with `Samba`_.
-
-.. _Proftpd: http://www.proftpd.org/
-.. _Samba: http://www.samba.org/
-
-.. TODO: hyperref to configuration of the location of this magic folder.
-
-Web UI Upload
-=============
-
-The dashboard has a file drop field to upload documents to paperless. Simply drag a file
-onto this field or select a file with the file dialog. Multiple files are supported.
-
-You can also upload documents on any other page of the web UI by dragging-and-dropping
-files into your browser window.
-
-.. _usage-mobile_upload:
-
-Mobile upload
-=============
-
-The mobile app over at `<https://github.com/qcasey/paperless_share>`_ allows Android users
-to share any documents with paperless. This can be combined with any of the mobile
-scanning apps out there, such as Office Lens.
-
-Furthermore, there is the  `Paperless App <https://github.com/bauerj/paperless_app>`_ as well,
-which not only has document upload, but also document browsing and download features.
-
-.. _usage-email:
-
-IMAP (Email)
-============
-
-You can tell paperless-ngx to consume documents from your email accounts.
-This is a very flexible and powerful feature, if you regularly received documents
-via mail that you need to archive. The mail consumer can be configured by using the
-admin interface in the following manner:
-
-1.  Define e-mail accounts.
-2.  Define mail rules for your account.
-
-These rules perform the following:
-
-1.  Connect to the mail server.
-2.  Fetch all matching mails (as defined by folder, maximum age and the filters)
-3.  Check if there are any consumable attachments.
-4.  If so, instruct paperless to consume the attachments and optionally
-    use the metadata provided in the rule for the new document.
-5.  If documents were consumed from a mail, the rule action is performed
-    on that mail.
-
-Paperless will completely ignore mails that do not match your filters. It will also
-only perform the action on mails that it has consumed documents from.
-
-The actions all ensure that the same mail is not consumed twice by different means.
-These are as follows:
-
-*   **Delete:** Immediately deletes mail that paperless has consumed documents from.
-    Use with caution.
-*   **Mark as read:** Mark consumed mail as read. Paperless will not consume documents
-    from already read mails. If you read a mail before paperless sees it, it will be
-    ignored.
-*   **Flag:** Sets the 'important' flag on mails with consumed documents. Paperless
-    will not consume flagged mails.
-*   **Move to folder:** Moves consumed mails out of the way so that paperless wont
-    consume them again.
-*   **Add custom Tag:** Adds a custom tag to mails with consumed documents (the IMAP
-    standard calls these "keywords"). Paperless will not consume mails already tagged.
-    Not all mail servers support this feature!
-
-.. caution::
-
-    The mail consumer will perform these actions on all mails it has consumed
-    documents from. Keep in mind that the actual consumption process may fail
-    for some reason, leaving you with missing documents in paperless.
-
-.. note::
-
-    With the correct set of rules, you can completely automate your email documents.
-    Create rules for every correspondent you receive digital documents from and
-    paperless will read them automatically. The default action "mark as read" is
-    pretty tame and will not cause any damage or data loss whatsoever.
-
-    You can also setup a special folder in your mail account for paperless and use
-    your favorite mail client to move to be consumed mails into that folder
-    automatically or manually and tell paperless to move them to yet another folder
-    after consumption. It's up to you.
-
-.. note::
-
-    When defining a mail rule with a folder, you may need to try different characters to
-    define how the sub-folders are separated.  Common values include ".", "/" or "|", but
-    this varies by the mail server.  Check the documentation for your mail server.  In the
-    event of an error fetching mail from a certain folder, check the Paperless logs.  When
-    a folder is not located, Paperless will attempt to list all folders found in the account
-    to the Paperless logs.
-
-.. note::
-
-    Paperless will process the rules in the order defined in the admin page.
-
-    You can define catch-all rules and have them executed last to consume
-    any documents not matched by previous rules. Such a rule may assign an "Unknown
-    mail document" tag to consumed documents so you can inspect them further.
-
-Paperless is set up to check your mails every 10 minutes. This can be configured on the
-'Scheduled tasks' page in the admin.
-
-
-REST API
-========
-
-You can also submit a document using the REST API, see :ref:`api-file_uploads` for details.
-
-.. _basic-searching:
-
-
-Best practices
-##############
-
-Paperless offers a couple tools that help you organize your document collection. However,
-it is up to you to use them in a way that helps you organize documents and find specific
-documents when you need them. This section offers a couple ideas for managing your collection.
-
-Document types allow you to classify documents according to what they are. You can define
-types such as "Receipt", "Invoice", or "Contract". If you used to collect all your receipts
-in a single binder, you can recreate that system in paperless by defining a document type,
-assigning documents to that type and then filtering by that type to only see all receipts.
-
-Not all documents need document types. Sometimes its hard to determine what the type of a
-document is or it is hard to justify creating a document type that you only need once or twice.
-This is okay. As long as the types you define help you organize your collection in the way
-you want, paperless is doing its job.
-
-Tags can be used in many different ways. Think of tags are more versatile folders or binders.
-If you have a binder for documents related to university / your car or health care, you can
-create these binders in paperless by creating tags and assigning them to relevant documents.
-Just as with documents, you can filter the document list by tags and only see documents of
-a certain topic.
-
-With physical documents, you'll often need to decide which folder the document belongs to.
-The advantage of tags over folders and binders is that a single document can have multiple
-tags. A physical document cannot magically appear in two different folders, but with tags,
-this is entirely possible.
-
-.. hint::
-
-  This can be used in many different ways. One example: Imagine you're working on a particular
-  task, such as signing up for university. Usually you'll need to collect a bunch of different
-  documents that are already sorted into various folders. With the tag system of paperless,
-  you can create a new group of documents that are relevant to this task without destroying
-  the already existing organization. When you're done with the task, you could delete the
-  tag again, which would be equal to sorting documents back into the folder they belong into.
-  Or keep the tag, up to you.
-
-All of the logic above applies to correspondents as well. Attach them to documents if you
-feel that they help you organize your collection.
-
-When you've started organizing your documents, create a couple saved views for document collections
-you regularly access. This is equal to having labeled physical binders on your desk, except
-that these saved views are dynamic and simply update themselves as you add documents to the system.
-
-Here are a couple examples of tags and types that you could use in your collection.
-
-* An ``inbox`` tag for newly added documents that you haven't manually edited yet.
-* A tag ``car`` for everything car related (repairs, registration, insurance, etc)
-* A tag ``todo`` for documents that you still need to do something with, such as reply, or
-  perform some task online.
-* A tag ``bank account x`` for all bank statement related to that account.
-* A tag ``mail`` for anything that you added to paperless via its mail processing capabilities.
-* A tag ``missing_metadata`` when you still need to add some metadata to a document, but can't
-  or don't want to do this right now.
-
-.. _basic-usage_searching:
-
-Searching
-#########
-
-Paperless offers an extensive searching mechanism that is designed to allow you to quickly
-find a document you're looking for (for example, that thing that just broke and you bought
-a couple months ago, that contract you signed 8 years ago).
-
-When you search paperless for a document, it tries to match this query against your documents.
-Paperless will look for matching documents by inspecting their content, title, correspondent,
-type and tags. Paperless returns a scored list of results, so that documents matching your query
-better will appear further up in the search results.
-
-By default, paperless returns only documents which contain all words typed in the search bar.
-However, paperless also offers advanced search syntax if you want to drill down the results
-further.
-
-Matching documents with logical expressions:
-
-.. code::
-
-  shopname AND (product1 OR product2)
-
-Matching specific tags, correspondents or types:
-
-.. code::
-
-  type:invoice tag:unpaid
-  correspondent:university certificate
-
-Matching dates:
-
-.. code::
-
-  created:[2005 to 2009]
-  added:yesterday
-  modified:today
-
-Matching inexact words:
-
-.. code::
-
-  produ*name
-
-.. note::
-
-  Inexact terms are hard for search indexes. These queries might take a while to execute. That's why paperless offers
-  auto complete and query correction.
-
-All of these constructs can be combined as you see fit.
-If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language.
-Head over to `Whoosh query language <https://whoosh.readthedocs.io/en/latest/querylang.html>`_.
-For details on what date parsing utilities are available, see
-`Date parsing <https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries>`_.
-
-
-.. _usage-recommended_workflow:
-
-The recommended workflow
-########################
-
-Once you have familiarized yourself with paperless and are ready to use it
-for all your documents, the recommended workflow for managing your documents
-is as follows. This workflow also takes into account that some documents
-have to be kept in physical form, but still ensures that you get all the
-advantages for these documents as well.
-
-The following diagram shows how easy it is to manage your documents.
-
-.. image:: _static/recommended_workflow.png
-
-Preparations in paperless
-=========================
-
-* Create an inbox tag that gets assigned to all new documents.
-* Create a TODO tag.
-
-Processing of the physical documents
-====================================
-
-Keep a physical inbox. Whenever you receive a document that you need to
-archive, put it into your inbox. Regularly, do the following for all documents
-in your inbox:
-
-1.  For each document, decide if you need to keep the document in physical
-    form. This applies to certain important documents, such as contracts and
-    certificates.
-2.  If you need to keep the document, write a running number on the document
-    before scanning, starting at one and counting upwards. This is the archive
-    serial number, or ASN in short.
-3.  Scan the document.
-4.  If the document has an ASN assigned, store it in a *single* binder, sorted
-    by ASN. Don't order this binder in any other way.
-5.  If the document has no ASN, throw it away. Yay!
-
-Over time, you will notice that your physical binder will fill up. If it is
-full, label the binder with the range of ASNs in this binder (i.e., "Documents
-1 to 343"), store the binder in your cellar or elsewhere, and start a new
-binder.
-
-The idea behind this process is that you will never have to use the physical
-binders to find a document. If you need a specific physical document, you
-may find this document by:
-
-1.  Searching in paperless for the document.
-2.  Identify the ASN of the document, since it appears on the scan.
-3.  Grab the relevant document binder and get the document. This is easy since
-    they are sorted by ASN.
-
-Processing of documents in paperless
-====================================
-
-Once you have scanned in a document, proceed in paperless as follows.
-
-1.  If the document has an ASN, assign the ASN to the document.
-2.  Assign a correspondent to the document (i.e., your employer, bank, etc)
-    This isn't strictly necessary but helps in finding a document when you need
-    it.
-3.  Assign a document type (i.e., invoice, bank statement, etc) to the document
-    This isn't strictly necessary but helps in finding a document when you need
-    it.
-4.  Assign a proper title to the document (the name of an item you bought, the
-    subject of the letter, etc)
-5.  Check that the date of the document is correct. Paperless tries to read
-    the date from the content of the document, but this fails sometimes if the
-    OCR is bad or multiple dates appear on the document.
-6.  Remove inbox tags from the documents.
-
-.. hint::
-
-    You can setup manual matching rules for your correspondents and tags and
-    paperless will assign them automatically. After consuming a couple documents,
-    you can even ask paperless to *learn* when to assign tags and correspondents
-    by itself. For details on this feature, see :ref:`advanced-matching`.
-
-Task management
-===============
-
-Some documents require attention and require you to act on the document. You
-may take two different approaches to handle these documents based on how
-regularly you intend to scan documents and use paperless.
-
-* If you scan and process your documents in paperless regularly, assign a
-  TODO tag to all scanned documents that you need to process. Create a saved
-  view on the dashboard that shows all documents with this tag.
-* If you do not scan documents regularly and use paperless solely for archiving,
-  create a physical todo box next to your physical inbox and put documents you
-  need to process in the TODO box. When you performed the task associated with
-  the document, move it to the inbox.
index d5266efca5ce39728aa91246fce497cfbf8af437..bbdc6025f0044f89e8f6d5d13110a85550f44685 100755 (executable)
@@ -95,6 +95,7 @@ echo "============================"
 echo ""
 echo "The URL paperless will be available at. This is required if the"
 echo "installation will be accessible via the web, otherwise can be left blank."
+echo "Example: https://paperless.example.com"
 echo ""
 
 ask "URL" ""
@@ -112,6 +113,8 @@ echo ""
 echo "Paperless requires you to configure the current time zone correctly."
 echo "Otherwise, the dates of your documents may appear off by one day,"
 echo "depending on where you are on earth."
+echo "Example: Europe/Berlin"
+echo "See here for a list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"
 echo ""
 
 ask "Current time zone" "$default_time_zone"
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644 (file)
index 0000000..9de918b
--- /dev/null
@@ -0,0 +1,62 @@
+site_name: Paperless-ngx
+theme:
+  name: material
+  logo: assets/logo.svg
+  font:
+    text: Roboto
+    code: Roboto Mono
+  palette:
+    # Palette toggle for light mode
+    - media: "(prefers-color-scheme: light)"
+      scheme: default
+      toggle:
+        icon: material/brightness-7
+        name: Switch to dark mode
+
+    # Palette toggle for dark mode
+    - media: "(prefers-color-scheme: dark)"
+      scheme: slate
+      toggle:
+        icon: material/brightness-4
+        name: Switch to light mode
+  features:
+    - navigation.tabs
+    - navigation.top
+    - toc.integrate
+  icon:
+    repo: fontawesome/brands/github
+  favicon: assets/favicon.png
+repo_url: https://github.com/paperless-ngx/paperless-ngx
+edit_uri: blob/main/docs/
+extra_css:
+  - assets/extra.css
+markdown_extensions:
+  - attr_list
+  - md_in_html
+  - def_list
+  - admonition
+  - tables
+  - pymdownx.highlight:
+      anchor_linenums: true
+  - pymdownx.superfences
+nav:
+    - index.md
+    - setup.md
+    - 'Basic Usage': usage.md
+    - configuration.md
+    - administration.md
+    - advanced_usage.md
+    - 'REST API': api.md
+    - development.md
+    - 'FAQs': faq.md
+    - troubleshooting.md
+    - changelog.md
+copyright: Copyright &copy; 2016 - 2022 Daniel Quinn, Jonas Winkler, and the Paperless-ngx team
+extra:
+  social:
+    - icon: fontawesome/brands/github
+      link: https://github.com/paperless-ngx/paperless-ngx
+    - icon: fontawesome/brands/docker
+      link: https://hub.docker.com/r/paperlessngx/paperless-ngx
+    - icon: material/chat
+      link: https://matrix.to/#/#paperless:matrix.org
index 26fc327c324a3b9dfb331126633f110b67c721fd..524d9264ea03a5d378767031782c09f36adc45b1 100644 (file)
@@ -1,5 +1,5 @@
 # Have a look at the docs for documentation.
-# https://paperless-ngx.readthedocs.io/en/latest/configuration.html
+# https://docs.paperless-ngx.com/configuration/
 
 # Debug. Only enable this for development.
 
index 97ef0cba7fbdc8351976bea3a2b5c8b0028e3bcd..d53698a2719e931da26a0c31ebeb8793ce436a7e 100755 (executable)
@@ -2,5 +2,5 @@
 
 docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13
 docker run -d -p 6379:6379 redis:latest
-docker run -p 3000:3000 -d gotenberg/gotenberg:7.6
+docker run -p 3000:3000 -d gotenberg/gotenberg:7.6 gotenberg --chromium-disable-javascript=true --chromium-allow-list="file:///tmp/.*"
 docker run -p 9998:9998 -d ghcr.io/paperless-ngx/tika:latest
index 0f5519f843de29ff00195404c9906d556963f160..0f46df9a40280065ec95e7ccd7b41b365de7cbad 100644 (file)
@@ -35,6 +35,16 @@ describe('settings', () => {
             req.reply(response)
           }
         ).as('savedViews')
+
+        cy.intercept('http://localhost:8000/api/mail_accounts/*', {
+          fixture: 'mail_accounts/mail_accounts.json',
+        })
+        cy.intercept('http://localhost:8000/api/mail_rules/*', {
+          fixture: 'mail_rules/mail_rules.json',
+        }).as('mailRules')
+        cy.intercept('http://localhost:8000/api/tasks/', {
+          fixture: 'tasks/tasks.json',
+        })
       })
 
       cy.fixture('documents/documents.json').then((documentsJson) => {
@@ -48,7 +58,6 @@ describe('settings', () => {
 
     cy.viewport(1024, 1600)
     cy.visit('/settings')
-    cy.wait('@savedViews')
   })
 
   it('should activate / deactivate save button when settings change and are saved', () => {
@@ -77,16 +86,16 @@ describe('settings', () => {
   })
 
   it('should remove saved view from sidebar when unset', () => {
-    cy.contains('a', 'Saved views').click()
+    cy.contains('a', 'Saved views').click().wait(2000)
     cy.get('#show_in_sidebar_1').click()
-    cy.contains('button', 'Save').click().wait('@savedViews')
+    cy.contains('button', 'Save').click().wait('@savedViews').wait(2000)
     cy.contains('li', 'Inbox').should('not.exist')
   })
 
   it('should remove saved view from dashboard when unset', () => {
     cy.contains('a', 'Saved views').click()
     cy.get('#show_on_dashboard_1').click()
-    cy.contains('button', 'Save').click().wait('@savedViews')
+    cy.contains('button', 'Save').click().wait('@savedViews').wait(2000)
     cy.visit('/dashboard')
     cy.get('app-saved-view-widget').contains('Inbox').should('not.exist')
   })
index b68de3be1b57c47001b866bc5c216863e03218fa..08c3b36b5b2ffce23f8c8e9cb4661d57d9d3cd68 100644 (file)
@@ -44,6 +44,39 @@ describe('tasks', () => {
       })
   })
 
+  it('should correctly switch between task tabs', () => {
+    cy.get('tbody').find('tr:visible').its('length').should('eq', 10) // double because collapsible result tr
+    cy.wait(500) // stabilizes the test, for some reason...
+    cy.get('app-tasks')
+      .find('a:visible')
+      .contains('Queued')
+      .first()
+      .click()
+      .wait(2000)
+      .then(() => {
+        cy.get('tbody').find('tr:visible').should('not.exist')
+      })
+    cy.get('app-tasks')
+      .find('a:visible')
+      .contains('Started')
+      .first()
+      .click()
+      .wait(2000)
+      .then(() => {
+        cy.get('tbody').find('tr:visible').its('length').should('eq', 2) // double because collapsible result tr
+      })
+    cy.get('app-tasks')
+      .find('a:visible')
+      .contains('Complete')
+      .first()
+      .click()
+      .wait('@tasks')
+      .wait(2000)
+      .then(() => {
+        cy.get('tbody').find('tr:visible').its('length').should('eq', 12) // double because collapsible result tr
+      })
+  })
+
   it('should allow toggling all tasks in list and warn on dismiss', () => {
     cy.get('thead').find('input[type="checkbox"]').first().click()
     cy.get('body').find('button').contains('Dismiss selected').first().click()
diff --git a/src-ui/cypress/fixtures/mail_accounts/mail_accounts.json b/src-ui/cypress/fixtures/mail_accounts/mail_accounts.json
new file mode 100644 (file)
index 0000000..19c45b1
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    "count": 2,
+    "next": null,
+    "previous": null,
+    "results": [
+        {
+            "id": 1,
+            "name": "IMAP Server",
+            "imap_server": "imap.example.com",
+            "imap_port": 993,
+            "imap_security": 2,
+            "username": "inbox@example.com",
+            "password": "pass",
+            "character_set": "UTF-8"
+        },
+        {
+            "id": 2,
+            "name": "Gmail",
+            "imap_server": "imap.gmail.com",
+            "imap_port": 993,
+            "imap_security": 2,
+            "username": "user@gmail.com",
+            "password": "pass",
+            "character_set": "UTF-8"
+        }
+    ]
+}
diff --git a/src-ui/cypress/fixtures/mail_rules/mail_rules.json b/src-ui/cypress/fixtures/mail_rules/mail_rules.json
new file mode 100644 (file)
index 0000000..a2c59c5
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "count": 1,
+    "next": null,
+    "previous": null,
+    "results": [
+        {
+            "id": 1,
+            "name": "Gmail",
+            "account": 2,
+            "folder": "INBOX",
+            "filter_from": null,
+            "filter_subject": "[paperless]",
+            "filter_body": null,
+            "filter_attachment_filename": null,
+            "maximum_age": 30,
+            "action": 3,
+            "action_parameter": null,
+            "assign_title_from": 1,
+            "assign_tags": [
+                9
+            ],
+            "assign_correspondent_from": 1,
+            "assign_correspondent": 2,
+            "assign_document_type": null,
+            "order": 0,
+            "attachment_type": 2
+        }
+    ]
+}
index 003bd900acb9f20be3cfacad465771bb2e63c805..64afcf3dcb69c569759f241046db63fe347c495c 100644 (file)
@@ -1 +1,44 @@
-{"count":3,"next":null,"previous":null,"results":[{"id":1,"name":"Inbox","show_on_dashboard":true,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"18"}]},{"id":2,"name":"Recently Added","show_on_dashboard":true,"show_in_sidebar":false,"sort_field":"created","sort_reverse":true,"filter_rules":[]},{"id":11,"name":"Taxes","show_on_dashboard":false,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"39"}]}]}
+{
+    "count": 3,
+    "next": null,
+    "previous": null,
+    "results": [
+        {
+            "id": 1,
+            "name": "Inbox",
+            "show_on_dashboard": true,
+            "show_in_sidebar": true,
+            "sort_field": "created",
+            "sort_reverse": true,
+            "filter_rules": [
+                {
+                    "rule_type": 6,
+                    "value": "18"
+                }
+            ]
+        },
+        {
+            "id": 2,
+            "name": "Recently Added",
+            "show_on_dashboard": true,
+            "show_in_sidebar": false,
+            "sort_field": "created",
+            "sort_reverse": true,
+            "filter_rules": []
+        },
+        {
+            "id": 11,
+            "name": "Taxes",
+            "show_on_dashboard": false,
+            "show_in_sidebar": true,
+            "sort_field": "created",
+            "sort_reverse": true,
+            "filter_rules": [
+                {
+                    "rule_type": 6,
+                    "value": "39"
+                }
+            ]
+        }
+    ]
+}
index eeccfe4244fd4a29a9afc59e28a1cd219300aef0..25e4d0748c2b1080214f24127df078ee69f99770 100644 (file)
@@ -5,23 +5,11 @@
         "result": "sample 2.pdf: Not consuming sample 2.pdf: It is a duplicate. : Traceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ngx.nosync-udqDZzaE/lib/python3.8/site-packages/django_q/cluster.py\", line 432, in worker\n    res = f(*task[\"args\"], **task[\"kwargs\"])\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/tasks.py\", line 316, in consume_file\n    document = Consumer().try_consume_file(\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 218, in try_consume_file\n    self.pre_check_duplicate()\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 113, in pre_check_duplicate\n    self._fail(\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 84, in _fail\n    raise ConsumerError(f\"{self.filename}: {log_message or message}\")\ndocuments.consumer.ConsumerError: sample 2.pdf: Not consuming sample 2.pdf: It is a duplicate.\n",
         "status": "FAILURE",
         "task_id": "d8ddbe298a42427d82553206ddf0bc94",
-        "name": "sample 2.pdf",
-        "created": "2022-05-26T23:17:38.333474-07:00",
+        "task_file_name": "sample 2.pdf",
+        "date_created": "2022-05-26T23:17:38.333474-07:00",
+        "date_done": null,
         "acknowledged": false,
-        "attempted_task": {
-            "id": "d8ddbe298a42427d82553206ddf0bc94",
-            "name": "sample 2.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtanJxNGs1aHOUhZQu",
-            "kwargs": "gAWVzQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMc2FtcGxlIDIucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDcyMGExYjI5LWI2OTYtNDY3My05Y2ZmLTJkY2ZiZWNmNWViMpSMEG92ZXJyaWRlX2NyZWF0ZWSUTnUu",
-            "result": "gAWVMQQAAAAAAABYKgQAAHNhbXBsZSAyLnBkZjogTm90IGNvbnN1bWluZyBzYW1wbGUgMi5wZGY6IEl0IGlzIGEgZHVwbGljYXRlLiA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3Mtbmd4Lm5vc3luYy11ZHFEWnphRS9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDMyLCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDMxNiwgaW4gY29uc3VtZV9maWxlCiAgICBkb2N1bWVudCA9IENvbnN1bWVyKCkudHJ5X2NvbnN1bWVfZmlsZSgKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDIxOCwgaW4gdHJ5X2NvbnN1bWVfZmlsZQogICAgc2VsZi5wcmVfY2hlY2tfZHVwbGljYXRlKCkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDExMywgaW4gcHJlX2NoZWNrX2R1cGxpY2F0ZQogICAgc2VsZi5fZmFpbCgKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDg0LCBpbiBfZmFpbAogICAgcmFpc2UgQ29uc3VtZXJFcnJvcihmIntzZWxmLmZpbGVuYW1lfToge2xvZ19tZXNzYWdlIG9yIG1lc3NhZ2V9IikKZG9jdW1lbnRzLmNvbnN1bWVyLkNvbnN1bWVyRXJyb3I6IHNhbXBsZSAyLnBkZjogTm90IGNvbnN1bWluZyBzYW1wbGUgMi5wZGY6IEl0IGlzIGEgZHVwbGljYXRlLgqULg==",
-            "group": null,
-            "started": "2022-05-26T23:17:37.702432-07:00",
-            "stopped": "2022-05-26T23:17:38.313306-07:00",
-            "success": false,
-            "attempt_count": 1
-        }
+        "related_document": null
     },
     {
         "id": 132,
         "result": " : Traceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 131, in get_version\n    env=env,\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 68, in run\n    proc = subprocess_run(args, env=env, **kwargs)\n  File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 423, in run\n    with Popen(*popenargs, **kwargs) as process:\n  File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 729, in __init__\n    restore_signals, start_new_session)\n  File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 1364, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\nFileNotFoundError: [Errno 2] No such file or directory: 'unpaper': 'unpaper'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 287, in check_external_program\n    found_version = version_checker()\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_exec/unpaper.py\", line 34, in version\n    return get_version('unpaper')\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 137, in get_version\n    ) from e\nocrmypdf.exceptions.MissingDependencyError: Could not find program 'unpaper' on the PATH\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_tesseract/parsers.py\", line 176, in parse\n    ocrmypdf.ocr(**ocr_args)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/api.py\", line 315, in ocr\n    check_options(options, plugin_manager)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 260, in check_options\n    _check_options(options, plugin_manager, ocr_engine_languages)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 250, in _check_options\n    check_options_preprocessing(options)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 128, in check_options_preprocessing\n    required_for=['--clean, --clean-final'],\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 293, in check_external_program\n    raise MissingDependencyError()\nocrmypdf.exceptions.MissingDependencyError\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 179, in try_consume_file\n    document_parser.parse(self.path, mime_type, self.filename)\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_tesseract/parsers.py\", line 197, in parse\n    raise ParseError(e)\ndocuments.parsers.ParseError\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n    res = f(*task[\"args\"], **task[\"kwargs\"])\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 73, in consume_file\n    override_tag_ids=override_tag_ids)\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 196, in try_consume_file\n    raise ConsumerError(e)\ndocuments.consumer.ConsumerError\n",
         "status": "FAILURE",
         "task_id": "4c554075552c4cc985abd76e6f274c90",
-        "name": "pdf-sample 10.24.48 PM.pdf",
-        "created": "2022-05-26T14:26:07.846365-07:00",
-        "acknowledged": null,
-        "attempted_task": {
-            "id": "4c554075552c4cc985abd76e6f274c90",
-            "name": "pdf-sample 10.24.48 PM.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVKwAAAAAAAACMJS4uL2NvbnN1bWUvcGRmLXNhbXBsZSAxMC4yNC40OCBQTS5wZGaUhZQu",
-            "kwargs": "gAWVGAAAAAAAAAB9lIwQb3ZlcnJpZGVfdGFnX2lkc5ROcy4=",
-            "result": "gAWVzA8AAAAAAABYxQ8AACA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL3N1YnByb2Nlc3MucHkiLCBsaW5lIDEzMSwgaW4gZ2V0X3ZlcnNpb24KICAgIGVudj1lbnYsCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSA2OCwgaW4gcnVuCiAgICBwcm9jID0gc3VicHJvY2Vzc19ydW4oYXJncywgZW52PWVudiwgKiprd2FyZ3MpCiAgRmlsZSAiL1VzZXJzL21vb25lci9vcHQvYW5hY29uZGEzL2VudnMvcGFwZXJsZXNzLW5nL2xpYi9weXRob24zLjYvc3VicHJvY2Vzcy5weSIsIGxpbmUgNDIzLCBpbiBydW4KICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgKiprd2FyZ3MpIGFzIHByb2Nlc3M6CiAgRmlsZSAiL1VzZXJzL21vb25lci9vcHQvYW5hY29uZGEzL2VudnMvcGFwZXJsZXNzLW5nL2xpYi9weXRob24zLjYvc3VicHJvY2Vzcy5weSIsIGxpbmUgNzI5LCBpbiBfX2luaXRfXwogICAgcmVzdG9yZV9zaWduYWxzLCBzdGFydF9uZXdfc2Vzc2lvbikKICBGaWxlICIvVXNlcnMvbW9vbmVyL29wdC9hbmFjb25kYTMvZW52cy9wYXBlcmxlc3MtbmcvbGliL3B5dGhvbjMuNi9zdWJwcm9jZXNzLnB5IiwgbGluZSAxMzY0LCBpbiBfZXhlY3V0ZV9jaGlsZAogICAgcmFpc2UgY2hpbGRfZXhjZXB0aW9uX3R5cGUoZXJybm9fbnVtLCBlcnJfbXNnLCBlcnJfZmlsZW5hbWUpCkZpbGVOb3RGb3VuZEVycm9yOiBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTogJ3VucGFwZXInOiAndW5wYXBlcicKClRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSAyODcsIGluIGNoZWNrX2V4dGVybmFsX3Byb2dyYW0KICAgIGZvdW5kX3ZlcnNpb24gPSB2ZXJzaW9uX2NoZWNrZXIoKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvb2NybXlwZGYvX2V4ZWMvdW5wYXBlci5weSIsIGxpbmUgMzQsIGluIHZlcnNpb24KICAgIHJldHVybiBnZXRfdmVyc2lvbigndW5wYXBlcicpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSAxMzcsIGluIGdldF92ZXJzaW9uCiAgICApIGZyb20gZQpvY3JteXBkZi5leGNlcHRpb25zLk1pc3NpbmdEZXBlbmRlbmN5RXJyb3I6IENvdWxkIG5vdCBmaW5kIHByb2dyYW0gJ3VucGFwZXInIG9uIHRoZSBQQVRICgpEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6CgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvcGFwZXJsZXNzX3Rlc3NlcmFjdC9wYXJzZXJzLnB5IiwgbGluZSAxNzYsIGluIHBhcnNlCiAgICBvY3JteXBkZi5vY3IoKipvY3JfYXJncykKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL2FwaS5weSIsIGxpbmUgMzE1LCBpbiBvY3IKICAgIGNoZWNrX29wdGlvbnMob3B0aW9ucywgcGx1Z2luX21hbmFnZXIpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMjYwLCBpbiBjaGVja19vcHRpb25zCiAgICBfY2hlY2tfb3B0aW9ucyhvcHRpb25zLCBwbHVnaW5fbWFuYWdlciwgb2NyX2VuZ2luZV9sYW5ndWFnZXMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMjUwLCBpbiBfY2hlY2tfb3B0aW9ucwogICAgY2hlY2tfb3B0aW9uc19wcmVwcm9jZXNzaW5nKG9wdGlvbnMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMTI4LCBpbiBjaGVja19vcHRpb25zX3ByZXByb2Nlc3NpbmcKICAgIHJlcXVpcmVkX2Zvcj1bJy0tY2xlYW4sIC0tY2xlYW4tZmluYWwnXSwKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL3N1YnByb2Nlc3MucHkiLCBsaW5lIDI5MywgaW4gY2hlY2tfZXh0ZXJuYWxfcHJvZ3JhbQogICAgcmFpc2UgTWlzc2luZ0RlcGVuZGVuY3lFcnJvcigpCm9jcm15cGRmLmV4Y2VwdGlvbnMuTWlzc2luZ0RlcGVuZGVuY3lFcnJvcgoKRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOgoKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMTc5LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBkb2N1bWVudF9wYXJzZXIucGFyc2Uoc2VsZi5wYXRoLCBtaW1lX3R5cGUsIHNlbGYuZmlsZW5hbWUpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvcGFwZXJsZXNzX3Rlc3NlcmFjdC9wYXJzZXJzLnB5IiwgbGluZSAxOTcsIGluIHBhcnNlCiAgICByYWlzZSBQYXJzZUVycm9yKGUpCmRvY3VtZW50cy5wYXJzZXJzLlBhcnNlRXJyb3IKCkR1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCBhbm90aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZDoKClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL2RqYW5nb19xL2NsdXN0ZXIucHkiLCBsaW5lIDQzNiwgaW4gd29ya2VyCiAgICByZXMgPSBmKCp0YXNrWyJhcmdzIl0sICoqdGFza1sia3dhcmdzIl0pCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL3Rhc2tzLnB5IiwgbGluZSA3MywgaW4gY29uc3VtZV9maWxlCiAgICBvdmVycmlkZV90YWdfaWRzPW92ZXJyaWRlX3RhZ19pZHMpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSAxOTYsIGluIHRyeV9jb25zdW1lX2ZpbGUKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZSkKZG9jdW1lbnRzLmNvbnN1bWVyLkNvbnN1bWVyRXJyb3IKlC4=",
-            "group": null,
-            "started": "2021-01-20T10:47:34.535478-08:00",
-            "stopped": "2021-01-20T10:49:55.568010-08:00",
-            "success": false,
-            "attempt_count": 1
-        }
+        "task_file_name": "pdf-sample 10.24.48 PM.pdf",
+        "date_created": "2022-05-26T14:26:07.846365-07:00",
+        "date_done": null,
+        "acknowledged": null
     },
     {
         "id": 115,
         "result": "2021-01-24 2021-01-20 sample_wide_orange.pdf: Document is a duplicate : Traceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n    res = f(*task[\"args\"], **task[\"kwargs\"])\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 75, in consume_file\n    task_id=task_id\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 168, in try_consume_file\n    self.pre_check_duplicate()\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 85, in pre_check_duplicate\n    self._fail(\"Document is a duplicate\")\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 53, in _fail\n    raise ConsumerError(f\"{self.filename}: {message}\")\ndocuments.consumer.ConsumerError: 2021-01-24 2021-01-20 sample_wide_orange.pdf: Document is a duplicate\n",
         "status": "FAILURE",
         "task_id": "86494713646a4364b01da17aadca071d",
-        "name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
-        "created": "2022-05-26T14:26:07.817608-07:00",
-        "acknowledged": null,
-        "attempted_task": {
-            "id": "86494713646a4364b01da17aadca071d",
-            "name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtcTJ6NDlnbzaUhZQu",
-            "kwargs": "gAWV2QAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwsMjAyMS0wMS0yNCAyMDIxLTAxLTIwIHNhbXBsZV93aWRlX29yYW5nZS5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkN2MwZTY1MmQtZDhkYy00OWU4LWI1ZmUtOGM3ZTkyZDlmOTI0lHUu",
-            "result": "gAWV/AMAAAAAAABY9QMAADIwMjEtMDEtMjQgMjAyMS0wMS0yMCBzYW1wbGVfd2lkZV9vcmFuZ2UucGRmOiBEb2N1bWVudCBpcyBhIGR1cGxpY2F0ZSA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL2RqYW5nb19xL2NsdXN0ZXIucHkiLCBsaW5lIDQzNiwgaW4gd29ya2VyCiAgICByZXMgPSBmKCp0YXNrWyJhcmdzIl0sICoqdGFza1sia3dhcmdzIl0pCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL3Rhc2tzLnB5IiwgbGluZSA3NSwgaW4gY29uc3VtZV9maWxlCiAgICB0YXNrX2lkPXRhc2tfaWQKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDE2OCwgaW4gdHJ5X2NvbnN1bWVfZmlsZQogICAgc2VsZi5wcmVfY2hlY2tfZHVwbGljYXRlKCkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDg1LCBpbiBwcmVfY2hlY2tfZHVwbGljYXRlCiAgICBzZWxmLl9mYWlsKCJEb2N1bWVudCBpcyBhIGR1cGxpY2F0ZSIpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSA1MywgaW4gX2ZhaWwKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZiJ7c2VsZi5maWxlbmFtZX06IHttZXNzYWdlfSIpCmRvY3VtZW50cy5jb25zdW1lci5Db25zdW1lckVycm9yOiAyMDIxLTAxLTI0IDIwMjEtMDEtMjAgc2FtcGxlX3dpZGVfb3JhbmdlLnBkZjogRG9jdW1lbnQgaXMgYSBkdXBsaWNhdGUKlC4=",
-            "group": null,
-            "started": "2021-01-26T00:21:05.379583-08:00",
-            "stopped": "2021-01-26T00:21:06.449626-08:00",
-            "success": false,
-            "attempt_count": 1
-        }
+        "task_file_name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
+        "date_created": "2022-05-26T14:26:07.817608-07:00",
+        "date_done": null,
+        "acknowledged": null
     },
     {
         "id": 85,
         "result": "cannot open resource : Traceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n    res = f(*task[\"args\"], **task[\"kwargs\"])\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 81, in consume_file\n    task_id=task_id\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 244, in try_consume_file\n    self.path, mime_type, self.filename)\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/parsers.py\", line 302, in get_optimised_thumbnail\n    thumbnail = self.get_thumbnail(document_path, mime_type, file_name)\n  File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_text/parsers.py\", line 29, in get_thumbnail\n    layout_engine=ImageFont.LAYOUT_BASIC)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 852, in truetype\n    return freetype(font)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 849, in freetype\n    return FreeTypeFont(font, size, index, encoding, layout_engine)\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 210, in __init__\n    font, size, index, encoding, layout_engine=layout_engine\nOSError: cannot open resource\n",
         "status": "FAILURE",
         "task_id": "abca803fa46342e1ac81f3d3f2080e79",
-        "name": "simple.txt",
-        "created": "2022-05-26T14:26:07.771541-07:00",
-        "acknowledged": null,
-        "attempted_task": {
-            "id": "abca803fa46342e1ac81f3d3f2080e79",
-            "name": "simple.txt",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtd2RhbnB5NnGUhZQu",
-            "kwargs": "gAWVtwAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwKc2ltcGxlLnR4dJSMDm92ZXJyaWRlX3RpdGxllE6MGW92ZXJyaWRlX2NvcnJlc3BvbmRlbnRfaWSUTowZb3ZlcnJpZGVfZG9jdW1lbnRfdHlwZV9pZJROjBBvdmVycmlkZV90YWdfaWRzlE6MB3Rhc2tfaWSUjCQ3ZGE0OTU4ZC0zM2UwLTQ1OGMtYTE0ZC1kMmU0NmE0NWY4Y2SUdS4=",
-            "result": "gAWV5QUAAAAAAABY3gUAAGNhbm5vdCBvcGVuIHJlc291cmNlIDogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDM2LCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDgxLCBpbiBjb25zdW1lX2ZpbGUKICAgIHRhc2tfaWQ9dGFza19pZAogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMjQ0LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBzZWxmLnBhdGgsIG1pbWVfdHlwZSwgc2VsZi5maWxlbmFtZSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvcGFyc2Vycy5weSIsIGxpbmUgMzAyLCBpbiBnZXRfb3B0aW1pc2VkX3RodW1ibmFpbAogICAgdGh1bWJuYWlsID0gc2VsZi5nZXRfdGh1bWJuYWlsKGRvY3VtZW50X3BhdGgsIG1pbWVfdHlwZSwgZmlsZV9uYW1lKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL3BhcGVybGVzc190ZXh0L3BhcnNlcnMucHkiLCBsaW5lIDI5LCBpbiBnZXRfdGh1bWJuYWlsCiAgICBsYXlvdXRfZW5naW5lPUltYWdlRm9udC5MQVlPVVRfQkFTSUMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9QSUwvSW1hZ2VGb250LnB5IiwgbGluZSA4NTIsIGluIHRydWV0eXBlCiAgICByZXR1cm4gZnJlZXR5cGUoZm9udCkKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL1BJTC9JbWFnZUZvbnQucHkiLCBsaW5lIDg0OSwgaW4gZnJlZXR5cGUKICAgIHJldHVybiBGcmVlVHlwZUZvbnQoZm9udCwgc2l6ZSwgaW5kZXgsIGVuY29kaW5nLCBsYXlvdXRfZW5naW5lKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvUElML0ltYWdlRm9udC5weSIsIGxpbmUgMjEwLCBpbiBfX2luaXRfXwogICAgZm9udCwgc2l6ZSwgaW5kZXgsIGVuY29kaW5nLCBsYXlvdXRfZW5naW5lPWxheW91dF9lbmdpbmUKT1NFcnJvcjogY2Fubm90IG9wZW4gcmVzb3VyY2UKlC4=",
-            "group": null,
-            "started": "2021-03-06T14:23:56.974715-08:00",
-            "stopped": "2021-03-06T14:24:28.011772-08:00",
-            "success": false,
-            "attempt_count": 1
-        }
+        "task_file_name": "simple.txt",
+        "date_created": "2022-05-26T14:26:07.771541-07:00",
+        "date_done": null,
+        "acknowledged": null
     },
     {
         "id": 41,
         "result": "commands.txt: Not consuming commands.txt: It is a duplicate. : Traceback (most recent call last):\n  File \"/Users/admin/.local/share/virtualenvs/paperless-ngx.nosync-udqDZzaE/lib/python3.8/site-packages/django_q/cluster.py\", line 432, in worker\n    res = f(*task[\"args\"], **task[\"kwargs\"])\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/tasks.py\", line 70, in consume_file\n    document = Consumer().try_consume_file(\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 199, in try_consume_file\n    self.pre_check_duplicate()\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 97, in pre_check_duplicate\n    self._fail(\n  File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 69, in _fail\n    raise ConsumerError(f\"{self.filename}: {log_message or message}\")\ndocuments.consumer.ConsumerError: commands.txt: Not consuming commands.txt: It is a duplicate.\n",
         "status": "FAILURE",
         "task_id": "0af67672e8e14404b060d4cf8f69313d",
-        "name": "commands.txt",
-        "created": "2022-05-26T14:26:07.704247-07:00",
-        "acknowledged": null,
-        "attempted_task": {
-            "id": "0af67672e8e14404b060d4cf8f69313d",
-            "name": "commands.txt",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtZ3h4YjNxODaUhZQu",
-            "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMY29tbWFuZHMudHh0lIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDRkMjhmMmJiLTJkMzAtNGQzNi1iNjM5LWU2YzQ5OTU3OGVlY5R1Lg==",
-            "result": "gAWVLwQAAAAAAABYKAQAAGNvbW1hbmRzLnR4dDogTm90IGNvbnN1bWluZyBjb21tYW5kcy50eHQ6IEl0IGlzIGEgZHVwbGljYXRlLiA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3Mtbmd4Lm5vc3luYy11ZHFEWnphRS9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDMyLCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDcwLCBpbiBjb25zdW1lX2ZpbGUKICAgIGRvY3VtZW50ID0gQ29uc3VtZXIoKS50cnlfY29uc3VtZV9maWxlKAogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvRGV2Lm5vc3luYy9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZ3gvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMTk5LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBzZWxmLnByZV9jaGVja19kdXBsaWNhdGUoKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvRGV2Lm5vc3luYy9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZ3gvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgOTcsIGluIHByZV9jaGVja19kdXBsaWNhdGUKICAgIHNlbGYuX2ZhaWwoCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9EZXYubm9zeW5jL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5neC9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSA2OSwgaW4gX2ZhaWwKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZiJ7c2VsZi5maWxlbmFtZX06IHtsb2dfbWVzc2FnZSBvciBtZXNzYWdlfSIpCmRvY3VtZW50cy5jb25zdW1lci5Db25zdW1lckVycm9yOiBjb21tYW5kcy50eHQ6IE5vdCBjb25zdW1pbmcgY29tbWFuZHMudHh0OiBJdCBpcyBhIGR1cGxpY2F0ZS4KlC4=",
-            "group": null,
-            "started": "2022-03-10T22:26:32.548772-08:00",
-            "stopped": "2022-03-10T22:26:32.879916-08:00",
-            "success": false,
-            "attempt_count": 1
-        }
+        "task_file_name": "commands.txt",
+        "date_created": "2022-05-26T14:26:07.704247-07:00",
+        "date_done": null,
+        "acknowledged": null
     },
     {
         "id": 10,
         "result": "Success. New document id 260 created",
         "status": "SUCCESS",
         "task_id": "b7629a0f41bd40c7a3ea4680341321b5",
-        "name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
-        "created": "2022-05-26T14:26:07.670577-07:00",
+        "task_file_name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
+        "date_created": "2022-05-26T14:26:07.670577-07:00",
+        "date_done": "2022-05-26T14:26:07.670577-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "b7629a0f41bd40c7a3ea4680341321b5",
-            "name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtc25mOW11ZW+UhZQu",
-            "kwargs": "gAWV3AAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwvMjAyMi0wMy0yNCtTb25zdGlnZStTY2FuUEMyMDIyLTAzLTI0XzA4MTA1OC5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkNTdmMmQwMGItY2Q0Ny00YzQ3LTlmOTctODFlOTllMTJhMjMylHUu",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjAgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-03-24T08:19:32.117861-07:00",
-            "stopped": "2022-03-24T08:20:10.239201-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 260
     },
     {
         "id": 9,
         "result": "Success. New document id 261 created",
         "status": "SUCCESS",
         "task_id": "02e276a86a424ccfb83309df5d8594be",
-        "name": "2sample-pdf-with-images.pdf",
-        "created": "2022-05-26T14:26:07.668987-07:00",
+        "task_file_name": "2sample-pdf-with-images.pdf",
+        "date_created": "2022-05-26T14:26:07.668987-07:00",
+        "date_done": "2022-05-26T14:26:07.668987-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "02e276a86a424ccfb83309df5d8594be",
-            "name": "2sample-pdf-with-images.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtaXJ3cjZzOGeUhZQu",
-            "kwargs": "gAWVyAAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwbMnNhbXBsZS1wZGYtd2l0aC1pbWFnZXMucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDFlYTczMjhhLTk3MjctNDJiMC1iMTEyLTAzZjU3MzQ2MmRiNpR1Lg==",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjEgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-03-28T23:12:41.286318-07:00",
-            "stopped": "2022-03-28T23:13:00.523505-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 261
     },
     {
         "id": 8,
         "result": "Success. New document id 262 created",
         "status": "SUCCESS",
         "task_id": "41229b8be9b445c0a523697d0f58f13e",
-        "name": "2sample-pdf-with-images_pw.pdf",
-        "created": "2022-05-26T14:26:07.667993-07:00",
+        "task_file_name": "2sample-pdf-with-images_pw.pdf",
+        "date_created": "2022-05-26T14:26:07.667993-07:00",
+        "date_done": "2022-05-26T14:26:07.667993-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "41229b8be9b445c0a523697d0f58f13e",
-            "name": "2sample-pdf-with-images_pw.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtN2tfejA0MTGUhZQu",
-            "kwargs": "gAWVywAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIweMnNhbXBsZS1wZGYtd2l0aC1pbWFnZXNfcHcucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDk5YTgyOTc3LWU1MWUtNGJjYS04MjM4LTNkNzdhZTJhNjZmYZR1Lg==",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjIgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-03-28T23:43:53.171963-07:00",
-            "stopped": "2022-03-28T23:43:56.965257-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 262
     },
     {
         "id": 6,
         "result": "Success. New document id 264 created",
         "status": "SUCCESS",
         "task_id": "bbbca32d408c4619bd0b512a8327c773",
-        "name": "homebridge.log",
-        "created": "2022-05-26T14:26:07.665560-07:00",
+        "task_file_name": "homebridge.log",
+        "date_created": "2022-05-26T14:26:07.665560-07:00",
+        "date_done": "2022-05-26T14:26:07.665560-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "bbbca32d408c4619bd0b512a8327c773",
-            "name": "homebridge.log",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQteGo4aW9zYXaUhZQu",
-            "kwargs": "gAWVuwAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwOaG9tZWJyaWRnZS5sb2eUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkNzY0NzdhNWEtNzk0Ni00NWU0LWE3MDktNzQzNDg0ZDE2YTUxlHUu",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjQgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-03-29T22:56:16.053026-07:00",
-            "stopped": "2022-03-29T22:56:21.196179-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 264
     },
     {
         "id": 5,
         "result": "Success. New document id 265 created",
         "status": "SUCCESS",
         "task_id": "00ab285ab4bf482ab30c7d580b252ecb",
-        "name": "IMG_7459.PNG",
-        "created": "2022-05-26T14:26:07.664506-07:00",
+        "task_file_name": "IMG_7459.PNG",
+        "date_created": "2022-05-26T14:26:07.664506-07:00",
+        "date_done": "2022-05-26T14:26:07.664506-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "00ab285ab4bf482ab30c7d580b252ecb",
-            "name": "IMG_7459.PNG",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtOGF5NDNfZjeUhZQu",
-            "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMSU1HXzc0NTkuUE5HlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDYxMTNhNzRlLTAwOWMtNGJhYi1hMjk1LTFmNjMwMzZmMTc4ZpR1Lg==",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjUgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-04-05T13:19:47.490282-07:00",
-            "stopped": "2022-04-05T13:21:36.782264-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 265
     },
     {
         "id": 3,
         "result": "Success. New document id 267 created",
         "status": "SUCCESS",
         "task_id": "289c5163cfec410db42948a0cacbeb9c",
-        "name": "IMG_7459.PNG",
-        "created": "2022-05-26T14:26:07.659661-07:00",
+        "task_file_name": "IMG_7459.PNG",
+        "date_created": "2022-05-26T14:26:07.659661-07:00",
+        "date_done": "2022-05-26T14:26:07.659661-07:00",
         "acknowledged": false,
-        "attempted_task": {
-            "id": "289c5163cfec410db42948a0cacbeb9c",
-            "name": "IMG_7459.PNG",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtNzRuY2p2aXGUhZQu",
-            "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMSU1HXzc0NTkuUE5HlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJGZjZDljMmFlLWFhZmEtNGJmMC05M2Y5LWE3ZGQxYmEzYWM1NZR1Lg==",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjcgY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-04-05T13:29:59.264441-07:00",
-            "stopped": "2022-04-05T13:30:28.336185-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": 267
     },
     {
         "id": 1,
         "type": "file",
-        "result": "Success. New document id 268 created",
-        "status": "SUCCESS",
+        "result": null,
+        "status": "STARTED",
         "task_id": "7a4ebdb2bde04311935284027ef8ca65",
-        "name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
-        "created": "2022-05-26T14:26:07.655276-07:00",
+        "task_file_name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
+        "date_created": "2022-05-26T14:26:07.655276-07:00",
+        "date_done": null,
         "acknowledged": false,
-        "attempted_task": {
-            "id": "7a4ebdb2bde04311935284027ef8ca65",
-            "name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
-            "func": "documents.tasks.consume_file",
-            "hook": null,
-            "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtdXpscHl2NnmUhZQu",
-            "kwargs": "gAWV1gAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwpMjAxOS0wOC0wNCBEU0EgUXVlc3Rpb25uYWlyZSAtIDUtOC0xOS5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkY2Q3YzBhZjgtN2Q4Ni00OGM0LTliNjgtNDQwMmQ4ZDZlOTNmlHUu",
-            "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjggY3JlYXRlZJQu",
-            "group": null,
-            "started": "2022-04-28T21:01:04.275850-07:00",
-            "stopped": "2022-04-28T21:01:10.136884-07:00",
-            "success": true,
-            "attempt_count": 1
-        }
+        "related_document": null
     }
 ]
index 98ef8c9680f48e60fc448dca909d2a40f9b2988e..da0fb042cc9ef1057f097b7984ba042f7585487b 100644 (file)
@@ -6,16 +6,14 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.
-   *
-   * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.carousel.next" datatype="html">
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.datepicker.select-month" datatype="html">
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.datepicker.select-year" datatype="html">
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.datepicker.previous-month" datatype="html">
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.datepicker.next-month" datatype="html">
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.first" datatype="html">
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.previous" datatype="html">
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.next" datatype="html">
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.last" datatype="html">
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.first-aria" datatype="html">
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.previous-aria" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.next-aria" datatype="html">
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.pagination.last-aria" datatype="html">
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
-        <source><x id="INTERPOLATION" equiv-text="* The maxim"/></source>
+        <source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.hours" datatype="html">
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.MM" datatype="html">
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.minutes" datatype="html">
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.increment-hours" datatype="html">
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.SS" datatype="html">
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.seconds" datatype="html">
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.increment-seconds" datatype="html">
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.decrement-seconds" datatype="html">
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.PM" datatype="html">
         <source><x id="INTERPOLATION"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         <source><x id="INTERPOLATION"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7103632680753685326" datatype="html">
           <context context-type="linenumber">114</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
       </trans-unit>
       <trans-unit id="9075755296812854717" datatype="html">
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7495498057594070122" datatype="html">
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1334220418719920556" datatype="html">
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5427326625898532358" datatype="html">
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2804886236408698479" datatype="html">
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4680387114119209483" datatype="html">
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="8625288184670954104" datatype="html">
-        <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">185</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="7643249460591212914" datatype="html">
-        <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
+      <trans-unit id="8116994662047019809" datatype="html">
+        <source>Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">194</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7172877665285340082" datatype="html">
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">203</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7354947513482088740" datatype="html">
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">205</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4270528545616947218" datatype="html">
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">207</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5749300816154614125" datatype="html">
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">256</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2173456130768795374" datatype="html">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">189</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6988090220128974198" datatype="html">
           <context context-type="linenumber">1</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="5041354590769758251" datatype="html">
-        <source>Admin</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">178</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">181</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="314315645942131479" datatype="html">
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">187</context>
+          <context context-type="linenumber">180</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">191</context>
+          <context context-type="linenumber">184</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">187</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1534029177398918729" datatype="html">
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">192</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">195</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5612903193691847840" datatype="html">
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">204</context>
+          <context context-type="linenumber">197</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">208</context>
+          <context context-type="linenumber">201</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4112664765954374539" datatype="html">
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">217</context>
+          <context context-type="linenumber">210</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1175891574282637937" datatype="html">
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">217</context>
+          <context context-type="linenumber">210</context>
         </context-group>
       </trans-unit>
       <trans-unit id="9811291095862612" datatype="html">
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">221</context>
+          <context context-type="linenumber">214</context>
         </context-group>
       </trans-unit>
       <trans-unit id="894819944961861800" datatype="html">
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">228,230</context>
+          <context context-type="linenumber">221,223</context>
         </context-group>
       </trans-unit>
       <trans-unit id="509090351011426949" datatype="html">
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">239</context>
+          <context context-type="linenumber">232</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3011185103048412841" datatype="html">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">326</context>
+          <context context-type="linenumber">476</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2526035785704676448" datatype="html">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
           <context context-type="linenumber">9</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">191</context>
+          <context context-type="linenumber">196</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">248</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">283</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
           <context context-type="linenumber">16</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">21</context>
           <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
           <context context-type="linenumber">17</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">36</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">223</context>
+          <context context-type="linenumber">317</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6457471243969293847" datatype="html">
         <source>Create new correspondent</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="linenumber">20</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2059822531169388684" datatype="html">
         <source>Edit correspondent</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="linenumber">24</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6672809941092516947" datatype="html">
         <source>Create new document type</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="linenumber">20</context>
         </context-group>
       </trans-unit>
       <trans-unit id="36335016091244220" datatype="html">
         <source>Edit document type</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="linenumber">24</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4561076822163447092" datatype="html">
         <source>Create new item</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
-          <context context-type="linenumber">52</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5324147361912094446" datatype="html">
         <source>Edit item</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
-          <context context-type="linenumber">56</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1699589597032579396" datatype="html">
         <source>Could not save element: <x id="PH" equiv-text="error"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">57</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1505107477868159986" datatype="html">
+        <source>IMAP Server</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6575044156016560168" datatype="html">
+        <source>IMAP Port</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5418425343712813426" datatype="html">
+        <source>IMAP Security</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5248717555542428023" datatype="html">
+        <source>Username</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1431416938026210429" datatype="html">
+        <source>Password</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6124167940736826613" datatype="html">
+        <source>Character Set</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="8758081884575368561" datatype="html">
+        <source>Create new mail account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5559445021532852612" datatype="html">
+        <source>Edit mail account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="451418349275958054" datatype="html">
+        <source>No encryption</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3719080555538542367" datatype="html">
+        <source>SSL</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2620794666957669114" datatype="html">
+        <source>STARTTLS</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4086606389696938932" datatype="html">
+        <source>Account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">284</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="7046259383943324039" datatype="html">
+        <source>Folder</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1391527525114848695" datatype="html">
+        <source>Subfolders must be separated by a delimiter, often a dot (&apos;.&apos;) or slash (&apos;/&apos;), but it varies by mail server.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="101686279614365671" datatype="html">
+        <source>Maximum age (days)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="7093509971705471817" datatype="html">
+        <source>Attachment type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5488632521862493221" datatype="html">
+        <source>Paperless will only process mails that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> of the filters specified below.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6925928412364847639" datatype="html">
+        <source>Filter from</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="8497813481090627874" datatype="html">
+        <source>Filter subject</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="7314357616097563149" datatype="html">
+        <source>Filter body</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5031687746498952417" datatype="html">
+        <source>Filter attachment filename</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4245210767172267486" datatype="html">
+        <source>Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="9216117865911519658" datatype="html">
+        <source>Action</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4274038999388817994" datatype="html">
+        <source>Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1261794314435932203" datatype="html">
+        <source>Action parameter</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6093797930511670257" datatype="html">
+        <source>Assign title from</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6695990587380209737" datatype="html">
+        <source>Assign document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4754802869258527587" datatype="html">
+        <source>Assign correspondent from</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4875491778188965469" datatype="html">
+        <source>Assign correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3147349817770432927" datatype="html">
+        <source>Create new mail rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">57</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3374331029704382439" datatype="html">
+        <source>Edit mail rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">61</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6233529027580744166" datatype="html">
+        <source>Only process attachments.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">98</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3860563069570088911" datatype="html">
+        <source>Process all files, including &apos;inline&apos; attachments.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">102</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="7022070615528435141" datatype="html">
+        <source>Delete</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">111</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">97</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">181</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">214</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">261</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">296</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2784260611081866636" datatype="html">
+        <source>Move to specified folder</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">115</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4593278936733161020" datatype="html">
+        <source>Mark as read, don&apos;t process read mails</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2378921144019636516" datatype="html">
+        <source>Flag the mail, don&apos;t process flagged mails</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">123</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6457024618858980302" datatype="html">
+        <source>Tag the mail with specified tag, don&apos;t process tagged mails</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">127</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4673329664686432878" datatype="html">
+        <source>Use subject as title</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">136</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="8645471396972938185" datatype="html">
+        <source>Use attachment filename as title</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">140</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1568902914205618549" datatype="html">
+        <source>Do not assign a correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">149</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3567746385454588269" datatype="html">
+        <source>Use mail address</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">153</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="445154175758965852" datatype="html">
+        <source>Use name (or mail address if not available)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">157</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1258862217749148424" datatype="html">
+        <source>Use correspondent selected below</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+          <context context-type="linenumber">161</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         <source>e.g.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
-          <context context-type="linenumber">26</context>
+          <context context-type="linenumber">21</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1918584360573970155" datatype="html">
         <source>or use slashes to add directories e.g.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">23</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
-          <context context-type="linenumber">35</context>
+          <context context-type="linenumber">30</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3754859110054016570" datatype="html">
         <source>Edit storage path</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
-          <context context-type="linenumber">39</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="9011959596901584887" datatype="html">
         <source>Create new tag</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
-          <context context-type="linenumber">26</context>
+          <context context-type="linenumber">21</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5872175735754226507" datatype="html">
         <source>Edit tag</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1616102757855967475" datatype="html">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
           <context context-type="linenumber">93</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">222</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">308</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
       <trans-unit id="4025397324401332794" datatype="html">
         <source> Please enter a comment. </source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
-          <context context-type="linenumber">5,7</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="2337485514607640701" datatype="html">
-        <source>Add comment</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="5438997040668245251" datatype="html">
-        <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
-          <context context-type="linenumber">68</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="7593210124183303626" datatype="html">
-        <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
-          <context context-type="linenumber">83</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="1407560924967345762" datatype="html">
-        <source>Page</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">3</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
-          <context context-type="linenumber">15</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="2266163016683537825" datatype="html">
-        <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">5</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="7022070615528435141" datatype="html">
-        <source>Delete</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
-          <context context-type="linenumber">97</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">46</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">46</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">46</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+          <context context-type="linenumber">5,7</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="2337485514607640701" datatype="html">
+        <source>Add comment</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">65</context>
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+          <context context-type="linenumber">11</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="5438997040668245251" datatype="html">
+        <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">65</context>
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+          <context context-type="linenumber">68</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="7593210124183303626" datatype="html">
+        <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">65</context>
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+          <context context-type="linenumber">83</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="1407560924967345762" datatype="html">
+        <source>Page</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
-          <context context-type="linenumber">65</context>
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">3</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">15</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="2266163016683537825" datatype="html">
+        <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">209</context>
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">5</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3099741642167775297" datatype="html">
           <context context-type="linenumber">50</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">154</context>
+          <context context-type="linenumber">159</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3823219296477075982" datatype="html">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
-          <context context-type="linenumber">153</context>
+          <context context-type="linenumber">177</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5382975254277698192" datatype="html">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
           <context context-type="linenumber">389</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">560</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">619</context>
+        </context-group>
       </trans-unit>
       <trans-unit id="1181910457994920507" datatype="html">
         <source>Proceed</source>
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
           <context context-type="linenumber">391</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">562</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">621</context>
+        </context-group>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">208</context>
+          <context context-type="linenumber">213</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">250</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">285</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
           <context context-type="linenumber">59</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">260</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">295</context>
+        </context-group>
       </trans-unit>
       <trans-unit id="2509141182388535183" datatype="html">
         <source>View</source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4104807402967139762" datatype="html">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6965614903949668392" datatype="html">
           <context context-type="linenumber">39</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="211408744872436427" datatype="html">
+        <source>Successfully created <x id="PH" equiv-text="this.typeName"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">127</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6328828522970676938" datatype="html">
+        <source>Error occurred while creating <x id="PH" equiv-text="this.typeName"/> : <x id="PH_1" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">132,134</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2541368547549828690" datatype="html">
+        <source>Successfully updated <x id="PH" equiv-text="this.typeName"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">150</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6151710751857751783" datatype="html">
+        <source>Error occurred while saving <x id="PH" equiv-text="this.typeName"/> : <x id="PH_1" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">155,157</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="4012132330507560812" datatype="html">
         <source>Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">164</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8371896857609524947" datatype="html">
         <source>Associated documents will not be deleted.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">179</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5467489005440577210" datatype="html">
             )"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
-          <context context-type="linenumber">168,170</context>
+          <context context-type="linenumber">192,194</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1685061484835793745" datatype="html">
           <context context-type="linenumber">2</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="4798013226763881638" datatype="html">
+        <source>Open Django Admin</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="6439365426343089851" datatype="html">
         <source>General</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="linenumber">15</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8671234314555525900" datatype="html">
         <source>Appearance</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">13</context>
+          <context context-type="linenumber">18</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3777637051272512093" datatype="html">
         <source>Display language</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="linenumber">22</context>
         </context-group>
       </trans-unit>
       <trans-unit id="53523152145406584" datatype="html">
         <source>You need to reload the page after applying a new language.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="linenumber">30</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3766032098416558788" datatype="html">
         <source>Date display</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">32</context>
+          <context context-type="linenumber">37</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3733378544613473393" datatype="html">
         <source>Date format</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3407788781115661841" datatype="html">
         <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;shortDate&apos;:null:computedDateLocale}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">56</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6290748171049664628" datatype="html">
         <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;mediumDate&apos;:null:computedDateLocale}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">55</context>
+          <context context-type="linenumber">60</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7189855711197998347" datatype="html">
         <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;longDate&apos;:null:computedDateLocale}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">59</context>
+          <context context-type="linenumber">64</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8939587804990976924" datatype="html">
         <source>Items per page</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8028535997917730106" datatype="html">
         <source>Document editor</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">83</context>
+          <context context-type="linenumber">88</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6708098108196142028" datatype="html">
         <source>Use PDF viewer provided by the browser</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="linenumber">92</context>
         </context-group>
       </trans-unit>
       <trans-unit id="9003921625412907981" datatype="html">
         <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="linenumber">92</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3982403428275430291" datatype="html">
         <source>Sidebar</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4608457133854405683" datatype="html">
         <source>Use &apos;slim&apos; sidebar (icons only)</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">98</context>
+          <context context-type="linenumber">103</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1356890996281769972" datatype="html">
         <source>Dark mode</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">105</context>
+          <context context-type="linenumber">110</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4913823100518391922" datatype="html">
         <source>Use system settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">108</context>
+          <context context-type="linenumber">113</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5782828784040423650" datatype="html">
         <source>Enable dark mode</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">109</context>
+          <context context-type="linenumber">114</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6336642923114460405" datatype="html">
         <source>Invert thumbnails in dark mode</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7983234071833154796" datatype="html">
         <source>Theme Color</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">116</context>
+          <context context-type="linenumber">121</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7808756054397155068" datatype="html">
         <source>Reset</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">125</context>
+          <context context-type="linenumber">130</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8901931207592071833" datatype="html">
         <source>Update checking</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7890007688616707209" datatype="html">
         <source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Actual updating of the app must still be performed manually. </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">134,137</context>
+          <context context-type="linenumber">139,142</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5489945693955857309" datatype="html">
         <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">139</context>
+          <context context-type="linenumber">144</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5070799004079086984" datatype="html">
         <source>Enable update checking</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">141</context>
+          <context context-type="linenumber">146</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5478370193831195440" datatype="html">
         <source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be &apos;ahead&apos; of the current third-party release.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">141</context>
+          <context context-type="linenumber">146</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8508424367627989968" datatype="html">
         <source>Bulk editing</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">145</context>
+          <context context-type="linenumber">150</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8158899674926420054" datatype="html">
         <source>Show confirmation dialogs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">149</context>
+          <context context-type="linenumber">154</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6906812245033969309" datatype="html">
         <source>Deleting documents will always ask for confirmation.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">149</context>
+          <context context-type="linenumber">154</context>
         </context-group>
       </trans-unit>
       <trans-unit id="290238406234356122" datatype="html">
         <source>Apply on close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">150</context>
+          <context context-type="linenumber">155</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4666858503087488647" datatype="html">
         <source>Enable comments</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">158</context>
+          <context context-type="linenumber">163</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5851560788527570644" datatype="html">
         <source>Notifications</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8545554728558600606" datatype="html">
         <source>Document processing</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3656786776644872398" datatype="html">
         <source>Show notifications when new documents are detected</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6057053428592387613" datatype="html">
         <source>Show notifications when document processing completes successfully</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">174</context>
+          <context context-type="linenumber">179</context>
         </context-group>
       </trans-unit>
       <trans-unit id="370315664367425513" datatype="html">
         <source>Show notifications when document processing fails</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">180</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6838309441164918531" datatype="html">
         <source>Suppress notifications on dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2741919327232918179" datatype="html">
         <source>This will suppress all messages about document processing status on the dashboard.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6925788033494878061" datatype="html">
         <source>Appears on</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">196</context>
+          <context context-type="linenumber">201</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7877440816920439876" datatype="html">
         <source>No saved views defined.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
-          <context context-type="linenumber">213</context>
+          <context context-type="linenumber">218</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1292737233370901804" datatype="html">
+        <source>Mail</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">231</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="8913167930428886792" datatype="html">
+        <source>Mail accounts</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">236</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1259421956660976189" datatype="html">
+        <source>Add Account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">241</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2188854519574316630" datatype="html">
+        <source>Server</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">249</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6235247415162820954" datatype="html">
+        <source>No mail accounts defined.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">267</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5364020217520256833" datatype="html">
+        <source>Mail rules</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">271</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="1372022816709469401" datatype="html">
+        <source>Add Rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">276</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6751234988479444294" datatype="html">
+        <source>No mail rules defined.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">302</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5610279464668232148" datatype="html">
         <source>Saved view &quot;<x id="PH" equiv-text="savedView.name"/>&quot; deleted.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">217</context>
+          <context context-type="linenumber">367</context>
         </context-group>
       </trans-unit>
       <trans-unit id="3891152409365583719" datatype="html">
         <source>Settings saved</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">310</context>
+          <context context-type="linenumber">460</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7217000812750597833" datatype="html">
         <source>Settings were saved successfully.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">311</context>
+          <context context-type="linenumber">461</context>
         </context-group>
       </trans-unit>
       <trans-unit id="525012668859298131" datatype="html">
         <source>Settings were saved successfully. Reload is required to apply some changes.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">315</context>
+          <context context-type="linenumber">465</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8491974984518503778" datatype="html">
         <source>Reload now</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">316</context>
+          <context context-type="linenumber">466</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6839066544204061364" datatype="html">
         <source>Use system language</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">334</context>
+          <context context-type="linenumber">484</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7729897675462249787" datatype="html">
         <source>Use date format of display language</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">341</context>
+          <context context-type="linenumber">491</context>
         </context-group>
       </trans-unit>
       <trans-unit id="8488620293789898901" datatype="html">
             )"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
-          <context context-type="linenumber">361,363</context>
+          <context context-type="linenumber">511,513</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6327501535846658797" datatype="html">
+        <source>Saved account &quot;<x id="PH" equiv-text="newMailAccount.name"/>&quot;.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">538</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6428427497555765743" datatype="html">
+        <source>Error saving account: <x id="PH" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">548</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5641934153807844674" datatype="html">
+        <source>Confirm delete mail account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">558</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="2105352414355663637" datatype="html">
+        <source>This operation will permanently this mail account.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">559</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4233826387148482123" datatype="html">
+        <source>Deleted mail account</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">568</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="7443801450153832973" datatype="html">
+        <source>Error deleting mail account: <x id="PH" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">577</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="123368655395433699" datatype="html">
+        <source>Saved rule &quot;<x id="PH" equiv-text="newMailRule.name"/>&quot;.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">596</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4741216051394823471" datatype="html">
+        <source>Error saving rule: <x id="PH" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">607</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="3896080636020672118" datatype="html">
+        <source>Confirm delete mail rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">617</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="6183247517597275616" datatype="html">
+        <source>This operation will permanently this mail rule.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">618</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="9077981247971516916" datatype="html">
+        <source>Deleted mail rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">627</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="4740074357089345173" datatype="html">
+        <source>Error deleting mail rule: <x id="PH" equiv-text="e.toString()"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">636</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5101757640976222639" datatype="html">
index b6b8051dfcbb1a40bfc7bda34519c62a2652b10c..da26a67902c19ad69c3a9521c2d5cf0fc0f24077 100644 (file)
         "@angular/router": "~14.2.8",
         "@ng-bootstrap/ng-bootstrap": "^13.0.0",
         "@ng-select/ng-select": "^9.0.2",
-        "@ngneat/dirty-check-forms": "^3.0.2",
+        "@ngneat/dirty-check-forms": "^3.0.3",
         "@popperjs/core": "^2.11.6",
         "bootstrap": "^5.2.1",
         "file-saver": "^2.0.5",
         "ng2-pdf-viewer": "^9.1.2",
         "ngx-color": "^8.0.3",
         "ngx-cookie-service": "^14.0.1",
-        "ngx-file-drop": "^14.0.1",
+        "ngx-file-drop": "^14.0.2",
         "ngx-ui-tour-ng-bootstrap": "^11.1.0",
         "rxjs": "~7.5.7",
-        "tslib": "^2.3.1",
+        "tslib": "^2.4.1",
         "uuid": "^9.0.0",
         "zone.js": "~0.11.8"
       },
       "devDependencies": {
-        "@angular-builders/jest": "14.0.1",
+        "@angular-builders/jest": "14.1.0",
         "@angular-devkit/build-angular": "~14.2.7",
         "@angular/cli": "~14.2.7",
         "@angular/compiler-cli": "~14.2.8",
@@ -43,7 +43,7 @@
         "concurrently": "7.4.0",
         "jest": "28.1.3",
         "jest-environment-jsdom": "^29.2.2",
-        "jest-preset-angular": "^12.2.2",
+        "jest-preset-angular": "^12.2.3",
         "ts-node": "~10.9.1",
         "tslint": "~6.1.3",
         "typescript": "~4.8.4",
       }
     },
     "node_modules/@angular-builders/jest": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.0.1.tgz",
-      "integrity": "sha512-ol+/u6KD7kX0AyQ8Mr6pPmsptNh89p+PJtXhcU9epzjJw1y1Y+SlXHGVWg8JseaGRfxo3FVshS/ZvTxoGsstTA==",
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.1.0.tgz",
+      "integrity": "sha512-uGXyJ40F7HXfoWwW1EK5U75sUUQ4zVireLYPUYWT1/t1vqizss0mIPR026bMWwScWJhetdopxlWcql4wfNuXyQ==",
       "dev": true,
       "dependencies": {
         "@angular-devkit/architect": ">=0.1400.0 < 0.1500.0",
         "@angular-devkit/core": "^14.0.0",
-        "jest-preset-angular": "12.2.0",
+        "jest-preset-angular": "12.2.2",
         "lodash": "^4.17.15"
       },
       "engines": {
         "@types/tough-cookie": "*"
       }
     },
+    "node_modules/@angular-builders/jest/node_modules/acorn-globals": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1"
+      }
+    },
+    "node_modules/@angular-builders/jest/node_modules/acorn-globals/node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/@angular-builders/jest/node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/@angular-builders/jest/node_modules/form-data": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
       }
     },
     "node_modules/@angular-builders/jest/node_modules/jest-preset-angular": {
-      "version": "12.2.0",
-      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.0.tgz",
-      "integrity": "sha512-dXnPdcglVcJeXdnxrws3M/gxLlYWaZGU7JS+ffuiCfMzG0AO3EDo/wpsPsxvnjCZiov1uV7g7UD1dHtmOW/sEw==",
+      "version": "12.2.2",
+      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
+      "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
       "dev": true,
       "dependencies": {
         "bs-logger": "^0.2.6",
         "node": ">= 4.0.0"
       }
     },
+    "node_modules/@angular-builders/jest/node_modules/w3c-xmlserializer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+      "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+      "dev": true,
+      "dependencies": {
+        "xml-name-validator": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/@angular-builders/jest/node_modules/whatwg-url": {
       "version": "10.0.0",
       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1402.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.7.tgz",
-      "integrity": "sha512-YZchteri2iUq5JICSH0BQjOU3ehE57+CMU8PBigcJZiaLa/GPiCuwD9QOsnwSzHJNYYx5C94uhtZUjPwUtIAIw==",
+      "version": "0.1402.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.10.tgz",
+      "integrity": "sha512-/6YmPrgataj1jD2Uqd1ED+CG4DaZGacoeZd/89hH7hF76Nno8K18DrSOqJAEmDnOWegpSRGVLd0qP09IHmaG5w==",
       "devOptional": true,
       "dependencies": {
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
         "rxjs": "6.6.7"
       },
       "engines": {
       "devOptional": true
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.7.tgz",
-      "integrity": "sha512-Y58kcEmy8bSFyODtUFQzkuoZHNCji3fzRwGCiQYdAh/mkBf53CuVWoT9q7MrvGOc7Nmo2JiuwR/b7c543eVgfw==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.10.tgz",
+      "integrity": "sha512-VCeZAyq4uPCJukKInaSiD4i/GgxgcU4jFlLFQtoYNmaBS4xbPOymL19forRIihiV0dwNEa2L694vRTAPMBxIfw==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "2.2.0",
-        "@angular-devkit/architect": "0.1402.7",
-        "@angular-devkit/build-webpack": "0.1402.7",
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/architect": "0.1402.10",
+        "@angular-devkit/build-webpack": "0.1402.10",
+        "@angular-devkit/core": "14.2.10",
         "@babel/core": "7.18.10",
         "@babel/generator": "7.18.12",
         "@babel/helper-annotate-as-pure": "7.18.6",
         "@babel/runtime": "7.18.9",
         "@babel/template": "7.18.10",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "14.2.7",
+        "@ngtools/webpack": "14.2.10",
         "ansi-colors": "4.1.3",
         "babel-loader": "8.2.5",
         "babel-plugin-istanbul": "6.1.1",
         "less": "4.1.3",
         "less-loader": "11.0.0",
         "license-webpack-plugin": "4.0.2",
-        "loader-utils": "3.2.0",
+        "loader-utils": "3.2.1",
         "mini-css-extract-plugin": "2.6.1",
         "minimatch": "5.1.0",
         "open": "8.4.0",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
       "dev": true
     },
+    "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+      "dev": true
+    },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1402.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.7.tgz",
-      "integrity": "sha512-aDhS/ODt8BwgtnNN73R7SuMC1GgoT5Pajn1nnIWvvpGj8XchLUbguptyl2v7D2QeYXXsd34Gtx8cDOr9PxYFTA==",
+      "version": "0.1402.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.10.tgz",
+      "integrity": "sha512-h+2MaSY7QSvoJ3R+Hvin21jVCfPGOTLdASIUk4Jmq6J3y5BSku3KSSaV8dWoBOBkFCwQyPQMRjiHoHKLpC1K7g==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1402.7",
+        "@angular-devkit/architect": "0.1402.10",
         "rxjs": "6.6.7"
       },
       "engines": {
       "dev": true
     },
     "node_modules/@angular-devkit/core": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.7.tgz",
-      "integrity": "sha512-83SCYP3h6fglWMgAXFDc8HfOxk9t3ugK0onATXchctvA7blW4Vx8BSg3/DgbqCv+fF380SN8bYqqLJl8fQFdzg==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.10.tgz",
+      "integrity": "sha512-K4AO7mROTdbhQ7chtyQd6oPwmuL+BPUh+wn6Aq1qrmYJK4UZYFOPp8fi/Ehs8meCEeywtrssOPfrOE4Gsre9dg==",
       "devOptional": true,
       "dependencies": {
         "ajv": "8.11.0",
       "devOptional": true
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.7.tgz",
-      "integrity": "sha512-3e2dpFXWl2Z4Gfm+KgY3gAeqsyu8utJMcDIg5sWRAXDeJJdAPc5LweCa8YZEn33Zr9cl8oK+FxlOr15RCyWLcA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.10.tgz",
+      "integrity": "sha512-MMp31KpJTwKHisXOq+6VOXYApq97hZxFaFmZk396X5aIFTCELUwjcezQDk+u2nEs5iK/COUfnN3plGcfJxYhQA==",
       "devOptional": true,
       "dependencies": {
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
         "jsonc-parser": "3.1.0",
         "magic-string": "0.26.2",
         "ora": "5.4.1",
       "devOptional": true
     },
     "node_modules/@angular/cli": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.7.tgz",
-      "integrity": "sha512-RM4CJwtqD7cKFQ7hNGJ56s9YMeJxYqCN5Ss0SzsKN1nXYqz8HykMW8fhUbZQ9HFVy/Ml3LGoh1yGo/tXywAWcA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz",
+      "integrity": "sha512-gX9sAKOwq4lKdPWeABB7TzKDHdjQXvkUU8NmPJA6mEAVXvm3lhQtFvHDalZstwK8au2LY0LaXTcEtcKYOt3AXQ==",
       "devOptional": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1402.7",
-        "@angular-devkit/core": "14.2.7",
-        "@angular-devkit/schematics": "14.2.7",
-        "@schematics/angular": "14.2.7",
+        "@angular-devkit/architect": "0.1402.10",
+        "@angular-devkit/core": "14.2.10",
+        "@angular-devkit/schematics": "14.2.10",
+        "@schematics/angular": "14.2.10",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "debug": "4.3.4",
       }
     },
     "node_modules/@angular/common": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.8.tgz",
-      "integrity": "sha512-JSPN2h1EcyWjHWtOzRQmoX48ZacTjLAYwW9ZRmBpYs6Ptw5xZ39ARTJfQNcNnJleqYju2E6BNkGnLpbtWQjNDA==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
+      "integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "14.2.8",
+        "@angular/core": "14.2.12",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/compiler": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.8.tgz",
-      "integrity": "sha512-lKwp3B4ZKNLgk/25Iyur8bjAwRL20auRoB4EuHrBf+928ftsjYUXTgi+0++DUjPENbpi59k6GcvMCNa6qccvIw==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
+      "integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "14.2.8"
+        "@angular/core": "14.2.12"
       },
       "peerDependenciesMeta": {
         "@angular/core": {
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.8.tgz",
-      "integrity": "sha512-QTftNrAyXOWzKFGY6/i9jh0LB2cOxmykepG4c53wH9LblGvWFztlVOhcoU8tpQSSH8t3EYvGs2r8oUuxcYm5Cw==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
+      "integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
       "dependencies": {
         "@babel/core": "^7.17.2",
         "chokidar": "^3.0.0",
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "14.2.8",
+        "@angular/compiler": "14.2.12",
         "typescript": ">=4.6.2 <4.9"
       }
     },
     "node_modules/@angular/core": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.8.tgz",
-      "integrity": "sha512-cgnII9vJGJDLsfr7KsBfU2l+QQUmQIRIP3ImKhBxicw2IHKCSb2mYwoeLV46jaLyHyUMTLRHKUYUR4XtSPnb8A==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
+      "integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       },
       "peerDependencies": {
         "rxjs": "^6.5.3 || ^7.4.0",
-        "zone.js": "~0.11.4"
+        "zone.js": "~0.11.4 || ~0.12.0"
       }
     },
     "node_modules/@angular/forms": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.8.tgz",
-      "integrity": "sha512-OaL7Gi6STxJza7yn0qgmh6+hV6NVbtGmunpzrn9cR1k5TeE4ZtXu1z7VZesbZ9kZ3F6U9CmygFt0csf7j1d+Ow==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
+      "integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "14.2.8",
-        "@angular/core": "14.2.8",
-        "@angular/platform-browser": "14.2.8",
+        "@angular/common": "14.2.12",
+        "@angular/core": "14.2.12",
+        "@angular/platform-browser": "14.2.12",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/localize": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.8.tgz",
-      "integrity": "sha512-ph+ZLl1sXoNnw9AH4aHyI10T0sNCUTtZeGGDTPJnfOQgqfleOvgPxCNNNdi4z02XcLjVE9CKllcaOQY8zwKlZg==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
+      "integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
       "dependencies": {
         "@babel/core": "7.18.9",
         "glob": "8.0.3",
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "14.2.8",
-        "@angular/compiler-cli": "14.2.8"
+        "@angular/compiler": "14.2.12",
+        "@angular/compiler-cli": "14.2.12"
       }
     },
     "node_modules/@angular/localize/node_modules/@babel/core": {
         "url": "https://opencollective.com/babel"
       }
     },
-    "node_modules/@angular/localize/node_modules/@babel/generator": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
-      "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
-      "dependencies": {
-        "@babel/types": "^7.18.13",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "jsesc": "^2.5.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@angular/localize/node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-      "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/@angular/localize/node_modules/semver": {
       "version": "6.3.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.8.tgz",
-      "integrity": "sha512-tSASBLXoBE0/Gt6d2nC6BJ1DvbGY5wo2Lb+8WCLSvkfsgVqOh4uRuJ2a0wwjeLFd0ZNmpjG42Ijba4btmCpIjg==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
+      "integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/animations": "14.2.8",
-        "@angular/common": "14.2.8",
-        "@angular/core": "14.2.8"
+        "@angular/animations": "14.2.12",
+        "@angular/common": "14.2.12",
+        "@angular/core": "14.2.12"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.8.tgz",
-      "integrity": "sha512-CPK8wHnKke8AUKR92XrFuanaKNXDzDm3uVI3DD0NxBo+fLAkiuVaDVIGgO6n6SxQVtwjXJtMXqQuNdzUg4Q9uQ==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
+      "integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "14.2.8",
-        "@angular/compiler": "14.2.8",
-        "@angular/core": "14.2.8",
-        "@angular/platform-browser": "14.2.8"
+        "@angular/common": "14.2.12",
+        "@angular/compiler": "14.2.12",
+        "@angular/core": "14.2.12",
+        "@angular/platform-browser": "14.2.12"
       }
     },
     "node_modules/@angular/router": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.8.tgz",
-      "integrity": "sha512-rbKLsa4/scPP8AxaDRQfkLqfg8CbZ163dPqHMixou90uK/dx00LjCyUeS38/otdAYNZhrD0i5nu+k65qwhLX8w==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
+      "integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "node": "^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "14.2.8",
-        "@angular/core": "14.2.8",
-        "@angular/platform-browser": "14.2.8",
+        "@angular/common": "14.2.12",
+        "@angular/core": "14.2.12",
+        "@angular/platform-browser": "14.2.12",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
-      "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+      "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
       "engines": {
         "node": ">=6.9.0"
       }
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
-      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+      "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
       "dependencies": {
-        "@babel/compat-data": "^7.18.8",
+        "@babel/compat-data": "^7.20.0",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       },
       "engines": {
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz",
-      "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+      "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-replace-supers": "^7.19.1",
         "@babel/helper-split-export-declaration": "^7.18.6"
       },
       "engines": {
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
-      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+      "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
-        "regexpu-core": "^5.1.0"
+        "regexpu-core": "^5.2.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-define-polyfill-provider": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
-      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+      "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
       "dev": true,
       "dependencies": {
         "@babel/helper-compilation-targets": "^7.17.7",
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
-      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+      "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
       "dependencies": {
-        "@babel/template": "^7.18.6",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
-      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+      "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-simple-access": "^7.20.2",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.20.1",
+        "@babel/types": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
-      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+      "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+      "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
-      "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+      "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.9"
+        "@babel/types": "^7.20.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
       "engines": {
         "node": ">=6.9.0"
       }
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.18.11",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz",
-      "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+      "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.18.11",
-        "@babel/types": "^7.18.10"
+        "@babel/traverse": "^7.20.5",
+        "@babel/types": "^7.20.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
-      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+      "version": "7.20.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+      "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
       "dependencies": {
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.20.5",
+        "@babel/types": "^7.20.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
-      "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+      "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
       "bin": {
         "parser": "bin/babel-parser.js"
       },
       }
     },
     "node_modules/@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
-      "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+      "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.18.8",
-        "@babel/helper-compilation-targets": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/compat-data": "^7.20.1",
+        "@babel/helper-compilation-targets": "^7.20.0",
+        "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.18.8"
+        "@babel/plugin-transform-parameters": "^7.20.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
-      "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+      "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-create-class-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-create-class-features-plugin": "^7.20.5",
+        "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       },
       "engines": {
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
-      "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+      "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
-      "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
+      "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+      "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
-      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+      "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-compilation-targets": "^7.20.0",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "@babel/helper-replace-supers": "^7.19.1",
         "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
       },
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
-      "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+      "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
-      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+      "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
-      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+      "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-simple-access": "^7.19.4"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
-      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+      "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-module-transforms": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-validator-identifier": "^7.19.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
-      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+      "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+        "@babel/helper-plugin-utils": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.18.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
-      "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+      "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.20.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
-      "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+      "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "regenerator-transform": "^0.15.0"
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "regenerator-transform": "^0.15.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
-      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+      "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       },
       "engines": {
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
-      "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+      "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
       "dependencies": {
         "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.18.13",
+        "@babel/generator": "^7.20.5",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.18.13",
-        "@babel/types": "^7.18.13",
+        "@babel/parser": "^7.20.5",
+        "@babel/types": "^7.20.5",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       },
       }
     },
     "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
-      "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+      "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
       "dependencies": {
-        "@babel/types": "^7.18.13",
+        "@babel/types": "^7.20.5",
         "@jridgewell/gen-mapping": "^0.3.2",
         "jsesc": "^2.5.1"
       },
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
-      "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+      "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.18.10",
-        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/helper-string-parser": "^7.19.4",
+        "@babel/helper-validator-identifier": "^7.19.1",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
       }
     },
     "node_modules/@csstools/postcss-cascade-layers": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz",
-      "integrity": "sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
+      "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
       "dev": true,
       "dependencies": {
         "@csstools/selector-specificity": "^2.0.2",
       }
     },
     "node_modules/@cypress/schematic": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.1.1.tgz",
-      "integrity": "sha512-Kf4QeNk8IVx3tdybls+xq8CbqsZwqR9dZjE3ELZhfG2rZeId9SSG6F2GpR4Xly5ROkX0BuQVeuIFNSkDxWAtPg==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.3.0.tgz",
+      "integrity": "sha512-LBKX20MUUYF2Xu+1+KpVbLCoMvt2Osa80yQfonduVsLJ/p8JxtLHqufuf/ryJp9Gm9R5sDfk/YhHL+rB7a+gsg==",
       "optional": true,
       "dependencies": {
         "@angular-devkit/architect": "^0.1402.1",
       "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-      "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "node_modules/@leichtgewicht/ip-codec": {
       "dev": true
     },
     "node_modules/@ng-bootstrap/ng-bootstrap": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.0.0.tgz",
-      "integrity": "sha512-aumflJ24VVOQ6kIGmpaWmjqfreRsXOCf/l2nOxPO6Y+d7Pit6aZthyjO7F0bRMutv6n+B/ma18GKvhhBcMepUw==",
+      "version": "13.1.1",
+      "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.1.1.tgz",
+      "integrity": "sha512-R6qnmFKT2EwwijBHw7rUXqyo5W90OImHOv7BlsxMNnZLIksWIhqwU00k4UBTfRTnd6JsTPuj/co3MaP61ajILA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       }
     },
     "node_modules/@ng-select/ng-select": {
-      "version": "9.0.2",
-      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.0.2.tgz",
-      "integrity": "sha512-xdNiz/kgkMWYW1qFtk/337xDk/cmfEbSVtTFxWIM2OnIX1XsQOnTlGiBYces1TsMfqS68HjAvljEkj8QIGN2Lg==",
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.1.0.tgz",
+      "integrity": "sha512-vxSRD2d84H39eqtTJaethlpQ+xkJUU8epQNUr3yPiah23z8MBCqSDE1t0chxi+rXJz7+xoC9qFa1aYnUVFan4w==",
       "dependencies": {
         "tslib": "^2.3.1"
       },
       }
     },
     "node_modules/@ngneat/dirty-check-forms": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.2.tgz",
-      "integrity": "sha512-SKl3f/SqIdBMle7QorO4T90TqaWAjLe0xtJrTrzCsjC4uQlsk+old1DugUF16FJxAikPcBMoUABHa2iT3Uh75g==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.3.tgz",
+      "integrity": "sha512-YGlKrAaqTRO8lfT1xyN9LkYN0GH0crzdnXAxQFNEuNDQpCHv9cQ0j9XPDsonek6X4K7fLug84n0CQ42rSmGBqw==",
       "dependencies": {
         "tslib": ">=2.0.0"
       },
         "@angular/core": ">=13.0.0",
         "@angular/forms": ">=13.0.0",
         "@angular/router": ">=13.0.0",
+        "lodash-es": ">=4.17.0",
         "rxjs": ">=6.0.0"
       }
     },
     "node_modules/@ngtools/webpack": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.7.tgz",
-      "integrity": "sha512-I47BdEybpzjfFFMFB691o9C+69RexLTgSm/VCyDn4M8DrGrZpgYNhxN+AEr1uA6Bi6MaPG6w+TMac5tNIaO4Yw==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.10.tgz",
+      "integrity": "sha512-sLHapZLVub6mEz5b19tf1VfIV1w3tYfg7FNPLeni79aldxu1FbP1v2WmiFAnMzrswqyK0bhTtxrl+Z/CLKqyoQ==",
       "dev": true,
       "engines": {
         "node": "^14.15.0 || >=16.10.0",
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
       "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==",
+      "deprecated": "This functionality has been moved to @npmcli/fs",
       "devOptional": true,
       "dependencies": {
         "mkdirp": "^1.0.4",
       }
     },
     "node_modules/@schematics/angular": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.7.tgz",
-      "integrity": "sha512-ujtLu0gWARtJsRbN+P+McDO0Y0ygJjUN5016SdbmYDMcDJkwi+GYHU8Yvh/UONtmNor3JdV8AnZ8OmWTlswTDA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.10.tgz",
+      "integrity": "sha512-YFTc/9QJdx422XcApizEcVLKoyknu8b9zHIlAepZCu7WkV8GPT0hvVEHQ7KBWys5aQ7pPZMT0JpZLeAz0F2xYQ==",
       "devOptional": true,
       "dependencies": {
-        "@angular-devkit/core": "14.2.7",
-        "@angular-devkit/schematics": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
+        "@angular-devkit/schematics": "14.2.10",
         "jsonc-parser": "3.1.0"
       },
       "engines": {
       "dev": true
     },
     "node_modules/@sinclair/typebox": {
-      "version": "0.24.34",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz",
-      "integrity": "sha512-x3ejWKw7rpy30Bvm6U0AQMOHdjqe2E3YJrBHlTxH0KFsp77bBa+MH324nJxtXZFpnTy/JW2h5HPYVm0vG2WPnw==",
+      "version": "0.24.51",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
+      "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
       "dev": true
     },
     "node_modules/@sinonjs/commons": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
-      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+      "version": "1.8.6",
+      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+      "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
       "dev": true,
       "dependencies": {
         "type-detect": "4.0.8"
       "dev": true
     },
     "node_modules/@types/babel__core": {
-      "version": "7.1.19",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
-      "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
+      "version": "7.1.20",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
+      "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
       "dev": true,
       "dependencies": {
         "@babel/parser": "^7.1.0",
       }
     },
     "node_modules/@types/babel__traverse": {
-      "version": "7.18.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
-      "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+      "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.3.0"
       }
     },
     "node_modules/@types/eslint": {
-      "version": "8.4.6",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
-      "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+      "version": "8.4.10",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
+      "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
       "dev": true,
       "dependencies": {
         "@types/estree": "*",
       }
     },
     "node_modules/@types/jsdom": {
-      "version": "20.0.0",
-      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
-      "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
+      "version": "20.0.1",
+      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+      "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
       }
     },
     "node_modules/@types/jsdom/node_modules/parse5": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
-      "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
       "dev": true,
       "dependencies": {
-        "entities": "^4.3.0"
+        "entities": "^4.4.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.7.23",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
-      "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+      "version": "18.11.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz",
+      "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==",
       "devOptional": true
     },
     "node_modules/@types/parse-json": {
       "dev": true
     },
     "node_modules/@types/prettier": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
-      "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
       "dev": true
     },
     "node_modules/@types/qs": {
       }
     },
     "node_modules/@types/yargs": {
-      "version": "17.0.12",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
-      "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
+      "version": "17.0.15",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.15.tgz",
+      "integrity": "sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg==",
       "dev": true,
       "dependencies": {
         "@types/yargs-parser": "*"
       }
     },
     "node_modules/acorn": {
-      "version": "8.8.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
-      "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+      "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
       "dev": true,
       "bin": {
         "acorn": "bin/acorn"
       }
     },
     "node_modules/acorn-globals": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
-      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+      "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
       "dev": true,
       "dependencies": {
-        "acorn": "^7.1.1",
-        "acorn-walk": "^7.1.1"
-      }
-    },
-    "node_modules/acorn-globals/node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
+        "acorn": "^8.1.0",
+        "acorn-walk": "^8.0.2"
       }
     },
     "node_modules/acorn-import-assertions": {
       }
     },
     "node_modules/acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+      "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
       "dev": true,
       "engines": {
         "node": ">=0.4.0"
       }
     },
     "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
       "dev": true,
       "dependencies": {
         "big.js": "^5.2.2",
       }
     },
     "node_modules/anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dependencies": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.8",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
-      "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==",
+      "version": "10.4.13",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+      "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
       "dev": true,
       "funding": [
         {
         }
       ],
       "dependencies": {
-        "browserslist": "^4.21.3",
-        "caniuse-lite": "^1.0.30001373",
+        "browserslist": "^4.21.4",
+        "caniuse-lite": "^1.0.30001426",
         "fraction.js": "^4.2.0",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
       }
     },
     "node_modules/babel-loader/node_modules/loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
       "dev": true,
       "dependencies": {
         "big.js": "^5.2.2",
         "node": ">=8.9.0"
       }
     },
-    "node_modules/babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "dev": true,
-      "dependencies": {
-        "object.assign": "^4.1.0"
-      }
-    },
     "node_modules/babel-plugin-istanbul": {
       "version": "6.1.1",
       "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
       }
     },
     "node_modules/babel-plugin-polyfill-corejs2": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
-      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+      "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
       "dev": true,
       "dependencies": {
         "@babel/compat-data": "^7.17.7",
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
         "semver": "^6.1.1"
       },
       "peerDependencies": {
       }
     },
     "node_modules/babel-plugin-polyfill-regenerator": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz",
-      "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==",
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+      "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.3.2"
+        "@babel/helper-define-polyfill-provider": "^0.3.3"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
       "dev": true
     },
     "node_modules/bootstrap": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.1.tgz",
-      "integrity": "sha512-UQi3v2NpVPEi1n35dmRRzBJFlgvWHYwyem6yHhuT6afYF+sziEt46McRbT//kVXZ7b1YUYEVGdXEH74Nx3xzGA==",
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
+      "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
       "funding": [
         {
           "type": "github",
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "funding": [
         {
           "type": "opencollective",
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       },
       "bin": {
         "browserslist": "cli.js"
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001388",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz",
-      "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ==",
+      "version": "1.0.30001435",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
+      "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==",
       "funding": [
         {
           "type": "opencollective",
       }
     },
     "node_modules/ci-info": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
-      "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
-      "devOptional": true
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+      "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
     "node_modules/cjs-module-lexer": {
       "version": "1.2.2",
       }
     },
     "node_modules/cli-table3": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
-      "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+      "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
       "optional": true,
       "dependencies": {
         "string-width": "^4.2.0"
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
+    "node_modules/compression/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
         "node": ">= 0.6"
       }
     },
-    "node_modules/content-disposition/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/content-type": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
       }
     },
     "node_modules/convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "dependencies": {
-        "safe-buffer": "~5.1.1"
-      }
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
     },
     "node_modules/cookie": {
       "version": "0.5.0",
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.25.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz",
-      "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==",
+      "version": "3.26.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+      "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
       "dev": true,
       "dependencies": {
-        "browserslist": "^4.21.3",
-        "semver": "7.0.0"
+        "browserslist": "^4.21.4"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/core-js"
       }
     },
-    "node_modules/core-js-compat/node_modules/semver": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "devOptional": true
     },
     "node_modules/cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
       "dev": true,
       "dependencies": {
         "@types/parse-json": "^4.0.0",
       }
     },
     "node_modules/cssdb": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz",
-      "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
+      "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
       "dev": true,
       "funding": {
         "type": "opencollective",
       }
     },
     "node_modules/cypress/node_modules/@types/node": {
-      "version": "14.18.26",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz",
-      "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==",
+      "version": "14.18.34",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.34.tgz",
+      "integrity": "sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA==",
       "optional": true
     },
     "node_modules/cypress/node_modules/ansi-styles": {
       }
     },
     "node_modules/date-fns": {
-      "version": "2.29.2",
-      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz",
-      "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==",
+      "version": "2.29.3",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+      "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
       "dev": true,
       "engines": {
         "node": ">=0.11"
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.5",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz",
-      "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==",
+      "version": "1.11.6",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
+      "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==",
       "optional": true
     },
     "node_modules/debug": {
       }
     },
     "node_modules/decimal.js": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
-      "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+      "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
       "dev": true
     },
     "node_modules/dedent": {
       }
     },
     "node_modules/defaults": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-      "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
       "devOptional": true,
       "dependencies": {
         "clone": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/define-lazy-prop": {
         "node": ">=8"
       }
     },
-    "node_modules/define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
-      "dev": true,
-      "dependencies": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.240",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz",
-      "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow=="
+      "version": "1.4.284",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
     },
     "node_modules/emittery": {
       "version": "0.10.2",
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
-      "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+      "version": "5.12.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+      "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.4",
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/express/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
       "devOptional": true
     },
     "node_modules/fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
       "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
       }
     },
     "node_modules/fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
       "dev": true,
       "dependencies": {
         "bser": "2.1.1"
       }
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.1",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
-      "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
       "dev": true,
       "funding": [
         {
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
-      "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+      "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
       "dev": true,
       "dependencies": {
         "function-bind": "^1.1.1",
       "dev": true
     },
     "node_modules/global-dirs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
-      "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+      "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
       "optional": true,
       "dependencies": {
         "ini": "2.0.0"
         "node": ">=4"
       }
     },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/has-symbols": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
       "dev": true
     },
     "node_modules/hosted-git-info": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz",
-      "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+      "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
       "devOptional": true,
       "dependencies": {
         "lru-cache": "^7.5.1"
         "util-deprecate": "~1.0.1"
       }
     },
+    "node_modules/hpack.js/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
     "node_modules/hpack.js/node_modules/string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
       ]
     },
     "node_modules/ignore": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+      "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
       "dev": true,
       "engines": {
         "node": ">= 4"
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
-      "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
       "devOptional": true,
       "dependencies": {
         "has": "^1.0.3"
       }
     },
     "node_modules/istanbul-lib-instrument": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-      "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.12.3",
       }
     },
     "node_modules/jest-environment-jsdom": {
-      "version": "29.2.2",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.2.2.tgz",
-      "integrity": "sha512-5mNtTcky1+RYv9kxkwMwt7fkzyX4EJUarV7iI+NQLigpV4Hz4sgfOdP4kOpCHXbkRWErV7tgXoXLm2CKtucr+A==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.3.1.tgz",
+      "integrity": "sha512-G46nKgiez2Gy4zvYNhayfMEAFlVHhWfncqvqS6yCd0i+a4NsSUD2WtrKSaYQrYiLQaupHXxCRi8xxVL2M9PbhA==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^29.2.2",
-        "@jest/fake-timers": "^29.2.2",
-        "@jest/types": "^29.2.1",
+        "@jest/environment": "^29.3.1",
+        "@jest/fake-timers": "^29.3.1",
+        "@jest/types": "^29.3.1",
         "@types/jsdom": "^20.0.0",
         "@types/node": "*",
-        "jest-mock": "^29.2.2",
-        "jest-util": "^29.2.1",
+        "jest-mock": "^29.3.1",
+        "jest-util": "^29.3.1",
         "jsdom": "^20.0.0"
       },
       "engines": {
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/@jest/environment": {
-      "version": "29.2.2",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
-      "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz",
+      "integrity": "sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==",
       "dev": true,
       "dependencies": {
-        "@jest/fake-timers": "^29.2.2",
-        "@jest/types": "^29.2.1",
+        "@jest/fake-timers": "^29.3.1",
+        "@jest/types": "^29.3.1",
         "@types/node": "*",
-        "jest-mock": "^29.2.2"
+        "jest-mock": "^29.3.1"
       },
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": {
-      "version": "29.2.2",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
-      "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz",
+      "integrity": "sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==",
       "dev": true,
       "dependencies": {
-        "@jest/types": "^29.2.1",
+        "@jest/types": "^29.3.1",
         "@sinonjs/fake-timers": "^9.1.2",
         "@types/node": "*",
-        "jest-message-util": "^29.2.1",
-        "jest-mock": "^29.2.2",
-        "jest-util": "^29.2.1"
+        "jest-message-util": "^29.3.1",
+        "jest-mock": "^29.3.1",
+        "jest-util": "^29.3.1"
       },
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/@jest/types": {
-      "version": "29.2.1",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
-      "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz",
+      "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==",
       "dev": true,
       "dependencies": {
         "@jest/schemas": "^29.0.0",
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/jest-message-util": {
-      "version": "29.2.1",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
-      "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz",
+      "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^29.2.1",
+        "@jest/types": "^29.3.1",
         "@types/stack-utils": "^2.0.0",
         "chalk": "^4.0.0",
         "graceful-fs": "^4.2.9",
         "micromatch": "^4.0.4",
-        "pretty-format": "^29.2.1",
+        "pretty-format": "^29.3.1",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3"
       },
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/jest-mock": {
-      "version": "29.2.2",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
-      "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz",
+      "integrity": "sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==",
       "dev": true,
       "dependencies": {
-        "@jest/types": "^29.2.1",
+        "@jest/types": "^29.3.1",
         "@types/node": "*",
-        "jest-util": "^29.2.1"
+        "jest-util": "^29.3.1"
       },
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/jest-util": {
-      "version": "29.2.1",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
-      "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz",
+      "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==",
       "dev": true,
       "dependencies": {
-        "@jest/types": "^29.2.1",
+        "@jest/types": "^29.3.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "ci-info": "^3.2.0",
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/pretty-format": {
-      "version": "29.2.1",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
-      "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
+      "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
       "dev": true,
       "dependencies": {
         "@jest/schemas": "^29.0.0",
       }
     },
     "node_modules/jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
       "dev": true,
       "engines": {
         "node": ">=6"
       }
     },
     "node_modules/jest-preset-angular": {
-      "version": "12.2.2",
-      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
-      "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
+      "version": "12.2.3",
+      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.3.tgz",
+      "integrity": "sha512-9vgawXuki/lg4IRPtl5k83krWLKADTal7BBm06xNAWOK09AbHK1foXqZdVOMObsWbaMDeQ1cjba60vS/aEVY4Q==",
       "dev": true,
       "dependencies": {
         "bs-logger": "^0.2.6",
         "esbuild": ">=0.13.8"
       },
       "peerDependencies": {
-        "@angular-devkit/build-angular": ">=0.1102.19 <15.0.0",
-        "@angular/compiler-cli": ">=11.2.14 <15.0.0",
-        "@angular/core": ">=11.2.14 <15.0.0",
-        "@angular/platform-browser-dynamic": ">=11.2.14 <15.0.0",
+        "@angular-devkit/build-angular": ">=12.2.18 <16.0.0",
+        "@angular/compiler-cli": ">=12.2.16 <16.0.0",
+        "@angular/core": ">=12.2.16 <16.0.0",
+        "@angular/platform-browser-dynamic": ">=12.2.16 <16.0.0",
         "jest": "^28.0.0",
-        "typescript": ">=4.3"
+        "typescript": ">=4.4"
       }
     },
     "node_modules/jest-preset-angular/node_modules/@types/jsdom": {
         "@types/tough-cookie": "*"
       }
     },
+    "node_modules/jest-preset-angular/node_modules/acorn-globals": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/acorn-globals/node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/jest-preset-angular/node_modules/form-data": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
         "node": ">= 4.0.0"
       }
     },
+    "node_modules/jest-preset-angular/node_modules/w3c-xmlserializer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+      "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+      "dev": true,
+      "dependencies": {
+        "xml-name-validator": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/jest-preset-angular/node_modules/whatwg-url": {
       "version": "10.0.0",
       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
       }
     },
     "node_modules/joi": {
-      "version": "17.6.0",
-      "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
-      "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+      "version": "17.7.0",
+      "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz",
+      "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==",
       "dev": true,
       "dependencies": {
         "@hapi/hoek": "^9.0.0",
       "optional": true
     },
     "node_modules/jsdom": {
-      "version": "20.0.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
-      "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
+      "version": "20.0.3",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+      "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
       "dev": true,
       "dependencies": {
         "abab": "^2.0.6",
-        "acorn": "^8.7.1",
-        "acorn-globals": "^6.0.0",
+        "acorn": "^8.8.1",
+        "acorn-globals": "^7.0.0",
         "cssom": "^0.5.0",
         "cssstyle": "^2.3.0",
         "data-urls": "^3.0.2",
-        "decimal.js": "^10.3.1",
+        "decimal.js": "^10.4.2",
         "domexception": "^4.0.0",
         "escodegen": "^2.0.0",
         "form-data": "^4.0.0",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.1",
         "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.0",
-        "parse5": "^7.0.0",
+        "nwsapi": "^2.2.2",
+        "parse5": "^7.1.1",
         "saxes": "^6.0.0",
         "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.0.0",
-        "w3c-hr-time": "^1.0.2",
-        "w3c-xmlserializer": "^3.0.0",
+        "tough-cookie": "^4.1.2",
+        "w3c-xmlserializer": "^4.0.0",
         "webidl-conversions": "^7.0.0",
         "whatwg-encoding": "^2.0.0",
         "whatwg-mimetype": "^3.0.0",
         "whatwg-url": "^11.0.0",
-        "ws": "^8.8.0",
+        "ws": "^8.11.0",
         "xml-name-validator": "^4.0.0"
       },
       "engines": {
       }
     },
     "node_modules/jsdom/node_modules/parse5": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
-      "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
       "dev": true,
       "dependencies": {
-        "entities": "^4.3.0"
+        "entities": "^4.4.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
     "node_modules/loader-utils": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz",
-      "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
+      "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
       "dev": true,
       "engines": {
         "node": ">= 12.13.0"
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
       "devOptional": true
     },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "peer": true
+    },
     "node_modules/lodash.debounce": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
       }
     },
     "node_modules/lru-cache": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
-      "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==",
+      "version": "7.14.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+      "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
       "devOptional": true,
       "engines": {
         "node": ">=12"
       }
     },
     "node_modules/memfs": {
-      "version": "3.4.9",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.9.tgz",
-      "integrity": "sha512-3rm8kbrzpUGRyPKSGuk387NZOwQ90O4rI9tsWQkzNW7BLSnKGp23RsEsKK8N8QVCrtJoAMqy3spxHC4os4G6PQ==",
+      "version": "3.4.12",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
+      "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
       "dev": true,
       "dependencies": {
         "fs-monkey": "^1.0.3"
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "devOptional": true
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "devOptional": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/minipass": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
-      "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "devOptional": true,
       "dependencies": {
         "yallist": "^4.0.0"
       "dev": true
     },
     "node_modules/needle": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
-      "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+      "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
       "dev": true
     },
     "node_modules/ng2-pdf-viewer": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.2.tgz",
-      "integrity": "sha512-dVfrEOW0rusHjLGpGnkt2mDKdd3LKK9uXAbNxOCv94I2jS2QjciPHMELLKWCliBXiLNbDOTsQdCDQPvYT3vKgQ==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.3.tgz",
+      "integrity": "sha512-t2Gez92xPWPfY3qzzs+iLey5NUCYwJXIzv+dU4prY96aYdacsxuOpFjORW1+a330ryMkxYEJvEQ+mgbBJr77xw==",
       "dependencies": {
         "pdfjs-dist": "~2.14.305",
         "tslib": "^2.3.1"
       }
     },
     "node_modules/ngx-file-drop": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.1.tgz",
-      "integrity": "sha512-OSsI1Qjs273Xi+tIkCoO/ciFx6gT9wwyZ1900O4ggniOiTNByNq+xBN8DASOcAqLxvkuri8en7MtZPu+jxX/6Q==",
+      "version": "14.0.2",
+      "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.2.tgz",
+      "integrity": "sha512-tIW+Ymd2IOjUQTqMb2NiuupeRPWwKe19kHmb13gf4Iw8rkvrO6PlqqZ3EqSGPIEJOmV836FZHpM4B1xXjVQLfA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
         "@angular/core": ">=14.0.0"
       }
     },
-    "node_modules/ngx-ui-tour-ng-bootstrap": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.1.0.tgz",
-      "integrity": "sha512-VQbQA+c4aYtUe/6yzY6BzawDHhIxwH0uck3SpJmlhhHLmydm1OCRjlmhVJHEIPggwxGOvO5h/Vs6iLmmwxn//g==",
+    "node_modules/ngx-ui-tour-core": {
+      "version": "9.2.1",
+      "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.2.1.tgz",
+      "integrity": "sha512-KpDSeNl69S1x+jUdREIkFgHGfpAyydxAt2aRUZ263kHZskME/CpaojEmjLCB+xUxEXij9Bq9tQxtGPm5IkJlPg==",
       "dependencies": {
-        "ngx-ui-tour-core": "9.1.0",
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
         "@angular/common": "^14.0.0",
         "@angular/core": "^14.0.0",
-        "@ng-bootstrap/ng-bootstrap": "^13.0.0",
+        "@angular/router": "^14.0.0",
+        "rxjs": ">=6.0.0",
         "typescript": ">=3.8.0"
       }
     },
-    "node_modules/ngx-ui-tour-ng-bootstrap/node_modules/ngx-ui-tour-core": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.1.0.tgz",
-      "integrity": "sha512-9fSvSoh0wUpaVFNo/D0Vs9NreL0esFBY3MFycONZD8b5SE7nX2+CZLzPbIVnigmj/KH3op5Pw8Pzkg2VHmXTcg==",
+    "node_modules/ngx-ui-tour-ng-bootstrap": {
+      "version": "11.3.2",
+      "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.3.2.tgz",
+      "integrity": "sha512-DEQ8ek9AGIdIPM6pGZ1Z8b0qY1kwgTppA30432CBBip7UES0KJFoT9BVHG99pA7Lx07GT9okqYh0zR3jPQh7uA==",
       "dependencies": {
+        "ngx-ui-tour-core": "9.2.1",
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
         "@angular/common": "^14.0.0",
         "@angular/core": "^14.0.0",
-        "@angular/router": "^14.0.0",
-        "rxjs": ">=6.0.0",
+        "@ng-bootstrap/ng-bootstrap": "^13.0.0",
         "typescript": ">=3.8.0"
       }
     },
       }
     },
     "node_modules/node-gyp": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz",
-      "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==",
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz",
+      "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==",
       "devOptional": true,
       "dependencies": {
         "env-paths": "^2.2.0",
         "glob": "^7.1.4",
         "graceful-fs": "^4.2.6",
         "make-fetch-happen": "^10.0.3",
-        "nopt": "^5.0.0",
+        "nopt": "^6.0.0",
         "npmlog": "^6.0.0",
         "rimraf": "^3.0.2",
         "semver": "^7.3.5",
       "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
     },
     "node_modules/nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
+      "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
       "devOptional": true,
       "dependencies": {
-        "abbrev": "1"
+        "abbrev": "^1.0.0"
       },
       "bin": {
         "nopt": "bin/nopt.js"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
     "node_modules/normalize-package-data": {
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
-      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+      "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
       "dev": true
     },
     "node_modules/object-inspect": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "has-symbols": "^1.0.3",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/obuf": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
       }
     },
     "node_modules/postcss-custom-properties": {
-      "version": "12.1.8",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz",
-      "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==",
+      "version": "12.1.11",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
+      "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
         "url": "https://opencollective.com/csstools"
       },
       "peerDependencies": {
-        "postcss": "^8.4"
+        "postcss": "^8.2"
       }
     },
     "node_modules/postcss-custom-selectors": {
       }
     },
     "node_modules/postcss-nesting": {
-      "version": "10.1.10",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz",
-      "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==",
+      "version": "10.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz",
+      "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==",
       "dev": true,
       "dependencies": {
         "@csstools/selector-specificity": "^2.0.0",
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.10",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
-      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "version": "6.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+      "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
       "dev": true
     },
     "node_modules/regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "dev": true,
       "dependencies": {
         "regenerate": "^1.4.2"
       "dev": true
     },
     "node_modules/regenerator-transform": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
-      "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+      "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
       "dev": true,
       "dependencies": {
         "@babel/runtime": "^7.8.4"
       "dev": true
     },
     "node_modules/regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
       "dev": true,
       "dependencies": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
-        "unicode-match-property-value-ecmascript": "^2.0.0"
+        "unicode-match-property-value-ecmascript": "^2.1.0"
       },
       "engines": {
         "node": ">=4"
       }
     },
     "node_modules/regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
       "dev": true
     },
     "node_modules/regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "dev": true,
       "dependencies": {
         "jsesc": "~0.5.0"
       }
     },
     "node_modules/resolve-url-loader/node_modules/loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
       "dev": true,
       "dependencies": {
         "big.js": "^5.2.2",
       }
     },
     "node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "devOptional": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       }
     },
     "node_modules/shell-quote": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
-      "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
-      "dev": true
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+      "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/side-channel": {
       "version": "1.0.4",
       }
     },
     "node_modules/socks": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
-      "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
       "devOptional": true,
       "dependencies": {
         "ip": "^2.0.0",
       }
     },
     "node_modules/stack-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
-      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
       "dev": true,
       "dependencies": {
         "escape-string-regexp": "^2.0.0"
         "safe-buffer": "~5.2.0"
       }
     },
-    "node_modules/string_decoder/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "devOptional": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/string-length": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
       }
     },
     "node_modules/supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
       "dev": true,
       "dependencies": {
         "has-flag": "^4.0.0",
       }
     },
     "node_modules/tar": {
-      "version": "6.1.11",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
-      "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+      "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
       "devOptional": true,
       "dependencies": {
         "chownr": "^2.0.0",
         "yallist": "^4.0.0"
       },
       "engines": {
-        "node": ">= 10"
+        "node": ">=10"
       }
     },
     "node_modules/terminal-link": {
         }
       }
     },
-    "node_modules/ts-node/node_modules/acorn-walk": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
-      "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/tslib": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
-      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
     },
     "node_modules/tslint": {
       "version": "6.1.3",
       }
     },
     "node_modules/unicode-match-property-value-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
       "dev": true,
       "engines": {
         "node": ">=4"
       }
     },
     "node_modules/unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
       "dev": true,
       "engines": {
         "node": ">=4"
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.6.tgz",
-      "integrity": "sha512-We7BqM9XFlcW94Op93uW8+2LXvGezs7QA0WY+f1H7RR1q46B06W6hZF6LbmOlpCS1HU22q/6NOGTGW5sCm7NJQ==",
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
       "funding": [
         {
           "type": "opencollective",
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
       "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+      "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
       "dev": true,
       "dependencies": {
         "browser-process-hrtime": "^1.0.0"
       }
     },
     "node_modules/w3c-xmlserializer": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
-      "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+      "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
       "dev": true,
       "dependencies": {
         "xml-name-validator": "^4.0.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
       }
     },
     "node_modules/wait-on": {
       }
     },
     "node_modules/ws": {
-      "version": "8.8.1",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
-      "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+      "version": "8.11.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+      "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
       "dev": true,
       "engines": {
         "node": ">=10.0.0"
       }
     },
     "@angular-builders/jest": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.0.1.tgz",
-      "integrity": "sha512-ol+/u6KD7kX0AyQ8Mr6pPmsptNh89p+PJtXhcU9epzjJw1y1Y+SlXHGVWg8JseaGRfxo3FVshS/ZvTxoGsstTA==",
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.1.0.tgz",
+      "integrity": "sha512-uGXyJ40F7HXfoWwW1EK5U75sUUQ4zVireLYPUYWT1/t1vqizss0mIPR026bMWwScWJhetdopxlWcql4wfNuXyQ==",
       "dev": true,
       "requires": {
         "@angular-devkit/architect": ">=0.1400.0 < 0.1500.0",
         "@angular-devkit/core": "^14.0.0",
-        "jest-preset-angular": "12.2.0",
+        "jest-preset-angular": "12.2.2",
         "lodash": "^4.17.15"
       },
       "dependencies": {
             "@types/tough-cookie": "*"
           }
         },
+        "acorn-globals": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+          "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+          "dev": true,
+          "requires": {
+            "acorn": "^7.1.1",
+            "acorn-walk": "^7.1.1"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "7.4.1",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+              "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+              "dev": true
+            }
+          }
+        },
+        "acorn-walk": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+          "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+          "dev": true
+        },
         "form-data": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
           }
         },
         "jest-preset-angular": {
-          "version": "12.2.0",
-          "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.0.tgz",
-          "integrity": "sha512-dXnPdcglVcJeXdnxrws3M/gxLlYWaZGU7JS+ffuiCfMzG0AO3EDo/wpsPsxvnjCZiov1uV7g7UD1dHtmOW/sEw==",
+          "version": "12.2.2",
+          "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
+          "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
           "dev": true,
           "requires": {
             "bs-logger": "^0.2.6",
           "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
           "dev": true
         },
+        "w3c-xmlserializer": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+          "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+          "dev": true,
+          "requires": {
+            "xml-name-validator": "^4.0.0"
+          }
+        },
         "whatwg-url": {
           "version": "10.0.0",
           "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
       }
     },
     "@angular-devkit/architect": {
-      "version": "0.1402.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.7.tgz",
-      "integrity": "sha512-YZchteri2iUq5JICSH0BQjOU3ehE57+CMU8PBigcJZiaLa/GPiCuwD9QOsnwSzHJNYYx5C94uhtZUjPwUtIAIw==",
+      "version": "0.1402.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.10.tgz",
+      "integrity": "sha512-/6YmPrgataj1jD2Uqd1ED+CG4DaZGacoeZd/89hH7hF76Nno8K18DrSOqJAEmDnOWegpSRGVLd0qP09IHmaG5w==",
       "devOptional": true,
       "requires": {
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
         "rxjs": "6.6.7"
       },
       "dependencies": {
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.7.tgz",
-      "integrity": "sha512-Y58kcEmy8bSFyODtUFQzkuoZHNCji3fzRwGCiQYdAh/mkBf53CuVWoT9q7MrvGOc7Nmo2JiuwR/b7c543eVgfw==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.10.tgz",
+      "integrity": "sha512-VCeZAyq4uPCJukKInaSiD4i/GgxgcU4jFlLFQtoYNmaBS4xbPOymL19forRIihiV0dwNEa2L694vRTAPMBxIfw==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "2.2.0",
-        "@angular-devkit/architect": "0.1402.7",
-        "@angular-devkit/build-webpack": "0.1402.7",
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/architect": "0.1402.10",
+        "@angular-devkit/build-webpack": "0.1402.10",
+        "@angular-devkit/core": "14.2.10",
         "@babel/core": "7.18.10",
         "@babel/generator": "7.18.12",
         "@babel/helper-annotate-as-pure": "7.18.6",
         "@babel/runtime": "7.18.9",
         "@babel/template": "7.18.10",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "14.2.7",
+        "@ngtools/webpack": "14.2.10",
         "ansi-colors": "4.1.3",
         "babel-loader": "8.2.5",
         "babel-plugin-istanbul": "6.1.1",
         "less": "4.1.3",
         "less-loader": "11.0.0",
         "license-webpack-plugin": "4.0.2",
-        "loader-utils": "3.2.0",
+        "loader-utils": "3.2.1",
         "mini-css-extract-plugin": "2.6.1",
         "minimatch": "5.1.0",
         "open": "8.4.0",
               "dev": true
             }
           }
+        },
+        "tslib": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+          "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+          "dev": true
         }
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.1402.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.7.tgz",
-      "integrity": "sha512-aDhS/ODt8BwgtnNN73R7SuMC1GgoT5Pajn1nnIWvvpGj8XchLUbguptyl2v7D2QeYXXsd34Gtx8cDOr9PxYFTA==",
+      "version": "0.1402.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.10.tgz",
+      "integrity": "sha512-h+2MaSY7QSvoJ3R+Hvin21jVCfPGOTLdASIUk4Jmq6J3y5BSku3KSSaV8dWoBOBkFCwQyPQMRjiHoHKLpC1K7g==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1402.7",
+        "@angular-devkit/architect": "0.1402.10",
         "rxjs": "6.6.7"
       },
       "dependencies": {
       }
     },
     "@angular-devkit/core": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.7.tgz",
-      "integrity": "sha512-83SCYP3h6fglWMgAXFDc8HfOxk9t3ugK0onATXchctvA7blW4Vx8BSg3/DgbqCv+fF380SN8bYqqLJl8fQFdzg==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.10.tgz",
+      "integrity": "sha512-K4AO7mROTdbhQ7chtyQd6oPwmuL+BPUh+wn6Aq1qrmYJK4UZYFOPp8fi/Ehs8meCEeywtrssOPfrOE4Gsre9dg==",
       "devOptional": true,
       "requires": {
         "ajv": "8.11.0",
       }
     },
     "@angular-devkit/schematics": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.7.tgz",
-      "integrity": "sha512-3e2dpFXWl2Z4Gfm+KgY3gAeqsyu8utJMcDIg5sWRAXDeJJdAPc5LweCa8YZEn33Zr9cl8oK+FxlOr15RCyWLcA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.10.tgz",
+      "integrity": "sha512-MMp31KpJTwKHisXOq+6VOXYApq97hZxFaFmZk396X5aIFTCELUwjcezQDk+u2nEs5iK/COUfnN3plGcfJxYhQA==",
       "devOptional": true,
       "requires": {
-        "@angular-devkit/core": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
         "jsonc-parser": "3.1.0",
         "magic-string": "0.26.2",
         "ora": "5.4.1",
       }
     },
     "@angular/cli": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.7.tgz",
-      "integrity": "sha512-RM4CJwtqD7cKFQ7hNGJ56s9YMeJxYqCN5Ss0SzsKN1nXYqz8HykMW8fhUbZQ9HFVy/Ml3LGoh1yGo/tXywAWcA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz",
+      "integrity": "sha512-gX9sAKOwq4lKdPWeABB7TzKDHdjQXvkUU8NmPJA6mEAVXvm3lhQtFvHDalZstwK8au2LY0LaXTcEtcKYOt3AXQ==",
       "devOptional": true,
       "requires": {
-        "@angular-devkit/architect": "0.1402.7",
-        "@angular-devkit/core": "14.2.7",
-        "@angular-devkit/schematics": "14.2.7",
-        "@schematics/angular": "14.2.7",
+        "@angular-devkit/architect": "0.1402.10",
+        "@angular-devkit/core": "14.2.10",
+        "@angular-devkit/schematics": "14.2.10",
+        "@schematics/angular": "14.2.10",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "debug": "4.3.4",
       }
     },
     "@angular/common": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.8.tgz",
-      "integrity": "sha512-JSPN2h1EcyWjHWtOzRQmoX48ZacTjLAYwW9ZRmBpYs6Ptw5xZ39ARTJfQNcNnJleqYju2E6BNkGnLpbtWQjNDA==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
+      "integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.8.tgz",
-      "integrity": "sha512-lKwp3B4ZKNLgk/25Iyur8bjAwRL20auRoB4EuHrBf+928ftsjYUXTgi+0++DUjPENbpi59k6GcvMCNa6qccvIw==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
+      "integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.8.tgz",
-      "integrity": "sha512-QTftNrAyXOWzKFGY6/i9jh0LB2cOxmykepG4c53wH9LblGvWFztlVOhcoU8tpQSSH8t3EYvGs2r8oUuxcYm5Cw==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
+      "integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
       "requires": {
         "@babel/core": "^7.17.2",
         "chokidar": "^3.0.0",
       }
     },
     "@angular/core": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.8.tgz",
-      "integrity": "sha512-cgnII9vJGJDLsfr7KsBfU2l+QQUmQIRIP3ImKhBxicw2IHKCSb2mYwoeLV46jaLyHyUMTLRHKUYUR4XtSPnb8A==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
+      "integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/forms": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.8.tgz",
-      "integrity": "sha512-OaL7Gi6STxJza7yn0qgmh6+hV6NVbtGmunpzrn9cR1k5TeE4ZtXu1z7VZesbZ9kZ3F6U9CmygFt0csf7j1d+Ow==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
+      "integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/localize": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.8.tgz",
-      "integrity": "sha512-ph+ZLl1sXoNnw9AH4aHyI10T0sNCUTtZeGGDTPJnfOQgqfleOvgPxCNNNdi4z02XcLjVE9CKllcaOQY8zwKlZg==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
+      "integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
       "requires": {
         "@babel/core": "7.18.9",
         "glob": "8.0.3",
             "semver": "^6.3.0"
           }
         },
-        "@babel/generator": {
-          "version": "7.18.13",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
-          "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
-          "requires": {
-            "@babel/types": "^7.18.13",
-            "@jridgewell/gen-mapping": "^0.3.2",
-            "jsesc": "^2.5.1"
-          }
-        },
-        "@jridgewell/gen-mapping": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-          "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-          "requires": {
-            "@jridgewell/set-array": "^1.0.1",
-            "@jridgewell/sourcemap-codec": "^1.4.10",
-            "@jridgewell/trace-mapping": "^0.3.9"
-          }
-        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
       }
     },
     "@angular/platform-browser": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.8.tgz",
-      "integrity": "sha512-tSASBLXoBE0/Gt6d2nC6BJ1DvbGY5wo2Lb+8WCLSvkfsgVqOh4uRuJ2a0wwjeLFd0ZNmpjG42Ijba4btmCpIjg==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
+      "integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.8.tgz",
-      "integrity": "sha512-CPK8wHnKke8AUKR92XrFuanaKNXDzDm3uVI3DD0NxBo+fLAkiuVaDVIGgO6n6SxQVtwjXJtMXqQuNdzUg4Q9uQ==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
+      "integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/router": {
-      "version": "14.2.8",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.8.tgz",
-      "integrity": "sha512-rbKLsa4/scPP8AxaDRQfkLqfg8CbZ163dPqHMixou90uK/dx00LjCyUeS38/otdAYNZhrD0i5nu+k65qwhLX8w==",
+      "version": "14.2.12",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
+      "integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
       "requires": {
         "tslib": "^2.3.0"
       }
       }
     },
     "@babel/compat-data": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
-      "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw=="
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+      "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g=="
     },
     "@babel/core": {
       "version": "7.18.10",
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
-      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+      "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
       "requires": {
-        "@babel/compat-data": "^7.18.8",
+        "@babel/compat-data": "^7.20.0",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       },
       "dependencies": {
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz",
-      "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+      "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-replace-supers": "^7.19.1",
         "@babel/helper-split-export-declaration": "^7.18.6"
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
-      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+      "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
-        "regexpu-core": "^5.1.0"
+        "regexpu-core": "^5.2.1"
       }
     },
     "@babel/helper-define-polyfill-provider": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
-      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+      "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
       "dev": true,
       "requires": {
         "@babel/helper-compilation-targets": "^7.17.7",
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
-      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+      "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
       "requires": {
-        "@babel/template": "^7.18.6",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helper-hoist-variables": {
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
-      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+      "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-simple-access": "^7.20.2",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.20.1",
+        "@babel/types": "^7.20.2"
       }
     },
     "@babel/helper-optimise-call-expression": {
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
-      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+      "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
       "dev": true
     },
     "@babel/helper-remap-async-to-generator": {
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+      "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
       "requires": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.20.2"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
-      "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+      "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.18.9"
+        "@babel/types": "^7.20.0"
       }
     },
     "@babel/helper-split-export-declaration": {
       }
     },
     "@babel/helper-string-parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
     },
     "@babel/helper-validator-option": {
       "version": "7.18.6",
       "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="
     },
     "@babel/helper-wrap-function": {
-      "version": "7.18.11",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz",
-      "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+      "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.18.11",
-        "@babel/types": "^7.18.10"
+        "@babel/traverse": "^7.20.5",
+        "@babel/types": "^7.20.5"
       }
     },
     "@babel/helpers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
-      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+      "version": "7.20.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+      "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
       "requires": {
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.20.5",
+        "@babel/types": "^7.20.5"
       }
     },
     "@babel/highlight": {
       }
     },
     "@babel/parser": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
-      "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg=="
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+      "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
       "version": "7.18.6",
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
-      "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+      "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.18.8",
-        "@babel/helper-compilation-targets": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/compat-data": "^7.20.1",
+        "@babel/helper-compilation-targets": "^7.20.0",
+        "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.18.8"
+        "@babel/plugin-transform-parameters": "^7.20.1"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
       }
     },
     "@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
-      "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+      "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-create-class-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-create-class-features-plugin": "^7.20.5",
+        "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       }
     },
       }
     },
     "@babel/plugin-syntax-import-assertions": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
-      "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+      "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-syntax-import-meta": {
       }
     },
     "@babel/plugin-syntax-typescript": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
-      "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
+      "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+      "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.20.2"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
-      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+      "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-compilation-targets": "^7.20.0",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "@babel/helper-replace-supers": "^7.19.1",
         "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
       }
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
-      "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+      "version": "7.20.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+      "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.20.2"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
-      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+      "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
-      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+      "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-simple-access": "^7.19.4"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
-      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+      "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
       "dev": true,
       "requires": {
         "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-module-transforms": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-validator-identifier": "^7.19.1"
       }
     },
     "@babel/plugin-transform-modules-umd": {
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
-      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+      "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+        "@babel/helper-plugin-utils": "^7.20.2"
       }
     },
     "@babel/plugin-transform-new-target": {
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.18.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
-      "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+      "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-plugin-utils": "^7.20.2"
       }
     },
     "@babel/plugin-transform-property-literals": {
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
-      "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+      "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "regenerator-transform": "^0.15.0"
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "regenerator-transform": "^0.15.1"
       }
     },
     "@babel/plugin-transform-reserved-words": {
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
-      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+      "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       }
     },
       }
     },
     "@babel/traverse": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
-      "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+      "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
       "requires": {
         "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.18.13",
+        "@babel/generator": "^7.20.5",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.18.13",
-        "@babel/types": "^7.18.13",
+        "@babel/parser": "^7.20.5",
+        "@babel/types": "^7.20.5",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       },
       "dependencies": {
         "@babel/generator": {
-          "version": "7.18.13",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
-          "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+          "version": "7.20.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+          "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
           "requires": {
-            "@babel/types": "^7.18.13",
+            "@babel/types": "^7.20.5",
             "@jridgewell/gen-mapping": "^0.3.2",
             "jsesc": "^2.5.1"
           }
       }
     },
     "@babel/types": {
-      "version": "7.18.13",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
-      "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+      "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
       "requires": {
-        "@babel/helper-string-parser": "^7.18.10",
-        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/helper-string-parser": "^7.19.4",
+        "@babel/helper-validator-identifier": "^7.19.1",
         "to-fast-properties": "^2.0.0"
       }
     },
       }
     },
     "@csstools/postcss-cascade-layers": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz",
-      "integrity": "sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
+      "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
       "dev": true,
       "requires": {
         "@csstools/selector-specificity": "^2.0.2",
       }
     },
     "@cypress/schematic": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.1.1.tgz",
-      "integrity": "sha512-Kf4QeNk8IVx3tdybls+xq8CbqsZwqR9dZjE3ELZhfG2rZeId9SSG6F2GpR4Xly5ROkX0BuQVeuIFNSkDxWAtPg==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.3.0.tgz",
+      "integrity": "sha512-LBKX20MUUYF2Xu+1+KpVbLCoMvt2Osa80yQfonduVsLJ/p8JxtLHqufuf/ryJp9Gm9R5sDfk/YhHL+rB7a+gsg==",
       "optional": true,
       "requires": {
         "@angular-devkit/architect": "^0.1402.1",
       "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
     },
     "@jridgewell/trace-mapping": {
-      "version": "0.3.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-      "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "requires": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "@leichtgewicht/ip-codec": {
       "dev": true
     },
     "@ng-bootstrap/ng-bootstrap": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.0.0.tgz",
-      "integrity": "sha512-aumflJ24VVOQ6kIGmpaWmjqfreRsXOCf/l2nOxPO6Y+d7Pit6aZthyjO7F0bRMutv6n+B/ma18GKvhhBcMepUw==",
+      "version": "13.1.1",
+      "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.1.1.tgz",
+      "integrity": "sha512-R6qnmFKT2EwwijBHw7rUXqyo5W90OImHOv7BlsxMNnZLIksWIhqwU00k4UBTfRTnd6JsTPuj/co3MaP61ajILA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@ng-select/ng-select": {
-      "version": "9.0.2",
-      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.0.2.tgz",
-      "integrity": "sha512-xdNiz/kgkMWYW1qFtk/337xDk/cmfEbSVtTFxWIM2OnIX1XsQOnTlGiBYces1TsMfqS68HjAvljEkj8QIGN2Lg==",
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.1.0.tgz",
+      "integrity": "sha512-vxSRD2d84H39eqtTJaethlpQ+xkJUU8epQNUr3yPiah23z8MBCqSDE1t0chxi+rXJz7+xoC9qFa1aYnUVFan4w==",
       "requires": {
         "tslib": "^2.3.1"
       }
     },
     "@ngneat/dirty-check-forms": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.2.tgz",
-      "integrity": "sha512-SKl3f/SqIdBMle7QorO4T90TqaWAjLe0xtJrTrzCsjC4uQlsk+old1DugUF16FJxAikPcBMoUABHa2iT3Uh75g==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.3.tgz",
+      "integrity": "sha512-YGlKrAaqTRO8lfT1xyN9LkYN0GH0crzdnXAxQFNEuNDQpCHv9cQ0j9XPDsonek6X4K7fLug84n0CQ42rSmGBqw==",
       "requires": {
         "tslib": ">=2.0.0"
       }
     },
     "@ngtools/webpack": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.7.tgz",
-      "integrity": "sha512-I47BdEybpzjfFFMFB691o9C+69RexLTgSm/VCyDn4M8DrGrZpgYNhxN+AEr1uA6Bi6MaPG6w+TMac5tNIaO4Yw==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.10.tgz",
+      "integrity": "sha512-sLHapZLVub6mEz5b19tf1VfIV1w3tYfg7FNPLeni79aldxu1FbP1v2WmiFAnMzrswqyK0bhTtxrl+Z/CLKqyoQ==",
       "dev": true,
       "requires": {}
     },
       "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
     },
     "@schematics/angular": {
-      "version": "14.2.7",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.7.tgz",
-      "integrity": "sha512-ujtLu0gWARtJsRbN+P+McDO0Y0ygJjUN5016SdbmYDMcDJkwi+GYHU8Yvh/UONtmNor3JdV8AnZ8OmWTlswTDA==",
+      "version": "14.2.10",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.10.tgz",
+      "integrity": "sha512-YFTc/9QJdx422XcApizEcVLKoyknu8b9zHIlAepZCu7WkV8GPT0hvVEHQ7KBWys5aQ7pPZMT0JpZLeAz0F2xYQ==",
       "devOptional": true,
       "requires": {
-        "@angular-devkit/core": "14.2.7",
-        "@angular-devkit/schematics": "14.2.7",
+        "@angular-devkit/core": "14.2.10",
+        "@angular-devkit/schematics": "14.2.10",
         "jsonc-parser": "3.1.0"
       }
     },
       "dev": true
     },
     "@sinclair/typebox": {
-      "version": "0.24.34",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz",
-      "integrity": "sha512-x3ejWKw7rpy30Bvm6U0AQMOHdjqe2E3YJrBHlTxH0KFsp77bBa+MH324nJxtXZFpnTy/JW2h5HPYVm0vG2WPnw==",
+      "version": "0.24.51",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
+      "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
       "dev": true
     },
     "@sinonjs/commons": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
-      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+      "version": "1.8.6",
+      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+      "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
       "dev": true,
       "requires": {
         "type-detect": "4.0.8"
       "dev": true
     },
     "@types/babel__core": {
-      "version": "7.1.19",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
-      "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
+      "version": "7.1.20",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
+      "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
       "dev": true,
       "requires": {
         "@babel/parser": "^7.1.0",
       }
     },
     "@types/babel__traverse": {
-      "version": "7.18.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
-      "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+      "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
       "dev": true,
       "requires": {
         "@babel/types": "^7.3.0"
       }
     },
     "@types/eslint": {
-      "version": "8.4.6",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
-      "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+      "version": "8.4.10",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
+      "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
       "dev": true,
       "requires": {
         "@types/estree": "*",
       }
     },
     "@types/jsdom": {
-      "version": "20.0.0",
-      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
-      "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
+      "version": "20.0.1",
+      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+      "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
       "dev": true,
       "requires": {
         "@types/node": "*",
           "dev": true
         },
         "parse5": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
-          "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+          "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
           "dev": true,
           "requires": {
-            "entities": "^4.3.0"
+            "entities": "^4.4.0"
           }
         }
       }
       "dev": true
     },
     "@types/node": {
-      "version": "18.7.23",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
-      "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+      "version": "18.11.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz",
+      "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==",
       "devOptional": true
     },
     "@types/parse-json": {
       "dev": true
     },
     "@types/prettier": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
-      "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
       "dev": true
     },
     "@types/qs": {
       }
     },
     "@types/yargs": {
-      "version": "17.0.12",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
-      "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
+      "version": "17.0.15",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.15.tgz",
+      "integrity": "sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg==",
       "dev": true,
       "requires": {
         "@types/yargs-parser": "*"
       }
     },
     "acorn": {
-      "version": "8.8.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
-      "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+      "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
       "dev": true
     },
     "acorn-globals": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
-      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+      "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
       "dev": true,
       "requires": {
-        "acorn": "^7.1.1",
-        "acorn-walk": "^7.1.1"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-          "dev": true
-        }
+        "acorn": "^8.1.0",
+        "acorn-walk": "^8.0.2"
       }
     },
     "acorn-import-assertions": {
       "requires": {}
     },
     "acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+      "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
       "dev": true
     },
     "adjust-sourcemap-loader": {
       },
       "dependencies": {
         "loader-utils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
           "dev": true,
           "requires": {
             "big.js": "^5.2.2",
       }
     },
     "anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "requires": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
       "optional": true
     },
     "autoprefixer": {
-      "version": "10.4.8",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
-      "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==",
+      "version": "10.4.13",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+      "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.21.3",
-        "caniuse-lite": "^1.0.30001373",
+        "browserslist": "^4.21.4",
+        "caniuse-lite": "^1.0.30001426",
         "fraction.js": "^4.2.0",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
       },
       "dependencies": {
         "loader-utils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
           "dev": true,
           "requires": {
             "big.js": "^5.2.2",
         }
       }
     },
-    "babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "dev": true,
-      "requires": {
-        "object.assign": "^4.1.0"
-      }
-    },
     "babel-plugin-istanbul": {
       "version": "6.1.1",
       "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
       }
     },
     "babel-plugin-polyfill-corejs2": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
-      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+      "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
       "dev": true,
       "requires": {
         "@babel/compat-data": "^7.17.7",
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
         "semver": "^6.1.1"
       },
       "dependencies": {
       }
     },
     "babel-plugin-polyfill-regenerator": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz",
-      "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==",
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+      "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
       "dev": true,
       "requires": {
-        "@babel/helper-define-polyfill-provider": "^0.3.2"
+        "@babel/helper-define-polyfill-provider": "^0.3.3"
       }
     },
     "babel-preset-current-node-syntax": {
       "dev": true
     },
     "bootstrap": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.1.tgz",
-      "integrity": "sha512-UQi3v2NpVPEi1n35dmRRzBJFlgvWHYwyem6yHhuT6afYF+sziEt46McRbT//kVXZ7b1YUYEVGdXEH74Nx3xzGA==",
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
+      "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
       "requires": {}
     },
     "brace-expansion": {
       "dev": true
     },
     "browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "requires": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       }
     },
     "bs-logger": {
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001388",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz",
-      "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ=="
+      "version": "1.0.30001435",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
+      "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA=="
     },
     "caseless": {
       "version": "0.12.0",
       "dev": true
     },
     "ci-info": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
-      "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+      "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
       "devOptional": true
     },
     "cjs-module-lexer": {
       "devOptional": true
     },
     "cli-table3": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
-      "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+      "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
       "optional": true,
       "requires": {
         "@colors/colors": "1.5.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+          "dev": true
         }
       }
     },
       "dev": true,
       "requires": {
         "safe-buffer": "5.2.1"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-          "dev": true
-        }
       }
     },
     "content-type": {
       "dev": true
     },
     "convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      }
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
     },
     "cookie": {
       "version": "0.5.0",
       }
     },
     "core-js-compat": {
-      "version": "3.25.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz",
-      "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==",
+      "version": "3.26.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+      "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.21.3",
-        "semver": "7.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-          "dev": true
-        }
+        "browserslist": "^4.21.4"
       }
     },
     "core-util-is": {
       "devOptional": true
     },
     "cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
       "dev": true,
       "requires": {
         "@types/parse-json": "^4.0.0",
       }
     },
     "cssdb": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz",
-      "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
+      "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
       "dev": true
     },
     "cssesc": {
       },
       "dependencies": {
         "@types/node": {
-          "version": "14.18.26",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz",
-          "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==",
+          "version": "14.18.34",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.34.tgz",
+          "integrity": "sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA==",
           "optional": true
         },
         "ansi-styles": {
       }
     },
     "date-fns": {
-      "version": "2.29.2",
-      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz",
-      "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==",
+      "version": "2.29.3",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+      "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
       "dev": true
     },
     "dayjs": {
-      "version": "1.11.5",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz",
-      "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==",
+      "version": "1.11.6",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
+      "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==",
       "optional": true
     },
     "debug": {
       }
     },
     "decimal.js": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
-      "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+      "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
       "dev": true
     },
     "dedent": {
       }
     },
     "defaults": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-      "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
       "devOptional": true,
       "requires": {
         "clone": "^1.0.2"
       "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
       "devOptional": true
     },
-    "define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
-      "dev": true,
-      "requires": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      }
-    },
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.240",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz",
-      "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow=="
+      "version": "1.4.284",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
     },
     "emittery": {
       "version": "0.10.2",
       }
     },
     "enhanced-resolve": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
-      "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+      "version": "5.12.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+      "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.4",
           "requires": {
             "side-channel": "^1.0.4"
           }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-          "dev": true
         }
       }
     },
       "devOptional": true
     },
     "fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
       "dev": true,
       "requires": {
         "@nodelib/fs.stat": "^2.0.2",
       }
     },
     "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
       "dev": true,
       "requires": {
         "bser": "2.1.1"
       }
     },
     "follow-redirects": {
-      "version": "1.15.1",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
-      "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
       "dev": true
     },
     "forever-agent": {
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
     "get-intrinsic": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
-      "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+      "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
       "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
       "dev": true
     },
     "global-dirs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
-      "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+      "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
       "optional": true,
       "requires": {
         "ini": "2.0.0"
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
     },
-    "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-      "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.1"
-      }
-    },
     "has-symbols": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
       "dev": true
     },
     "hosted-git-info": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz",
-      "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+      "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
       "devOptional": true,
       "requires": {
         "lru-cache": "^7.5.1"
             "util-deprecate": "~1.0.1"
           }
         },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+          "dev": true
+        },
         "string_decoder": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
       "devOptional": true
     },
     "ignore": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+      "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
       "dev": true
     },
     "ignore-walk": {
       }
     },
     "is-core-module": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
-      "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
       "devOptional": true,
       "requires": {
         "has": "^1.0.3"
       "dev": true
     },
     "istanbul-lib-instrument": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-      "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.12.3",
       }
     },
     "jest-environment-jsdom": {
-      "version": "29.2.2",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.2.2.tgz",
-      "integrity": "sha512-5mNtTcky1+RYv9kxkwMwt7fkzyX4EJUarV7iI+NQLigpV4Hz4sgfOdP4kOpCHXbkRWErV7tgXoXLm2CKtucr+A==",
+      "version": "29.3.1",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.3.1.tgz",
+      "integrity": "sha512-G46nKgiez2Gy4zvYNhayfMEAFlVHhWfncqvqS6yCd0i+a4NsSUD2WtrKSaYQrYiLQaupHXxCRi8xxVL2M9PbhA==",
       "dev": true,
       "requires": {
-        "@jest/environment": "^29.2.2",
-        "@jest/fake-timers": "^29.2.2",
-        "@jest/types": "^29.2.1",
+        "@jest/environment": "^29.3.1",
+        "@jest/fake-timers": "^29.3.1",
+        "@jest/types": "^29.3.1",
         "@types/jsdom": "^20.0.0",
         "@types/node": "*",
-        "jest-mock": "^29.2.2",
-        "jest-util": "^29.2.1",
+        "jest-mock": "^29.3.1",
+        "jest-util": "^29.3.1",
         "jsdom": "^20.0.0"
       },
       "dependencies": {
         "@jest/environment": {
-          "version": "29.2.2",
-          "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
-          "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz",
+          "integrity": "sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==",
           "dev": true,
           "requires": {
-            "@jest/fake-timers": "^29.2.2",
-            "@jest/types": "^29.2.1",
+            "@jest/fake-timers": "^29.3.1",
+            "@jest/types": "^29.3.1",
             "@types/node": "*",
-            "jest-mock": "^29.2.2"
+            "jest-mock": "^29.3.1"
           }
         },
         "@jest/fake-timers": {
-          "version": "29.2.2",
-          "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
-          "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz",
+          "integrity": "sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==",
           "dev": true,
           "requires": {
-            "@jest/types": "^29.2.1",
+            "@jest/types": "^29.3.1",
             "@sinonjs/fake-timers": "^9.1.2",
             "@types/node": "*",
-            "jest-message-util": "^29.2.1",
-            "jest-mock": "^29.2.2",
-            "jest-util": "^29.2.1"
+            "jest-message-util": "^29.3.1",
+            "jest-mock": "^29.3.1",
+            "jest-util": "^29.3.1"
           }
         },
         "@jest/schemas": {
           }
         },
         "@jest/types": {
-          "version": "29.2.1",
-          "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
-          "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz",
+          "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==",
           "dev": true,
           "requires": {
             "@jest/schemas": "^29.0.0",
           "dev": true
         },
         "jest-message-util": {
-          "version": "29.2.1",
-          "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
-          "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz",
+          "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==",
           "dev": true,
           "requires": {
             "@babel/code-frame": "^7.12.13",
-            "@jest/types": "^29.2.1",
+            "@jest/types": "^29.3.1",
             "@types/stack-utils": "^2.0.0",
             "chalk": "^4.0.0",
             "graceful-fs": "^4.2.9",
             "micromatch": "^4.0.4",
-            "pretty-format": "^29.2.1",
+            "pretty-format": "^29.3.1",
             "slash": "^3.0.0",
             "stack-utils": "^2.0.3"
           }
         },
         "jest-mock": {
-          "version": "29.2.2",
-          "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
-          "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz",
+          "integrity": "sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==",
           "dev": true,
           "requires": {
-            "@jest/types": "^29.2.1",
+            "@jest/types": "^29.3.1",
             "@types/node": "*",
-            "jest-util": "^29.2.1"
+            "jest-util": "^29.3.1"
           }
         },
         "jest-util": {
-          "version": "29.2.1",
-          "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
-          "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz",
+          "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==",
           "dev": true,
           "requires": {
-            "@jest/types": "^29.2.1",
+            "@jest/types": "^29.3.1",
             "@types/node": "*",
             "chalk": "^4.0.0",
             "ci-info": "^3.2.0",
           }
         },
         "pretty-format": {
-          "version": "29.2.1",
-          "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
-          "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
+          "version": "29.3.1",
+          "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
+          "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
           "dev": true,
           "requires": {
             "@jest/schemas": "^29.0.0",
       }
     },
     "jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
       "dev": true,
       "requires": {}
     },
     "jest-preset-angular": {
-      "version": "12.2.2",
-      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
-      "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
+      "version": "12.2.3",
+      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.3.tgz",
+      "integrity": "sha512-9vgawXuki/lg4IRPtl5k83krWLKADTal7BBm06xNAWOK09AbHK1foXqZdVOMObsWbaMDeQ1cjba60vS/aEVY4Q==",
       "dev": true,
       "requires": {
         "bs-logger": "^0.2.6",
             "@types/tough-cookie": "*"
           }
         },
+        "acorn-globals": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+          "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+          "dev": true,
+          "requires": {
+            "acorn": "^7.1.1",
+            "acorn-walk": "^7.1.1"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "7.4.1",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+              "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+              "dev": true
+            }
+          }
+        },
+        "acorn-walk": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+          "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+          "dev": true
+        },
         "form-data": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
           "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
           "dev": true
         },
+        "w3c-xmlserializer": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+          "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+          "dev": true,
+          "requires": {
+            "xml-name-validator": "^4.0.0"
+          }
+        },
         "whatwg-url": {
           "version": "10.0.0",
           "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
       }
     },
     "joi": {
-      "version": "17.6.0",
-      "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
-      "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+      "version": "17.7.0",
+      "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz",
+      "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==",
       "dev": true,
       "requires": {
         "@hapi/hoek": "^9.0.0",
       "optional": true
     },
     "jsdom": {
-      "version": "20.0.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
-      "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
+      "version": "20.0.3",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+      "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
       "dev": true,
       "requires": {
         "abab": "^2.0.6",
-        "acorn": "^8.7.1",
-        "acorn-globals": "^6.0.0",
+        "acorn": "^8.8.1",
+        "acorn-globals": "^7.0.0",
         "cssom": "^0.5.0",
         "cssstyle": "^2.3.0",
         "data-urls": "^3.0.2",
-        "decimal.js": "^10.3.1",
+        "decimal.js": "^10.4.2",
         "domexception": "^4.0.0",
         "escodegen": "^2.0.0",
         "form-data": "^4.0.0",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.1",
         "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.0",
-        "parse5": "^7.0.0",
+        "nwsapi": "^2.2.2",
+        "parse5": "^7.1.1",
         "saxes": "^6.0.0",
         "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.0.0",
-        "w3c-hr-time": "^1.0.2",
-        "w3c-xmlserializer": "^3.0.0",
+        "tough-cookie": "^4.1.2",
+        "w3c-xmlserializer": "^4.0.0",
         "webidl-conversions": "^7.0.0",
         "whatwg-encoding": "^2.0.0",
         "whatwg-mimetype": "^3.0.0",
         "whatwg-url": "^11.0.0",
-        "ws": "^8.8.0",
+        "ws": "^8.11.0",
         "xml-name-validator": "^4.0.0"
       },
       "dependencies": {
           }
         },
         "parse5": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
-          "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+          "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
           "dev": true,
           "requires": {
-            "entities": "^4.3.0"
+            "entities": "^4.4.0"
           }
         },
         "tough-cookie": {
       "dev": true
     },
     "loader-utils": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz",
-      "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
+      "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
       "dev": true
     },
     "locate-path": {
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
       "devOptional": true
     },
+    "lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "peer": true
+    },
     "lodash.debounce": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
       }
     },
     "lru-cache": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
-      "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==",
+      "version": "7.14.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+      "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
       "devOptional": true
     },
     "magic-string": {
       "dev": true
     },
     "memfs": {
-      "version": "3.4.9",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.9.tgz",
-      "integrity": "sha512-3rm8kbrzpUGRyPKSGuk387NZOwQ90O4rI9tsWQkzNW7BLSnKGp23RsEsKK8N8QVCrtJoAMqy3spxHC4os4G6PQ==",
+      "version": "3.4.12",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
+      "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
       "dev": true,
       "requires": {
         "fs-monkey": "^1.0.3"
       }
     },
     "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
       "devOptional": true
     },
     "minipass": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
-      "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "devOptional": true,
       "requires": {
         "yallist": "^4.0.0"
       "dev": true
     },
     "needle": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
-      "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+      "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
       "dev": true,
       "optional": true,
       "requires": {
       "dev": true
     },
     "ng2-pdf-viewer": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.2.tgz",
-      "integrity": "sha512-dVfrEOW0rusHjLGpGnkt2mDKdd3LKK9uXAbNxOCv94I2jS2QjciPHMELLKWCliBXiLNbDOTsQdCDQPvYT3vKgQ==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.3.tgz",
+      "integrity": "sha512-t2Gez92xPWPfY3qzzs+iLey5NUCYwJXIzv+dU4prY96aYdacsxuOpFjORW1+a330ryMkxYEJvEQ+mgbBJr77xw==",
       "requires": {
         "pdfjs-dist": "~2.14.305",
         "tslib": "^2.3.1"
       }
     },
     "ngx-file-drop": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.1.tgz",
-      "integrity": "sha512-OSsI1Qjs273Xi+tIkCoO/ciFx6gT9wwyZ1900O4ggniOiTNByNq+xBN8DASOcAqLxvkuri8en7MtZPu+jxX/6Q==",
+      "version": "14.0.2",
+      "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.2.tgz",
+      "integrity": "sha512-tIW+Ymd2IOjUQTqMb2NiuupeRPWwKe19kHmb13gf4Iw8rkvrO6PlqqZ3EqSGPIEJOmV836FZHpM4B1xXjVQLfA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
+    "ngx-ui-tour-core": {
+      "version": "9.2.1",
+      "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.2.1.tgz",
+      "integrity": "sha512-KpDSeNl69S1x+jUdREIkFgHGfpAyydxAt2aRUZ263kHZskME/CpaojEmjLCB+xUxEXij9Bq9tQxtGPm5IkJlPg==",
+      "requires": {
+        "tslib": "^2.0.0"
+      }
+    },
     "ngx-ui-tour-ng-bootstrap": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.1.0.tgz",
-      "integrity": "sha512-VQbQA+c4aYtUe/6yzY6BzawDHhIxwH0uck3SpJmlhhHLmydm1OCRjlmhVJHEIPggwxGOvO5h/Vs6iLmmwxn//g==",
+      "version": "11.3.2",
+      "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.3.2.tgz",
+      "integrity": "sha512-DEQ8ek9AGIdIPM6pGZ1Z8b0qY1kwgTppA30432CBBip7UES0KJFoT9BVHG99pA7Lx07GT9okqYh0zR3jPQh7uA==",
       "requires": {
-        "ngx-ui-tour-core": "9.1.0",
+        "ngx-ui-tour-core": "9.2.1",
         "tslib": "^2.0.0"
-      },
-      "dependencies": {
-        "ngx-ui-tour-core": {
-          "version": "9.1.0",
-          "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.1.0.tgz",
-          "integrity": "sha512-9fSvSoh0wUpaVFNo/D0Vs9NreL0esFBY3MFycONZD8b5SE7nX2+CZLzPbIVnigmj/KH3op5Pw8Pzkg2VHmXTcg==",
-          "requires": {
-            "tslib": "^2.0.0"
-          }
-        }
       }
     },
     "nice-napi": {
       "dev": true
     },
     "node-gyp": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz",
-      "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==",
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz",
+      "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==",
       "devOptional": true,
       "requires": {
         "env-paths": "^2.2.0",
         "glob": "^7.1.4",
         "graceful-fs": "^4.2.6",
         "make-fetch-happen": "^10.0.3",
-        "nopt": "^5.0.0",
+        "nopt": "^6.0.0",
         "npmlog": "^6.0.0",
         "rimraf": "^3.0.2",
         "semver": "^7.3.5",
       "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
     },
     "nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
+      "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
       "devOptional": true,
       "requires": {
-        "abbrev": "1"
+        "abbrev": "^1.0.0"
       }
     },
     "normalize-package-data": {
       }
     },
     "nwsapi": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
-      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+      "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
       "dev": true
     },
     "object-inspect": {
       "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
       "dev": true
     },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
-    },
-    "object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "has-symbols": "^1.0.3",
-        "object-keys": "^1.1.1"
-      }
-    },
     "obuf": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
       }
     },
     "postcss-custom-properties": {
-      "version": "12.1.8",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz",
-      "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==",
+      "version": "12.1.11",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
+      "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
       }
     },
     "postcss-nesting": {
-      "version": "10.1.10",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz",
-      "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==",
+      "version": "10.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz",
+      "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==",
       "dev": true,
       "requires": {
         "@csstools/selector-specificity": "^2.0.0",
       }
     },
     "postcss-selector-parser": {
-      "version": "6.0.10",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
-      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "version": "6.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+      "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
       "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
       "dev": true
     },
     "regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.2"
       "dev": true
     },
     "regenerator-transform": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
-      "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+      "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
       "dev": true,
       "requires": {
         "@babel/runtime": "^7.8.4"
       "dev": true
     },
     "regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
-        "unicode-match-property-value-ecmascript": "^2.0.0"
+        "unicode-match-property-value-ecmascript": "^2.1.0"
       }
     },
     "regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
       "dev": true
     },
     "regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "dev": true,
       "requires": {
         "jsesc": "~0.5.0"
       },
       "dependencies": {
         "loader-utils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
           "dev": true,
           "requires": {
             "big.js": "^5.2.2",
       }
     },
     "safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "devOptional": true
     },
     "safer-buffer": {
       "version": "2.1.2",
       "devOptional": true
     },
     "shell-quote": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
-      "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+      "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
       "dev": true
     },
     "side-channel": {
       }
     },
     "socks": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
-      "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
       "devOptional": true,
       "requires": {
         "ip": "^2.0.0",
       }
     },
     "stack-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
-      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
       "dev": true,
       "requires": {
         "escape-string-regexp": "^2.0.0"
       "devOptional": true,
       "requires": {
         "safe-buffer": "~5.2.0"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-          "devOptional": true
-        }
       }
     },
     "string-length": {
       }
     },
     "supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
       "dev": true,
       "requires": {
         "has-flag": "^4.0.0",
       "dev": true
     },
     "tar": {
-      "version": "6.1.11",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
-      "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+      "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
       "devOptional": true,
       "requires": {
         "chownr": "^2.0.0",
         "make-error": "^1.1.1",
         "v8-compile-cache-lib": "^3.0.1",
         "yn": "3.1.1"
-      },
-      "dependencies": {
-        "acorn-walk": {
-          "version": "8.2.0",
-          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
-          "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
-          "dev": true
-        }
       }
     },
     "tslib": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
-      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
     },
     "tslint": {
       "version": "6.1.3",
       }
     },
     "unicode-match-property-value-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
       "dev": true
     },
     "unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
       "dev": true
     },
     "unique-filename": {
       "optional": true
     },
     "update-browserslist-db": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.6.tgz",
-      "integrity": "sha512-We7BqM9XFlcW94Op93uW8+2LXvGezs7QA0WY+f1H7RR1q46B06W6hZF6LbmOlpCS1HU22q/6NOGTGW5sCm7NJQ==",
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
       "requires": {
         "escalade": "^3.1.1",
         "picocolors": "^1.0.0"
       }
     },
     "w3c-xmlserializer": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
-      "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+      "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
       "dev": true,
       "requires": {
         "xml-name-validator": "^4.0.0"
       }
     },
     "ws": {
-      "version": "8.8.1",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
-      "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+      "version": "8.11.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+      "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
       "dev": true,
       "requires": {}
     },
index 39e14d2740bb54329e1650fd0b16e34163c7479f..d45868d83f0a7604dee8f26bacf28d6889d9a979 100644 (file)
     "@angular/router": "~14.2.8",
     "@ng-bootstrap/ng-bootstrap": "^13.0.0",
     "@ng-select/ng-select": "^9.0.2",
-    "@ngneat/dirty-check-forms": "^3.0.2",
+    "@ngneat/dirty-check-forms": "^3.0.3",
     "@popperjs/core": "^2.11.6",
     "bootstrap": "^5.2.1",
     "file-saver": "^2.0.5",
     "ng2-pdf-viewer": "^9.1.2",
     "ngx-color": "^8.0.3",
     "ngx-cookie-service": "^14.0.1",
-    "ngx-file-drop": "^14.0.1",
+    "ngx-file-drop": "^14.0.2",
     "ngx-ui-tour-ng-bootstrap": "^11.1.0",
     "rxjs": "~7.5.7",
-    "tslib": "^2.3.1",
+    "tslib": "^2.4.1",
     "uuid": "^9.0.0",
     "zone.js": "~0.11.8"
   },
   "devDependencies": {
-    "@angular-builders/jest": "14.0.1",
+    "@angular-builders/jest": "14.1.0",
     "@angular-devkit/build-angular": "~14.2.7",
     "@angular/cli": "~14.2.7",
     "@angular/compiler-cli": "~14.2.8",
@@ -48,7 +48,7 @@
     "concurrently": "7.4.0",
     "jest": "28.1.3",
     "jest-environment-jsdom": "^29.2.2",
-    "jest-preset-angular": "^12.2.2",
+    "jest-preset-angular": "^12.2.3",
     "ts-node": "~10.9.1",
     "tslint": "~6.1.3",
     "typescript": "~4.8.4",
index 1627fc72d279380c466e9b64816fd9ac2d81b910..d0b3acd0e5a5939fe4d620a60dc576183170bd39 100644 (file)
@@ -154,6 +154,12 @@ const routes: Routes = [
           },
         },
       },
+      {
+        path: 'settings/:section',
+        component: SettingsComponent,
+        canDeactivate: [DirtyFormGuard],
+      },
+      { path: 'tasks', component: TasksComponent },
     ],
   },
 
index d0494aa593e86e26ee2e91df7169d2be8a32fa3f..320e9393ab790ae8c3f1a46d7fbe273b3a4af15b 100644 (file)
@@ -135,6 +135,10 @@ export class AppComponent implements OnInit, OnDestroy {
         }
       })
 
+    const prevBtnTitle = $localize`Prev`
+    const nextBtnTitle = $localize`Next`
+    const endBtnTitle = $localize`End`
+
     this.tourService.initialize([
       {
         anchorId: 'tour.dashboard',
@@ -142,12 +146,18 @@ export class AppComponent implements OnInit, OnDestroy {
         route: '/dashboard',
         enableBackdrop: true,
         delayAfterNavigation: 500,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.upload-widget',
         content: $localize`Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.`,
         route: '/dashboard',
         enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.documents',
@@ -157,6 +167,9 @@ export class AppComponent implements OnInit, OnDestroy {
         placement: 'bottom',
         enableBackdrop: true,
         disableScrollToAnchor: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.documents-filter-editor',
@@ -164,35 +177,45 @@ export class AppComponent implements OnInit, OnDestroy {
         route: '/documents?sort=created&reverse=1&page=1',
         placement: 'bottom',
         enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.documents-views',
         content: $localize`Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.`,
         route: '/documents?sort=created&reverse=1&page=1',
         enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.tags',
         content: $localize`Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.`,
         route: '/tags',
         enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.file-tasks',
         content: $localize`File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.`,
         route: '/tasks',
         enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.settings',
-        content: $localize`Check out the settings for various tweaks to the web app or to toggle settings for saved views.`,
+        content: $localize`Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.`,
         route: '/settings',
         enableBackdrop: true,
-      },
-      {
-        anchorId: 'tour.admin',
-        content: $localize`The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.`,
-        enableBackdrop: true,
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
       {
         anchorId: 'tour.outro',
@@ -202,6 +225,9 @@ export class AppComponent implements OnInit, OnDestroy {
           '<br/><br/>' +
           $localize`Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!`,
         route: '/dashboard',
+        prevBtnTitle,
+        nextBtnTitle,
+        endBtnTitle,
       },
     ])
 
index 3d862b06b977e9fe5dc86aa4f8aa17d749f9bf5c..65a7cda141361535e8b575c012808adb69cd6e88 100644 (file)
@@ -39,6 +39,7 @@ import { NgxFileDropModule } from 'ngx-file-drop'
 import { TextComponent } from './components/common/input/text/text.component'
 import { SelectComponent } from './components/common/input/select/select.component'
 import { CheckComponent } from './components/common/input/check/check.component'
+import { PasswordComponent } from './components/common/input/password/password.component'
 import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component'
 import { TagsComponent } from './components/common/input/tags/tags.component'
 import { IfPermissionsDirective } from './directives/if-permissions.directive'
@@ -81,6 +82,8 @@ import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap'
 import { UserEditDialogComponent } from './components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
 import { GroupEditDialogComponent } from './components/common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
 import { PermissionsSelectComponent } from './components/common/permissions-select/permissions-select.component'
+import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
 
 import localeBe from '@angular/common/locales/be'
 import localeCs from '@angular/common/locales/cs'
@@ -162,6 +165,7 @@ function initializeApp(settings: SettingsService) {
     TextComponent,
     SelectComponent,
     CheckComponent,
+    PasswordComponent,
     SaveViewConfigDialogComponent,
     TagsComponent,
     IfPermissionsDirective,
@@ -189,6 +193,8 @@ function initializeApp(settings: SettingsService) {
     UserEditDialogComponent,
     GroupEditDialogComponent,
     PermissionsSelectComponent,
+    MailAccountEditDialogComponent,
+    MailRuleEditDialogComponent,
   ],
   imports: [
     BrowserModule,
index 55dfc98901d2d703bfd7745dbe02a50fb41c2727..ce0de1b393caad897e9c434667e39fd459f5dc9a 100644 (file)
@@ -17,7 +17,7 @@
       </svg>
       <input class="form-control form-control-sm" type="text" placeholder="Search documents" aria-label="Search"
         [formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (keyup)="searchFieldKeyup($event)" (selectItem)="itemSelected($event)" i18n-placeholder>
-      <button *ngIf="!searchFieldEmpty" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0" (click)="resetSearchField()">
+      <button type="button" *ngIf="!searchFieldEmpty" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0" (click)="resetSearchField()">
         <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x me-1" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
           <path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
         </svg>
               </svg><span>&nbsp;<ng-container i18n>Settings</ng-container></span>
             </a>
           </li>
-          <li class="nav-item" *ifPermissions="{ action: PermissionAction.View, type: PermissionType.Admin }" tourAnchor="tour.admin">
-            <a class="nav-link" href="admin/" ngbPopover="Admin" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
-              <svg class="sidebaricon" fill="currentColor">
-                <use xlink:href="assets/bootstrap-icons.svg#toggles"/>
-              </svg><span>&nbsp;<ng-container i18n>Admin</ng-container></span>
-            </a>
-          </li>
         </ul>
 
         <h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted">
         </h6>
         <ul class="nav flex-column mb-2">
           <li class="nav-item" tourAnchor="tour.outro">
-            <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
+            <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://docs.paperless-ngx.com" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
               <svg class="sidebaricon" fill="currentColor">
                 <use xlink:href="assets/bootstrap-icons.svg#question-circle"/>
               </svg><span>&nbsp;<ng-container i18n>Documentation</ng-container></span>
index 6b7ca28f398c5bf91bf2edde3dc02341cf0a2bb5..7167bce44b5f69844c55103f71ad98e2cc979476 100644 (file)
@@ -97,6 +97,15 @@ export class AppFrameComponent
     this.isMenuCollapsed = true
   }
 
+  get openDocuments(): PaperlessDocument[] {
+    return this.openDocumentsService.getOpenDocuments()
+  }
+
+  @HostListener('window:beforeunload')
+  canDeactivate(): Observable<boolean> | boolean {
+    return !this.openDocumentsService.hasDirty()
+  }
+
   searchField = new FormControl('')
 
   get searchFieldEmpty(): boolean {
@@ -113,15 +122,6 @@ export class AppFrameComponent
     }
   }
 
-  get openDocuments(): PaperlessDocument[] {
-    return this.openDocumentsService.getOpenDocuments()
-  }
-
-  @HostListener('window:beforeunload')
-  canDeactivate(): Observable<boolean> | boolean {
-    return !this.openDocumentsService.hasDirty()
-  }
-
   searchAutoComplete = (text$: Observable<string>) =>
     text$.pipe(
       debounceTime(200),
index 25262ae4ff6c2c248069ddb34677ec5c7e26f634..9bf141e782c51e13aeb39d0d82e89860606bf774 100644 (file)
@@ -2,11 +2,9 @@ import { Directive, EventEmitter, Input, OnInit, Output } from '@angular/core'
 import { FormGroup } from '@angular/forms'
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
 import { Observable } from 'rxjs'
-import { map } from 'rxjs/operators'
 import { MATCHING_ALGORITHMS, MATCH_AUTO } from 'src/app/data/matching-model'
 import { ObjectWithId } from 'src/app/data/object-with-id'
 import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'
-import { ToastService } from 'src/app/services/toast.service'
 
 @Directive()
 export abstract class EditDialogComponent<T extends ObjectWithId>
@@ -94,16 +92,16 @@ export abstract class EditDialogComponent<T extends ObjectWithId>
         break
     }
     this.networkActive = true
-    serverResponse.subscribe(
-      (result) => {
+    serverResponse.subscribe({
+      next: (result) => {
         this.activeModal.close()
         this.success.emit(result)
       },
-      (error) => {
+      error: (error) => {
         this.error = error.error
         this.networkActive = false
-      }
-    )
+      },
+    })
   }
 
   cancel() {
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html
new file mode 100644 (file)
index 0000000..8164fca
--- /dev/null
@@ -0,0 +1,26 @@
+<form [formGroup]="objectForm" (ngSubmit)="save()">
+  <div class="modal-header">
+    <h4 class="modal-title" id="modal-basic-title">{{getTitle()}}</h4>
+    <button type="button" [disabled]="!closeEnabled" class="btn-close" aria-label="Close" (click)="cancel()">
+    </button>
+  </div>
+  <div class="modal-body">
+    <div class="row">
+      <div class="col">
+        <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
+        <app-input-text i18n-title title="IMAP Server" formControlName="imap_server" [error]="error?.imap_server"></app-input-text>
+        <app-input-text i18n-title title="IMAP Port" formControlName="imap_port" [error]="error?.imap_port"></app-input-text>
+        <app-input-select i18n-title title="IMAP Security" [items]="imapSecurityOptions" formControlName="imap_security"></app-input-select>
+      </div>
+      <div class="col">
+        <app-input-text i18n-title title="Username" formControlName="username" [error]="error?.username"></app-input-text>
+        <app-input-password i18n-title title="Password" formControlName="password" [error]="error?.password"></app-input-password>
+        <app-input-text i18n-title title="Character Set" formControlName="character_set" [error]="error?.character_set"></app-input-text>
+      </div>
+    </div>
+  </div>
+  <div class="modal-footer">
+    <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
+    <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
+  </div>
+</form>
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts
new file mode 100644 (file)
index 0000000..b2edb92
--- /dev/null
@@ -0,0 +1,50 @@
+import { Component } from '@angular/core'
+import { FormControl, FormGroup } from '@angular/forms'
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
+import {
+  IMAPSecurity,
+  PaperlessMailAccount,
+} from 'src/app/data/paperless-mail-account'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+
+const IMAP_SECURITY_OPTIONS = [
+  { id: IMAPSecurity.None, name: $localize`No encryption` },
+  { id: IMAPSecurity.SSL, name: $localize`SSL` },
+  { id: IMAPSecurity.STARTTLS, name: $localize`STARTTLS` },
+]
+
+@Component({
+  selector: 'app-mail-account-edit-dialog',
+  templateUrl: './mail-account-edit-dialog.component.html',
+  styleUrls: ['./mail-account-edit-dialog.component.scss'],
+})
+export class MailAccountEditDialogComponent extends EditDialogComponent<PaperlessMailAccount> {
+  constructor(service: MailAccountService, activeModal: NgbActiveModal) {
+    super(service, activeModal)
+  }
+
+  getCreateTitle() {
+    return $localize`Create new mail account`
+  }
+
+  getEditTitle() {
+    return $localize`Edit mail account`
+  }
+
+  getForm(): FormGroup {
+    return new FormGroup({
+      name: new FormControl(null),
+      imap_server: new FormControl(null),
+      imap_port: new FormControl(null),
+      imap_security: new FormControl(IMAPSecurity.SSL),
+      username: new FormControl(null),
+      password: new FormControl(null),
+      character_set: new FormControl('UTF-8'),
+    })
+  }
+
+  get imapSecurityOptions() {
+    return IMAP_SECURITY_OPTIONS
+  }
+}
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html
new file mode 100644 (file)
index 0000000..a8a476c
--- /dev/null
@@ -0,0 +1,39 @@
+<form [formGroup]="objectForm" (ngSubmit)="save()">
+  <div class="modal-header">
+    <h4 class="modal-title" id="modal-basic-title">{{getTitle()}}</h4>
+    <button type="button" [disabled]="!closeEnabled" class="btn-close" aria-label="Close" (click)="cancel()">
+    </button>
+  </div>
+  <div class="modal-body">
+    <div class="row">
+      <div class="col">
+        <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
+        <app-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></app-input-select>
+        <app-input-text i18n-title title="Folder" formControlName="folder" i18n-hint hint="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." [error]="error?.folder"></app-input-text>
+        <app-input-number i18n-title title="Maximum age (days)" formControlName="maximum_age" [showAdd]="false" [error]="error?.maximum_age"></app-input-number>
+        <app-input-select i18n-title title="Attachment type" [items]="attachmentTypeOptions" formControlName="attachment_type"></app-input-select>
+      </div>
+      <div class="col">
+        <p class="small" i18n>Paperless will only process mails that match <em>all</em> of the filters specified below.</p>
+        <app-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></app-input-text>
+        <app-input-text i18n-title title="Filter subject" formControlName="filter_subject" [error]="error?.filter_subject"></app-input-text>
+        <app-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></app-input-text>
+        <app-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" i18n-hint hint="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." [error]="error?.filter_attachment_filename"></app-input-text>
+      </div>
+      <div class="col">
+        <app-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></app-input-select>
+        <app-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></app-input-text>
+        <app-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></app-input-select>
+        <app-input-tags [allowCreate]="false" formControlName="assign_tags"></app-input-tags>
+        <app-input-select i18n-title title="Assign document type" [items]="documentTypes" [allowNull]="true" formControlName="assign_document_type"></app-input-select>
+        <app-input-select i18n-title title="Assign correspondent from" [items]="metadataCorrespondentOptions" formControlName="assign_correspondent_from"></app-input-select>
+        <app-input-select *ngIf="showCorrespondentField" i18n-title title="Assign correspondent" [items]="correspondents" [allowNull]="true" formControlName="assign_correspondent"></app-input-select>
+      </div>
+    </div>
+  </div>
+  <div class="modal-footer">
+    <span class="text-danger" *ngIf="error?.non_field_errors"><ng-container i18n>Error</ng-container>: {{error.non_field_errors}}</span>
+    <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
+    <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
+  </div>
+</form>
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts
new file mode 100644 (file)
index 0000000..126c496
--- /dev/null
@@ -0,0 +1,180 @@
+import { Component } from '@angular/core'
+import { FormControl, FormGroup } from '@angular/forms'
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { first } from 'rxjs'
+import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
+import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'
+import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import {
+  MailAction,
+  MailFilterAttachmentType,
+  MailMetadataCorrespondentOption,
+  MailMetadataTitleOption,
+  PaperlessMailRule,
+} from 'src/app/data/paperless-mail-rule'
+import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+
+const ATTACHMENT_TYPE_OPTIONS = [
+  {
+    id: MailFilterAttachmentType.Attachments,
+    name: $localize`Only process attachments.`,
+  },
+  {
+    id: MailFilterAttachmentType.Everything,
+    name: $localize`Process all files, including 'inline' attachments.`,
+  },
+]
+
+const ACTION_OPTIONS = [
+  {
+    id: MailAction.Delete,
+    name: $localize`Delete`,
+  },
+  {
+    id: MailAction.Move,
+    name: $localize`Move to specified folder`,
+  },
+  {
+    id: MailAction.MarkRead,
+    name: $localize`Mark as read, don't process read mails`,
+  },
+  {
+    id: MailAction.Flag,
+    name: $localize`Flag the mail, don't process flagged mails`,
+  },
+  {
+    id: MailAction.Tag,
+    name: $localize`Tag the mail with specified tag, don't process tagged mails`,
+  },
+]
+
+const METADATA_TITLE_OPTIONS = [
+  {
+    id: MailMetadataTitleOption.FromSubject,
+    name: $localize`Use subject as title`,
+  },
+  {
+    id: MailMetadataTitleOption.FromFilename,
+    name: $localize`Use attachment filename as title`,
+  },
+]
+
+const METADATA_CORRESPONDENT_OPTIONS = [
+  {
+    id: MailMetadataCorrespondentOption.FromNothing,
+    name: $localize`Do not assign a correspondent`,
+  },
+  {
+    id: MailMetadataCorrespondentOption.FromEmail,
+    name: $localize`Use mail address`,
+  },
+  {
+    id: MailMetadataCorrespondentOption.FromName,
+    name: $localize`Use name (or mail address if not available)`,
+  },
+  {
+    id: MailMetadataCorrespondentOption.FromCustom,
+    name: $localize`Use correspondent selected below`,
+  },
+]
+
+@Component({
+  selector: 'app-mail-rule-edit-dialog',
+  templateUrl: './mail-rule-edit-dialog.component.html',
+  styleUrls: ['./mail-rule-edit-dialog.component.scss'],
+})
+export class MailRuleEditDialogComponent extends EditDialogComponent<PaperlessMailRule> {
+  accounts: PaperlessMailAccount[]
+  correspondents: PaperlessCorrespondent[]
+  documentTypes: PaperlessDocumentType[]
+
+  constructor(
+    service: MailRuleService,
+    activeModal: NgbActiveModal,
+    accountService: MailAccountService,
+    correspondentService: CorrespondentService,
+    documentTypeService: DocumentTypeService
+  ) {
+    super(service, activeModal)
+
+    accountService
+      .listAll()
+      .pipe(first())
+      .subscribe((result) => (this.accounts = result.results))
+
+    correspondentService
+      .listAll()
+      .pipe(first())
+      .subscribe((result) => (this.correspondents = result.results))
+
+    documentTypeService
+      .listAll()
+      .pipe(first())
+      .subscribe((result) => (this.documentTypes = result.results))
+  }
+
+  getCreateTitle() {
+    return $localize`Create new mail rule`
+  }
+
+  getEditTitle() {
+    return $localize`Edit mail rule`
+  }
+
+  getForm(): FormGroup {
+    return new FormGroup({
+      name: new FormControl(null),
+      account: new FormControl(null),
+      folder: new FormControl('INBOX'),
+      filter_from: new FormControl(null),
+      filter_subject: new FormControl(null),
+      filter_body: new FormControl(null),
+      filter_attachment_filename: new FormControl(null),
+      maximum_age: new FormControl(null),
+      attachment_type: new FormControl(MailFilterAttachmentType.Attachments),
+      action: new FormControl(MailAction.MarkRead),
+      action_parameter: new FormControl(null),
+      assign_title_from: new FormControl(MailMetadataTitleOption.FromSubject),
+      assign_tags: new FormControl([]),
+      assign_document_type: new FormControl(null),
+      assign_correspondent_from: new FormControl(
+        MailMetadataCorrespondentOption.FromNothing
+      ),
+      assign_correspondent: new FormControl(null),
+    })
+  }
+
+  get showCorrespondentField(): boolean {
+    return (
+      this.objectForm?.get('assign_correspondent_from')?.value ==
+      MailMetadataCorrespondentOption.FromCustom
+    )
+  }
+
+  get showActionParamField(): boolean {
+    return (
+      this.objectForm?.get('action')?.value == MailAction.Move ||
+      this.objectForm?.get('action')?.value == MailAction.Tag
+    )
+  }
+
+  get attachmentTypeOptions() {
+    return ATTACHMENT_TYPE_OPTIONS
+  }
+
+  get actionOptions() {
+    return ACTION_OPTIONS
+  }
+
+  get metadataTitleOptions() {
+    return METADATA_TITLE_OPTIONS
+  }
+
+  get metadataCorrespondentOptions() {
+    return METADATA_CORRESPONDENT_OPTIONS
+  }
+}
index 371fb16fa8803d0b55946d5b99131bb3e02ea861..280c101a6824e9faaad25bf10f0ed96e44687eff 100644 (file)
@@ -7,7 +7,7 @@
   <div class="modal-body">
 
     <p *ngIf="this.dialogMode == 'edit'" i18n>
-      <em>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">documentation</a>.</em>
+      <em>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">documentation</a>.</em>
     </p>
 
     <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
index 6be9dfe2838f0b8087ee941cd4372102f78e08e5..1dfef00c54e65b34685268a42dcd3be7158bdb4a 100644 (file)
@@ -22,7 +22,7 @@ export class StoragePathEditDialogComponent extends EditDialogComponent<Paperles
       ' <code>{created_year}-{title}</code> ' +
       $localize`or use slashes to add directories e.g.` +
       ' <code>{created_year}/{correspondent}/{title}</code>. ' +
-      $localize`See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.`
+      $localize`See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.`
     )
   }
 
index 3e2cc8d86041f529b1bd2b03a2f26f8faf26fa9e..ceff40250cf2ca931c1f42a6c167619c196f9bee 100644 (file)
@@ -2,7 +2,7 @@
   <label class="form-label" [for]="inputId">{{title}}</label>
   <div class="input-group" [class.is-invalid]="error">
     <input type="number" class="form-control" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" [class.is-invalid]="error">
-    <button class="btn btn-outline-secondary" type="button" id="button-addon1" (click)="nextAsn()" [disabled]="value">+1</button>
+    <button *ngIf="showAdd" class="btn btn-outline-secondary" type="button" id="button-addon1" (click)="nextAsn()" [disabled]="value">+1</button>
   </div>
   <div class="invalid-feedback">
     {{error}}
index cb29ff5e56b76476732339f03ecb1fc323ba393b..5ed861b5a95577974864e40973ddf2926bc58edf 100644 (file)
@@ -1,4 +1,4 @@
-import { Component, forwardRef } from '@angular/core'
+import { Component, forwardRef, Input } from '@angular/core'
 import { NG_VALUE_ACCESSOR } from '@angular/forms'
 import { FILTER_ASN_ISNULL } from 'src/app/data/filter-rule-type'
 import { DocumentService } from 'src/app/services/rest/document.service'
@@ -17,6 +17,9 @@ import { AbstractInputComponent } from '../abstract-input'
   styleUrls: ['./number.component.scss'],
 })
 export class NumberComponent extends AbstractInputComponent<number> {
+  @Input()
+  showAdd: boolean = true
+
   constructor(private documentService: DocumentService) {
     super()
   }
diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html
new file mode 100644 (file)
index 0000000..57cdd6d
--- /dev/null
@@ -0,0 +1,8 @@
+<div class="mb-3">
+  <label class="form-label" [for]="inputId">{{title}}</label>
+  <input #inputField type="password" class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)">
+  <small *ngIf="hint" class="form-text text-muted" [innerHTML]="hint | safeHtml"></small>
+  <div class="invalid-feedback">
+    {{error}}
+  </div>
+</div>
diff --git a/src-ui/src/app/components/common/input/password/password.component.scss b/src-ui/src/app/components/common/input/password/password.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts
new file mode 100644 (file)
index 0000000..3216dbe
--- /dev/null
@@ -0,0 +1,21 @@
+import { Component, forwardRef } from '@angular/core'
+import { NG_VALUE_ACCESSOR } from '@angular/forms'
+import { AbstractInputComponent } from '../abstract-input'
+
+@Component({
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => PasswordComponent),
+      multi: true,
+    },
+  ],
+  selector: 'app-input-password',
+  templateUrl: './password.component.html',
+  styleUrls: ['./password.component.scss'],
+})
+export class PasswordComponent extends AbstractInputComponent<string> {
+  constructor() {
+    super()
+  }
+}
index 77e25d88d3a4664435ac7f398f238deb49ead3d5..14de0f98a23f6f1971882ff6ca7c3748a4baf193 100644 (file)
@@ -7,7 +7,7 @@
       [closeOnSelect]="false"
       [clearSearchOnAdd]="true"
       [hideSelected]="true"
-      [addTag]="createTagRef"
+      [addTag]="allowCreate ? createTagRef : false"
       addTagText="Add tag"
       i18n-addTagText
       (change)="onChange(value)"
@@ -31,7 +31,7 @@
       </ng-template>
     </ng-select>
 
-    <button class="btn btn-outline-secondary" type="button" (click)="createTag()">
+    <button *ngIf="allowCreate" class="btn btn-outline-secondary" type="button" (click)="createTag()">
       <svg class="buttonicon" fill="currentColor">
         <use xlink:href="assets/bootstrap-icons.svg#plus" />
       </svg>
index ecc63c54ccf05fb639831bdda43be1104505f8dc..b6cd1413d0b446a9ee3734bd5acfb6a69eb7f378 100644 (file)
@@ -54,6 +54,9 @@ export class TagsComponent implements OnInit, ControlValueAccessor {
   @Input()
   suggestions: number[]
 
+  @Input()
+  allowCreate: boolean = true
+
   value: number[]
 
   tags: PaperlessTag[]
index c12846b7e66383d5caeaa5a7ff73f8e068dc101e..f33e5621af63823f77dadddd732b89454c034ee8 100644 (file)
@@ -2,7 +2,7 @@
   <!-- [dismissible]="isFinished(status)" (closed)="dismiss(status)" -->
   <h4 class="alert-heading"><ng-container i18n>Paperless-ngx is running!</ng-container> 🎉</h4>
   <p i18n>You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</p>
-  <p i18n>More detail on how to use and configure Paperless-ngx is always available in the <a href="https://paperless-ngx.readthedocs.io" target="_blank">documentation</a>.</p>
+  <p i18n>More detail on how to use and configure Paperless-ngx is always available in the <a href="https://docs.paperless-ngx.com" target="_blank">documentation</a>.</p>
   <hr>
   <div class="d-flex align-items-end">
     <p class="lead fs-6 m-0"><em i18n>Thanks for being a part of the Paperless-ngx community!</em></p>
index 5c49a8a9e82cf30ccd9f80374acf2aae8034ca95..624ea7720fc36a0592663b70e5987027a619b033 100644 (file)
@@ -500,7 +500,7 @@ export class DocumentDetailComponent
         .subscribe({
           next: () => {
             this.toastService.showInfo(
-              $localize`Redo OCR operation will begin in the background.`
+              $localize`Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.`
             )
             if (modal) {
               modal.close()
index e9787563715afd2ffaa9a49c6bb445a4c238382b..960f97b736541e24fb750d2a4d9f4437229c4225 100644 (file)
@@ -126,8 +126,20 @@ export abstract class ManagementListComponent<T extends ObjectWithId>
       backdrop: 'static',
     })
     activeModal.componentInstance.dialogMode = 'create'
-    activeModal.componentInstance.success.subscribe((o) => {
-      this.reloadData()
+    activeModal.componentInstance.success.subscribe({
+      next: () => {
+        this.reloadData()
+        this.toastService.showInfo(
+          $localize`Successfully created ${this.typeName}.`
+        )
+      },
+      error: (e) => {
+        this.toastService.showInfo(
+          $localize`Error occurred while creating ${
+            this.typeName
+          } : ${e.toString()}.`
+        )
+      },
     })
   }
 
@@ -137,8 +149,20 @@ export abstract class ManagementListComponent<T extends ObjectWithId>
     })
     activeModal.componentInstance.object = object
     activeModal.componentInstance.dialogMode = 'edit'
-    activeModal.componentInstance.success.subscribe((o) => {
-      this.reloadData()
+    activeModal.componentInstance.success.subscribe({
+      next: () => {
+        this.reloadData()
+        this.toastService.showInfo(
+          $localize`Successfully updated ${this.typeName}.`
+        )
+      },
+      error: (e) => {
+        this.toastService.showInfo(
+          $localize`Error occurred while saving ${
+            this.typeName
+          } : ${e.toString()}.`
+        )
+      },
     })
   }
 
index 51f44b6666fa120d072a50fed8a9fa8cdfd6a00f..dd3ada2967d329b20dde4fba88824cd7c35e2b79 100644 (file)
@@ -1,11 +1,16 @@
 <app-page-header title="Settings" i18n-title>
   <button class="btn btn-sm btn-outline-primary" (click)="tourService.start()"><ng-container i18n>Start tour</ng-container></button>
+  <a class="btn btn-sm btn-primary ms-3" href="admin/" target="_blank">
+      <ng-container i18n>Open Django Admin</ng-container>
+      <svg class="sidebaricon ms-1" fill="currentColor">
+        <use xlink:href="assets/bootstrap-icons.svg#arrow-up-right"/>
+      </svg>
+  </a>
 </app-page-header>
 
-<!-- <p>items per page, documents per view type</p> -->
 <form [formGroup]="settingsForm" (ngSubmit)="saveSettings()">
 
-  <ul ngbNav #nav="ngbNav" (navChange)="maybeInitializeTab($event)" [(activeId)]="activeNavID" class="nav-tabs">
+  <ul ngbNav #nav="ngbNav" (navChange)="onNavChange($event)" [(activeId)]="activeNavID" class="nav-tabs">
     <li [ngbNavItem]="SettingsNavIDs.General">
       <a ngbNavLink i18n>General</a>
       <ng-template ngbNavContent>
       </ng-template>
     </li>
 
+    <li [ngbNavItem]="SettingsNavIDs.Mail" (mouseover)="maybeInitializeTab(SettingsNavIDs.Mail)" (focusin)="maybeInitializeTab(SettingsNavIDs.Mail)">
+      <a ngbNavLink i18n>Mail</a>
+      <ng-template ngbNavContent>
+
+        <ng-container *ngIf="mailAccounts && mailRules">
+          <h4>
+            <ng-container i18n>Mail accounts</ng-container>
+            <button type="button" class="btn btn-sm btn-primary ms-4" (click)="editMailAccount()">
+              <svg class="sidebaricon me-1" fill="currentColor">
+                <use xlink:href="assets/bootstrap-icons.svg#plus-circle" />
+              </svg>
+              <ng-container i18n>Add Account</ng-container>
+            </button>
+          </h4>
+          <ul class="list-group" formGroupName="mailAccounts">
+
+              <li class="list-group-item">
+                <div class="row">
+                  <div class="col" i18n>Name</div>
+                  <div class="col" i18n>Server</div>
+                  <div class="col" i18n>Actions</div>
+                </div>
+              </li>
+
+              <li *ngFor="let account of mailAccounts" class="list-group-item" [formGroupName]="account.id">
+                <div class="row">
+                  <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailAccount(account)">{{account.name}}</button></div>
+                  <div class="col d-flex align-items-center">{{account.imap_server}}</div>
+                  <div class="col">
+                    <div class="btn-group">
+                      <button class="btn btn-sm btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button>
+                      <button class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailAccount(account)" i18n>Delete</button>
+                    </div>
+                  </div>
+                </div>
+              </li>
+
+              <div *ngIf="mailAccounts.length == 0" i18n>No mail accounts defined.</div>
+          </ul>
+
+          <h4 class="mt-4">
+            <ng-container i18n>Mail rules</ng-container>
+            <button type="button" class="btn btn-sm btn-primary ms-4" (click)="editMailRule()">
+              <svg class="sidebaricon me-1" fill="currentColor">
+                <use xlink:href="assets/bootstrap-icons.svg#plus-circle" />
+              </svg>
+              <ng-container i18n>Add Rule</ng-container>
+            </button>
+          </h4>
+          <ul class="list-group" formGroupName="mailRules">
+
+              <li class="list-group-item">
+                <div class="row">
+                  <div class="col" i18n>Name</div>
+                  <div class="col" i18n>Account</div>
+                  <div class="col" i18n>Actions</div>
+                </div>
+              </li>
+
+              <li *ngFor="let rule of mailRules" class="list-group-item" [formGroupName]="rule.id">
+                <div class="row">
+                  <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailRule(rule)">{{rule.name}}</button></div>
+                  <div class="col d-flex align-items-center">{{(mailAccountService.getCached(rule.account) | async)?.name}}</div>
+                  <div class="col">
+                    <div class="btn-group">
+                      <button class="btn btn-sm btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button>
+                      <button class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailRule(rule)" i18n>Delete</button>
+                    </div>
+                  </div>
+                </div>
+              </li>
+
+              <div *ngIf="mailRules.length == 0" i18n>No mail rules defined.</div>
+          </ul>
+        </ng-container>
+
+        <div *ngIf="!mailAccounts || !mailRules">
+          <div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
+          <div class="visually-hidden" i18n>Loading...</div>
+        </div>
+
+      </ng-template>
+    </li>
+
     <li [ngbNavItem]="SettingsNavIDs.UsersGroups" *ifPermissions="{ action: PermissionAction.Add, type: PermissionType.User }" (mouseover)="maybeInitializeTab(SettingsNavIDs.UsersGroups)" (focusin)="maybeInitializeTab(SettingsNavIDs.UsersGroups)">
       <a ngbNavLink i18n>Users & Groups</a>
       <ng-template ngbNavContent>
index ee73091217e5eb5febba65adf5cd00d0ea848c70..8c7df6edc1d36c916d4ec6491477acc362ee09f5 100644 (file)
@@ -26,7 +26,7 @@ import {
   Subject,
 } from 'rxjs'
 import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
-import { ActivatedRoute } from '@angular/router'
+import { ActivatedRoute, Router } from '@angular/router'
 import { ViewportScroller } from '@angular/common'
 import { TourService } from 'ngx-ui-tour-ng-bootstrap'
 import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
@@ -39,6 +39,12 @@ import { PaperlessGroup } from 'src/app/data/paperless-group'
 import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
 import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
 import { GroupEditDialogComponent } from '../../common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
 
 enum SettingsNavIDs {
   General = 1,
@@ -64,6 +70,9 @@ export class SettingsComponent
   usersGroup = new FormGroup({})
   groupsGroup = new FormGroup({})
 
+  mailAccountGroup = new FormGroup({})
+  mailRuleGroup = new FormGroup({})
+
   settingsForm = new FormGroup({
     bulkEditConfirmationDialogs: new FormControl(null),
     bulkEditApplyOnClose: new FormControl(null),
@@ -74,22 +83,30 @@ export class SettingsComponent
     darkModeInvertThumbs: new FormControl(null),
     themeColor: new FormControl(null),
     useNativePdfViewer: new FormControl(null),
-    savedViews: this.savedViewGroup,
     displayLanguage: new FormControl(null),
     dateLocale: new FormControl(null),
     dateFormat: new FormControl(null),
+    commentsEnabled: new FormControl(null),
+    updateCheckingEnabled: new FormControl(null),
+
     notificationsConsumerNewDocument: new FormControl(null),
     notificationsConsumerSuccess: new FormControl(null),
     notificationsConsumerFailed: new FormControl(null),
     notificationsConsumerSuppressOnDashboard: new FormControl(null),
-    commentsEnabled: new FormControl(null),
-    updateCheckingEnabled: new FormControl(null),
     usersGroup: this.usersGroup,
     groupsGroup: this.groupsGroup,
+
+    savedViews: this.savedViewGroup,
+
+    mailAccounts: this.mailAccountGroup,
+    mailRules: this.mailRuleGroup,
   })
 
   savedViews: PaperlessSavedView[]
 
+  mailAccounts: PaperlessMailAccount[]
+  mailRules: PaperlessMailRule[]
+
   store: BehaviorSubject<any>
   storeSub: Subscription
   isDirty$: Observable<boolean>
@@ -110,6 +127,8 @@ export class SettingsComponent
 
   constructor(
     public savedViewService: SavedViewService,
+    public mailAccountService: MailAccountService,
+    public mailRuleService: MailRuleService,
     private documentListViewService: DocumentListViewService,
     private toastService: ToastService,
     private settings: SettingsService,
@@ -119,6 +138,7 @@ export class SettingsComponent
     public readonly tourService: TourService,
     private usersService: UserService,
     private groupsService: GroupService,
+    private router: Router,
     private modalService: NgbModal
   ) {
     super()
@@ -127,6 +147,23 @@ export class SettingsComponent
     })
   }
 
+  ngOnInit() {
+    this.initialize()
+
+    this.activatedRoute.paramMap.subscribe((paramMap) => {
+      const section = paramMap.get('section')
+      if (section) {
+        const navIDKey: string = Object.keys(SettingsNavIDs).find(
+          (navID) => navID.toLowerCase() == section
+        )
+        if (navIDKey) {
+          this.activeNavID = SettingsNavIDs[navIDKey]
+          this.maybeInitializeTab(this.activeNavID)
+        }
+      }
+    })
+  }
+
   ngAfterViewInit(): void {
     if (this.activatedRoute.snapshot.fragment) {
       this.viewportScroller.scrollToAnchor(
@@ -156,10 +193,13 @@ export class SettingsComponent
       useNativePdfViewer: this.settings.get(
         SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER
       ),
-      savedViews: {},
       displayLanguage: this.settings.getLanguage(),
       dateLocale: this.settings.get(SETTINGS_KEYS.DATE_LOCALE),
       dateFormat: this.settings.get(SETTINGS_KEYS.DATE_FORMAT),
+      commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED),
+      updateCheckingEnabled: this.settings.get(
+        SETTINGS_KEYS.UPDATE_CHECKING_ENABLED
+      ),
       notificationsConsumerNewDocument: this.settings.get(
         SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT
       ),
@@ -172,28 +212,38 @@ export class SettingsComponent
       notificationsConsumerSuppressOnDashboard: this.settings.get(
         SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD
       ),
-      commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED),
-      updateCheckingEnabled: this.settings.get(
-        SETTINGS_KEYS.UPDATE_CHECKING_ENABLED
-      ),
       usersGroup: {},
       groupsGroup: {},
+      savedViews: {},
+      mailAccounts: {},
+      mailRules: {},
     }
   }
 
-  ngOnInit() {
-    this.initialize()
+  onNavChange(navChangeEvent: NgbNavChangeEvent) {
+    this.maybeInitializeTab(navChangeEvent.nextId)
+    const [foundNavIDkey, foundNavIDValue] = Object.entries(
+      SettingsNavIDs
+    ).find(([navIDkey, navIDValue]) => navIDValue == navChangeEvent.nextId)
+    if (foundNavIDkey)
+      // if its dirty we need to wait for confirmation
+      this.router
+        .navigate(['settings', foundNavIDkey.toLowerCase()])
+        .then((navigated) => {
+          if (!navigated && this.isDirty) {
+            this.activeNavID = navChangeEvent.activeId
+          } else if (navigated && this.isDirty) {
+            this.initialize()
+          }
+        })
   }
 
-  // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or on nav change event
-  maybeInitializeTab(navIDorEvent: number | NgbNavChangeEvent): void {
-    const navID =
-      typeof navIDorEvent == 'number' ? navIDorEvent : navIDorEvent.nextId
-    // initialize saved views
+  // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or called from nav change event
+  maybeInitializeTab(navID: number): void {
     if (navID == SettingsNavIDs.SavedViews && !this.savedViews) {
       this.savedViewService.listAll().subscribe((r) => {
         this.savedViews = r.results
-        this.initialize()
+        this.initialize(false)
       })
     } else if (
       (navID == SettingsNavIDs.UsersGroups && !this.users) ||
@@ -201,18 +251,31 @@ export class SettingsComponent
     ) {
       this.usersService.listAll().subscribe((r) => {
         this.users = r.results
-
         this.groupsService.listAll().subscribe((r) => {
           this.groups = r.results
           this.initialize()
         })
       })
+    } else if (
+      navID == SettingsNavIDs.Mail &&
+      (!this.mailAccounts || !this.mailRules)
+    ) {
+      this.mailAccountService.listAll().subscribe((r) => {
+        this.mailAccounts = r.results
+
+        this.mailRuleService.listAll().subscribe((r) => {
+          this.mailRules = r.results
+          this.initialize(false)
+        })
+      })
     }
   }
 
-  initialize() {
+  initialize(resetSettings: boolean = true) {
     this.unsubscribeNotifier.next(true)
 
+    const currentFormValue = this.settingsForm.value
+
     let storeData = this.getCurrentSettings()
 
     if (this.savedViews) {
@@ -279,6 +342,76 @@ export class SettingsComponent
       }
     }
 
+    if (this.mailAccounts && this.mailRules) {
+      for (let account of this.mailAccounts) {
+        storeData.mailAccounts[account.id.toString()] = {
+          id: account.id,
+          name: account.name,
+          imap_server: account.imap_server,
+          imap_port: account.imap_port,
+          imap_security: account.imap_security,
+          username: account.username,
+          password: account.password,
+          character_set: account.character_set,
+        }
+        this.mailAccountGroup.addControl(
+          account.id.toString(),
+          new FormGroup({
+            id: new FormControl(null),
+            name: new FormControl(null),
+            imap_server: new FormControl(null),
+            imap_port: new FormControl(null),
+            imap_security: new FormControl(null),
+            username: new FormControl(null),
+            password: new FormControl(null),
+            character_set: new FormControl(null),
+          })
+        )
+      }
+
+      for (let rule of this.mailRules) {
+        storeData.mailRules[rule.id.toString()] = {
+          name: rule.name,
+          account: rule.account,
+          folder: rule.folder,
+          filter_from: rule.filter_from,
+          filter_subject: rule.filter_subject,
+          filter_body: rule.filter_body,
+          filter_attachment_filename: rule.filter_attachment_filename,
+          maximum_age: rule.maximum_age,
+          attachment_type: rule.attachment_type,
+          action: rule.action,
+          action_parameter: rule.action_parameter,
+          assign_title_from: rule.assign_title_from,
+          assign_tags: rule.assign_tags,
+          assign_document_type: rule.assign_document_type,
+          assign_correspondent_from: rule.assign_correspondent_from,
+          assign_correspondent: rule.assign_correspondent,
+        }
+        this.mailRuleGroup.addControl(
+          rule.id.toString(),
+          new FormGroup({
+            name: new FormControl(null),
+            account: new FormControl(null),
+            folder: new FormControl(null),
+            filter_from: new FormControl(null),
+            filter_subject: new FormControl(null),
+            filter_body: new FormControl(null),
+            filter_attachment_filename: new FormControl(null),
+            maximum_age: new FormControl(null),
+            attachment_type: new FormControl(null),
+            action: new FormControl(null),
+            action_parameter: new FormControl(null),
+            assign_title_from: new FormControl(null),
+            assign_tags: new FormControl(null),
+            assign_document_type: new FormControl(null),
+            assign_correspondent_from: new FormControl(null),
+            assign_correspondent: new FormControl(null),
+          })
+        )
+      }
+    }
+
     this.store = new BehaviorSubject(storeData)
 
     this.storeSub = this.store.asObservable().subscribe((state) => {
@@ -305,6 +438,11 @@ export class SettingsComponent
           this.settingsForm.get('themeColor').value
         )
       })
+
+    if (!resetSettings && currentFormValue) {
+      // prevents loss of unsaved changes
+      this.settingsForm.patchValue(currentFormValue)
+    }
   }
 
   ngOnDestroy() {
@@ -585,4 +723,121 @@ export class SettingsComponent
       })
     })
   }
+
+  editMailAccount(account: PaperlessMailAccount) {
+    const modal = this.modalService.open(MailAccountEditDialogComponent, {
+      backdrop: 'static',
+      size: 'xl',
+    })
+    modal.componentInstance.dialogMode = account ? 'edit' : 'create'
+    modal.componentInstance.object = account
+    modal.componentInstance.success
+      .pipe(takeUntil(this.unsubscribeNotifier))
+      .subscribe({
+        next: (newMailAccount) => {
+          this.toastService.showInfo(
+            $localize`Saved account "${newMailAccount.name}".`
+          )
+          this.mailAccountService.clearCache()
+          this.mailAccountService.listAll().subscribe((r) => {
+            this.mailAccounts = r.results
+            this.initialize()
+          })
+        },
+        error: (e) => {
+          this.toastService.showError(
+            $localize`Error saving account: ${e.toString()}.`
+          )
+        },
+      })
+  }
+
+  deleteMailAccount(account: PaperlessMailAccount) {
+    const modal = this.modalService.open(ConfirmDialogComponent, {
+      backdrop: 'static',
+    })
+    modal.componentInstance.title = $localize`Confirm delete mail account`
+    modal.componentInstance.messageBold = $localize`This operation will permanently this mail account.`
+    modal.componentInstance.message = $localize`This operation cannot be undone.`
+    modal.componentInstance.btnClass = 'btn-danger'
+    modal.componentInstance.btnCaption = $localize`Proceed`
+    modal.componentInstance.confirmClicked.subscribe(() => {
+      modal.componentInstance.buttonsEnabled = false
+      this.mailAccountService.delete(account).subscribe({
+        next: () => {
+          modal.close()
+          this.toastService.showInfo($localize`Deleted mail account`)
+          this.mailAccountService.clearCache()
+          this.mailAccountService.listAll().subscribe((r) => {
+            this.mailAccounts = r.results
+            this.initialize()
+          })
+        },
+        error: (e) => {
+          this.toastService.showError(
+            $localize`Error deleting mail account: ${e.toString()}.`
+          )
+        },
+      })
+    })
+  }
+
+  editMailRule(rule: PaperlessMailRule) {
+    const modal = this.modalService.open(MailRuleEditDialogComponent, {
+      backdrop: 'static',
+      size: 'xl',
+    })
+    modal.componentInstance.dialogMode = rule ? 'edit' : 'create'
+    modal.componentInstance.object = rule
+    modal.componentInstance.success
+      .pipe(takeUntil(this.unsubscribeNotifier))
+      .subscribe({
+        next: (newMailRule) => {
+          this.toastService.showInfo(
+            $localize`Saved rule "${newMailRule.name}".`
+          )
+          this.mailRuleService.clearCache()
+          this.mailRuleService.listAll().subscribe((r) => {
+            this.mailRules = r.results
+
+            this.initialize()
+          })
+        },
+        error: (e) => {
+          this.toastService.showError(
+            $localize`Error saving rule: ${e.toString()}.`
+          )
+        },
+      })
+  }
+
+  deleteMailRule(rule: PaperlessMailRule) {
+    const modal = this.modalService.open(ConfirmDialogComponent, {
+      backdrop: 'static',
+    })
+    modal.componentInstance.title = $localize`Confirm delete mail rule`
+    modal.componentInstance.messageBold = $localize`This operation will permanently this mail rule.`
+    modal.componentInstance.message = $localize`This operation cannot be undone.`
+    modal.componentInstance.btnClass = 'btn-danger'
+    modal.componentInstance.btnCaption = $localize`Proceed`
+    modal.componentInstance.confirmClicked.subscribe(() => {
+      modal.componentInstance.buttonsEnabled = false
+      this.mailRuleService.delete(rule).subscribe({
+        next: () => {
+          modal.close()
+          this.toastService.showInfo($localize`Deleted mail rule`)
+          this.mailRuleService.clearCache()
+          this.mailRuleService.listAll().subscribe((r) => {
+            this.mailRules = r.results
+            this.initialize()
+          })
+        },
+        error: (e) => {
+          this.toastService.showError(
+            $localize`Error deleting mail rule: ${e.toString()}.`
+          )
+        },
+      })
+    })
+  }
 }
index e08bc2a6011337bc4cc30bf482b98e18345afaf6..bdce616e2d37982e3d030aeda2f3e63ed42f3e3e 100644 (file)
         <td class="overflow-auto">{{ task.task_file_name }}</td>
         <td class="d-none d-lg-table-cell">{{ task.date_created | customDate:'short' }}</td>
         <td class="d-none d-lg-table-cell" *ngIf="activeTab != 'started' && activeTab != 'queued'">
-          <div *ngIf="task.result.length > 50" class="result" (click)="expandTask(task); $event.stopPropagation();"
+          <div *ngIf="task.result?.length > 50" class="result" (click)="expandTask(task); $event.stopPropagation();"
             [ngbPopover]="resultPopover" popoverClass="shadow small mobile" triggers="mouseenter:mouseleave" container="body">
             <span class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result | slice:0:50 }}&hellip;</span>
           </div>
-          <span *ngIf="task.result.length <= 50" class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result }}</span>
+          <span *ngIf="task.result?.length <= 50" class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result }}</span>
           <ng-template #resultPopover>
             <pre class="small mb-0">{{ task.result | slice:0:300 }}<ng-container *ngIf="task.result.length > 300">&hellip;</ng-container></pre>
-            <ng-container *ngIf="task.result.length > 300"><br/><em>(<ng-container i18n>click for full output</ng-container>)</em></ng-container>
+            <ng-container *ngIf="task.result?.length > 300"><br/><em>(<ng-container i18n>click for full output</ng-container>)</em></ng-container>
           </ng-template>
         </td>
         <td class="d-lg-none">
diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts
new file mode 100644 (file)
index 0000000..9f875e7
--- /dev/null
@@ -0,0 +1,23 @@
+import { ObjectWithId } from './object-with-id'
+
+export enum IMAPSecurity {
+  None = 1,
+  SSL = 2,
+  STARTTLS = 3,
+}
+
+export interface PaperlessMailAccount extends ObjectWithId {
+  name: string
+
+  imap_server: string
+
+  imap_port: number
+
+  imap_security: IMAPSecurity
+
+  username: string
+
+  password: string
+
+  character_set?: string
+}
diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts
new file mode 100644 (file)
index 0000000..9ff133d
--- /dev/null
@@ -0,0 +1,60 @@
+import { ObjectWithId } from './object-with-id'
+
+export enum MailFilterAttachmentType {
+  Attachments = 1,
+  Everything = 2,
+}
+
+export enum MailAction {
+  Delete = 1,
+  Move = 2,
+  MarkRead = 3,
+  Flag = 4,
+  Tag = 5,
+}
+
+export enum MailMetadataTitleOption {
+  FromSubject = 1,
+  FromFilename = 2,
+}
+
+export enum MailMetadataCorrespondentOption {
+  FromNothing = 1,
+  FromEmail = 2,
+  FromName = 3,
+  FromCustom = 4,
+}
+
+export interface PaperlessMailRule extends ObjectWithId {
+  name: string
+
+  account: number // PaperlessMailAccount.id
+
+  folder: string
+
+  filter_from: string
+
+  filter_subject: string
+
+  filter_body: string
+
+  filter_attachment_filename: string
+
+  maximum_age: number
+
+  attachment_type: MailFilterAttachmentType
+
+  action: MailAction
+
+  action_parameter?: string
+
+  assign_title_from: MailMetadataTitleOption
+
+  assign_tags?: number[] // PaperlessTag.id
+
+  assign_document_type?: number // PaperlessDocumentType.id
+
+  assign_correspondent_from?: MailMetadataCorrespondentOption
+
+  assign_correspondent?: number // PaperlessCorrespondent.id
+}
index 993eb3f1ea6407b20e7cde3dd55fa2f73794e5a2..08b30d44baef9362f44ae85463b71dd2160c48fb 100644 (file)
@@ -25,9 +25,9 @@ export interface PaperlessTask extends ObjectWithId {
 
   date_created: Date
 
-  done?: Date
+  date_done?: Date
 
-  result: string
+  result?: string
 
   related_document?: number
 }
index 1205f3b0e691b7bbf46225e8c8c7bef3f38c17ed..e20f1a848b6f67d58d34de6c2b8e3ebca6180a90 100644 (file)
@@ -1,7 +1,6 @@
 import { Injectable } from '@angular/core'
 import { DirtyCheckGuard } from '@ngneat/dirty-check-forms'
 import { Observable, Subject } from 'rxjs'
-import { map } from 'rxjs/operators'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
 import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
 
diff --git a/src-ui/src/app/services/rest/mail-account.service.ts b/src-ui/src/app/services/rest/mail-account.service.ts
new file mode 100644 (file)
index 0000000..438aa8c
--- /dev/null
@@ -0,0 +1,51 @@
+import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { combineLatest, Observable } from 'rxjs'
+import { tap } from 'rxjs/operators'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import { AbstractPaperlessService } from './abstract-paperless-service'
+
+@Injectable({
+  providedIn: 'root',
+})
+export class MailAccountService extends AbstractPaperlessService<PaperlessMailAccount> {
+  loading: boolean
+
+  constructor(http: HttpClient) {
+    super(http, 'mail_accounts')
+  }
+
+  private reload() {
+    this.loading = true
+    this.listAll().subscribe((r) => {
+      this.mailAccounts = r.results
+      this.loading = false
+    })
+  }
+
+  private mailAccounts: PaperlessMailAccount[] = []
+
+  get allAccounts() {
+    return this.mailAccounts
+  }
+
+  create(o: PaperlessMailAccount) {
+    return super.create(o).pipe(tap(() => this.reload()))
+  }
+
+  update(o: PaperlessMailAccount) {
+    return super.update(o).pipe(tap(() => this.reload()))
+  }
+
+  patchMany(
+    objects: PaperlessMailAccount[]
+  ): Observable<PaperlessMailAccount[]> {
+    return combineLatest(objects.map((o) => super.patch(o))).pipe(
+      tap(() => this.reload())
+    )
+  }
+
+  delete(o: PaperlessMailAccount) {
+    return super.delete(o).pipe(tap(() => this.reload()))
+  }
+}
diff --git a/src-ui/src/app/services/rest/mail-rule.service.ts b/src-ui/src/app/services/rest/mail-rule.service.ts
new file mode 100644 (file)
index 0000000..c401575
--- /dev/null
@@ -0,0 +1,49 @@
+import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { combineLatest, Observable } from 'rxjs'
+import { tap } from 'rxjs/operators'
+import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
+import { AbstractPaperlessService } from './abstract-paperless-service'
+
+@Injectable({
+  providedIn: 'root',
+})
+export class MailRuleService extends AbstractPaperlessService<PaperlessMailRule> {
+  loading: boolean
+
+  constructor(http: HttpClient) {
+    super(http, 'mail_rules')
+  }
+
+  private reload() {
+    this.loading = true
+    this.listAll().subscribe((r) => {
+      this.mailRules = r.results
+      this.loading = false
+    })
+  }
+
+  private mailRules: PaperlessMailRule[] = []
+
+  get allRules() {
+    return this.mailRules
+  }
+
+  create(o: PaperlessMailRule) {
+    return super.create(o).pipe(tap(() => this.reload()))
+  }
+
+  update(o: PaperlessMailRule) {
+    return super.update(o).pipe(tap(() => this.reload()))
+  }
+
+  patchMany(objects: PaperlessMailRule[]): Observable<PaperlessMailRule[]> {
+    return combineLatest(objects.map((o) => super.patch(o))).pipe(
+      tap(() => this.reload())
+    )
+  }
+
+  delete(o: PaperlessMailRule) {
+    return super.delete(o).pipe(tap(() => this.reload()))
+  }
+}
index a2c3b2bc9970e62a5c108b990fd82e7df424bf96..41330145bcff941c1cb4512f07a1d4e7a00fda24 100644 (file)
@@ -5,7 +5,7 @@ export const environment = {
   apiBaseUrl: document.baseURI + 'api/',
   apiVersion: '2',
   appTitle: 'Paperless-ngx',
-  version: '1.9.2-dev',
+  version: '1.10.2-dev',
   webSocketHost: window.location.host,
   webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
   webSocketBaseUrl: base_url.pathname + 'ws/',
diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf
new file mode 100644 (file)
index 0000000..99f4711
--- /dev/null
@@ -0,0 +1,4375 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="en" datatype="plaintext" original="ng2.template" target-language="ar">
+    <body>
+      <trans-unit id="ngb.alert.close" datatype="html">
+        <source>Close</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
+          <context context-type="linenumber">47,48</context>
+        </context-group>
+        <target state="translated">إغلاق</target>
+      </trans-unit>
+      <trans-unit id="ngb.carousel.slide-number" datatype="html">
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+          <context context-type="linenumber">178,186</context>
+        </context-group>
+        <note priority="1" from="description">Currently selected slide number read by screen reader</note>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
+      </trans-unit>
+      <trans-unit id="ngb.carousel.previous" datatype="html">
+        <source>Previous</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+          <context context-type="linenumber">213,215</context>
+        </context-group>
+        <target state="translated">السابق</target>
+      </trans-unit>
+      <trans-unit id="ngb.carousel.next" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+          <context context-type="linenumber">236</context>
+        </context-group>
+        <target state="translated">التالي</target>
+      </trans-unit>
+      <trans-unit id="ngb.datepicker.select-month" datatype="html">
+        <source>Select month</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+          <context context-type="linenumber">50,51</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+          <context context-type="linenumber">50,51</context>
+        </context-group>
+        <target state="translated">اختر الشهر</target>
+      </trans-unit>
+      <trans-unit id="ngb.datepicker.select-year" datatype="html">
+        <source>Select year</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+          <context context-type="linenumber">50,51</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+          <context context-type="linenumber">50,51</context>
+        </context-group>
+        <target state="translated">اختر السنة</target>
+      </trans-unit>
+      <trans-unit id="ngb.datepicker.previous-month" datatype="html">
+        <source>Previous month</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+          <context context-type="linenumber">60,63</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+          <context context-type="linenumber">60,63</context>
+        </context-group>
+        <target state="translated">الشهر السابق</target>
+      </trans-unit>
+      <trans-unit id="ngb.datepicker.next-month" datatype="html">
+        <source>Next month</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+          <context context-type="linenumber">60,63</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+          <context context-type="linenumber">60,63</context>
+        </context-group>
+        <target state="translated">الشهر التالي</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.first" datatype="html">
+        <source>««</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,270</context>
+        </context-group>
+        <target state="translated">««</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.previous" datatype="html">
+        <source>«</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,270</context>
+        </context-group>
+        <target state="translated">«</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.next" datatype="html">
+        <source>»</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,270</context>
+        </context-group>
+        <target state="translated">»</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.last" datatype="html">
+        <source>»»</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,270</context>
+        </context-group>
+        <target state="translated">»»</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.first-aria" datatype="html">
+        <source>First</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,271</context>
+        </context-group>
+        <target state="translated">الأول</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.previous-aria" datatype="html">
+        <source>Previous</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,271</context>
+        </context-group>
+        <target state="translated">السابق</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.next-aria" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,271</context>
+        </context-group>
+        <target state="translated">التالي</target>
+      </trans-unit>
+      <trans-unit id="ngb.pagination.last-aria" datatype="html">
+        <source>Last</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+          <context context-type="linenumber">269,271</context>
+        </context-group>
+        <target state="translated">الأخير</target>
+      </trans-unit>
+      <trans-unit id="ngb.progressbar.value" datatype="html">
+        <source>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
+        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
+          <context context-type="linenumber">30,33</context>
+        </context-group>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.HH" datatype="html">
+        <source>HH</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">230,231</context>
+        </context-group>
+        <target state="needs-translation">HH</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.hours" datatype="html">
+        <source>Hours</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">255,258</context>
+        </context-group>
+        <target state="translated">ساعات</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.MM" datatype="html">
+        <source>MM</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">280,282</context>
+        </context-group>
+        <target state="needs-translation">MM</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.minutes" datatype="html">
+        <source>Minutes</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">298,299</context>
+        </context-group>
+        <target state="translated">دقائق</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.increment-hours" datatype="html">
+        <source>Increment hours</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">328,329</context>
+        </context-group>
+        <target state="needs-translation">Increment hours</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
+        <source>Decrement hours</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">350,356</context>
+        </context-group>
+        <target state="needs-translation">Decrement hours</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
+        <source>Increment minutes</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">383,384</context>
+        </context-group>
+        <target state="needs-translation">Increment minutes</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
+        <source>Decrement minutes</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">412,416</context>
+        </context-group>
+        <target state="needs-translation">Decrement minutes</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.SS" datatype="html">
+        <source>SS</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+        <target state="needs-translation">SS</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.seconds" datatype="html">
+        <source>Seconds</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+        <target state="translated">ثوانٍ</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.increment-seconds" datatype="html">
+        <source>Increment seconds</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+        <target state="needs-translation">Increment seconds</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.decrement-seconds" datatype="html">
+        <source>Decrement seconds</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+        <target state="needs-translation">Decrement seconds</target>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.PM" datatype="html">
+        <source>
+          <x id="INTERPOLATION"/>
+        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ngb.timepicker.AM" datatype="html">
+        <source>
+          <x id="INTERPOLATION"/>
+        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+          <context context-type="linenumber">429</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ngb.toast.close-aria" datatype="html">
+        <source>Close</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
+          <context context-type="linenumber">74,75</context>
+        </context-group>
+        <target state="translated">إغلاق</target>
+      </trans-unit>
+      <trans-unit id="7103632680753685326" datatype="html">
+        <source>Drop files to begin upload</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+        <target state="translated">اسحب الملفات لبدء التحميل</target>
+      </trans-unit>
+      <trans-unit id="9103526311244275943" datatype="html" approved="yes">
+        <source>Document added</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">78</context>
+        </context-group>
+        <target state="final">أُضيف المستند</target>
+      </trans-unit>
+      <trans-unit id="9204248378636247318" datatype="html" approved="yes">
+        <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">80</context>
+        </context-group>
+        <target state="final">أضيف المستند <x id="PH" equiv-text="status.filename"/> إلى paperless.</target>
+      </trans-unit>
+      <trans-unit id="1931214133925051574" datatype="html" approved="yes">
+        <source>Open document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">81</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <target state="final">فتح مستند</target>
+      </trans-unit>
+      <trans-unit id="8582620835547864448" datatype="html">
+        <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">97</context>
+        </context-group>
+        <target state="translated">تعذّر إضافة <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target>
+      </trans-unit>
+      <trans-unit id="1710712016675379662" datatype="html" approved="yes">
+        <source>New document detected</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">112</context>
+        </context-group>
+        <target state="final">عُثر على مستند جديد</target>
+      </trans-unit>
+      <trans-unit id="587031278561344416" datatype="html">
+        <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">114</context>
+        </context-group>
+        <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target>
+      </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
+      <trans-unit id="3909462337752654810" datatype="html">
+        <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">126</context>
+        </context-group>
+        <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
+      </trans-unit>
+      <trans-unit id="9075755296812854717" datatype="html">
+        <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">136</context>
+        </context-group>
+        <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+      </trans-unit>
+      <trans-unit id="7495498057594070122" datatype="html">
+        <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
+      </trans-unit>
+      <trans-unit id="1334220418719920556" datatype="html">
+        <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">157</context>
+        </context-group>
+        <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
+      </trans-unit>
+      <trans-unit id="5427326625898532358" datatype="html">
+        <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">167</context>
+        </context-group>
+        <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
+      </trans-unit>
+      <trans-unit id="2804886236408698479" datatype="html">
+        <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">176</context>
+        </context-group>
+        <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
+      </trans-unit>
+      <trans-unit id="4680387114119209483" datatype="html">
+        <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">185</context>
+        </context-group>
+        <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
+      </trans-unit>
+      <trans-unit id="8625288184670954104" datatype="html">
+        <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">194</context>
+        </context-group>
+        <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
+      </trans-unit>
+      <trans-unit id="7643249460591212914" datatype="html">
+        <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">203</context>
+        </context-group>
+        <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
+      </trans-unit>
+      <trans-unit id="7172877665285340082" datatype="html">
+        <source>Thank you! 🙏</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">211</context>
+        </context-group>
+        <target state="translated">شكراً لك! 🙏</target>
+      </trans-unit>
+      <trans-unit id="7354947513482088740" datatype="html">
+        <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">213</context>
+        </context-group>
+        <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
+      </trans-unit>
+      <trans-unit id="4270528545616947218" datatype="html">
+        <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">215</context>
+        </context-group>
+        <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
+      </trans-unit>
+      <trans-unit id="5749300816154614125" datatype="html">
+        <source>Initiating upload...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">264</context>
+        </context-group>
+        <target state="translated">بدء التحميل...</target>
+      </trans-unit>
+      <trans-unit id="2173456130768795374" datatype="html">
+        <source>Paperless-ngx</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <note priority="1" from="description">app title</note>
+        <target state="translated">Paperless-ngx</target>
+      </trans-unit>
+      <trans-unit id="7100953725264790651" datatype="html" approved="yes">
+        <source>Search documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <target state="final">البحث في المستندات</target>
+      </trans-unit>
+      <trans-unit id="2448391510242468907" datatype="html">
+        <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">39</context>
+        </context-group>
+        <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
+      </trans-unit>
+      <trans-unit id="4930506384627295710" datatype="html" approved="yes">
+        <source>Settings</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">171</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">174</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="final">الإعدادات</target>
+      </trans-unit>
+      <trans-unit id="3797778920049399855" datatype="html" approved="yes">
+        <source>Logout</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target state="final">خروج</target>
+      </trans-unit>
+      <trans-unit id="6570363013146073520" datatype="html" approved="yes">
+        <source>Dashboard</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">69</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">72</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="final">لوحة التحكم</target>
+      </trans-unit>
+      <trans-unit id="4733307402565258070" datatype="html">
+        <source>Documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">79</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+          <context context-type="linenumber">88</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <target state="translated">المستندات</target>
+      </trans-unit>
+      <trans-unit id="472206565520537964" datatype="html" approved="yes">
+        <source>Saved views</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">85</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">184</context>
+        </context-group>
+        <target state="final">طرق العرض المحفوظة</target>
+      </trans-unit>
+      <trans-unit id="6988090220128974198" datatype="html" approved="yes">
+        <source>Open documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">99</context>
+        </context-group>
+        <target state="final">فتح مستندات</target>
+      </trans-unit>
+      <trans-unit id="5687256342387781369" datatype="html" approved="yes">
+        <source>Close all</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">115</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">118</context>
+        </context-group>
+        <target state="final">إغلاق الكل</target>
+      </trans-unit>
+      <trans-unit id="3897348120591552265" datatype="html" approved="yes">
+        <source>Manage</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">124</context>
+        </context-group>
+        <target state="final">إدارة</target>
+      </trans-unit>
+      <trans-unit id="7437910965833684826" datatype="html">
+        <source>Correspondents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">128</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">131</context>
+        </context-group>
+        <target state="needs-translation">Correspondents</target>
+      </trans-unit>
+      <trans-unit id="7886570921510760899" datatype="html" approved="yes">
+        <source>Tags</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">135</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">138</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <target state="final">علامات</target>
+      </trans-unit>
+      <trans-unit id="3079652255369035" datatype="html" approved="yes">
+        <source>Document types</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">142</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="final">أنواع المستندات</target>
+      </trans-unit>
+      <trans-unit id="8835528846812581148" datatype="html">
+        <source>Storage paths</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">149</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">152</context>
+        </context-group>
+        <target state="needs-translation">Storage paths</target>
+      </trans-unit>
+      <trans-unit id="2991443309752293110" datatype="html">
+        <source>File Tasks</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">156</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="needs-translation">File Tasks</target>
+      </trans-unit>
+      <trans-unit id="5537285341303594392" datatype="html">
+        <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">160</context>
+        </context-group>
+        <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="4804785061014590286" datatype="html" approved="yes">
+        <source>Logs</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">164</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">167</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="final">السجلات</target>
+      </trans-unit>
+      <trans-unit id="5041354590769758251" datatype="html" approved="yes">
+        <source>Admin</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">178</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">181</context>
+        </context-group>
+        <target state="final">المسئول</target>
+      </trans-unit>
+      <trans-unit id="314315645942131479" datatype="html" approved="yes">
+        <source>Info</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">187</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <target state="final">معلومات</target>
+      </trans-unit>
+      <trans-unit id="4895326106573044490" datatype="html" approved="yes">
+        <source>Documentation</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">191</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">194</context>
+        </context-group>
+        <target state="final">الوثائق</target>
+      </trans-unit>
+      <trans-unit id="1534029177398918729" datatype="html">
+        <source>GitHub</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">199</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">202</context>
+        </context-group>
+        <target state="needs-translation">GitHub</target>
+      </trans-unit>
+      <trans-unit id="5612903193691847840" datatype="html" approved="yes">
+        <source>Suggest an idea</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">204</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">208</context>
+        </context-group>
+        <target state="final">اقترح فكرة</target>
+      </trans-unit>
+      <trans-unit id="4112664765954374539" datatype="html">
+        <source>is available.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">217</context>
+        </context-group>
+        <target state="needs-translation">is available.</target>
+      </trans-unit>
+      <trans-unit id="1175891574282637937" datatype="html">
+        <source>Click to view.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">217</context>
+        </context-group>
+        <target state="needs-translation">Click to view.</target>
+      </trans-unit>
+      <trans-unit id="9811291095862612" datatype="html">
+        <source>Paperless-ngx can automatically check for updates</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">221</context>
+        </context-group>
+        <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
+      </trans-unit>
+      <trans-unit id="894819944961861800" datatype="html">
+        <source> How does this work? </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">228,230</context>
+        </context-group>
+        <target state="needs-translation"> How does this work? </target>
+      </trans-unit>
+      <trans-unit id="509090351011426949" datatype="html">
+        <source>Update available</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+          <context context-type="linenumber">239</context>
+        </context-group>
+        <target state="needs-translation">Update available</target>
+      </trans-unit>
+      <trans-unit id="3011185103048412841" datatype="html">
+        <source>An error occurred while saving settings.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
+          <context context-type="linenumber">83</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">326</context>
+        </context-group>
+        <target state="needs-translation">An error occurred while saving settings.</target>
+      </trans-unit>
+      <trans-unit id="2526035785704676448" datatype="html">
+        <source>An error occurred while saving update checking settings.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
+          <context context-type="linenumber">216</context>
+        </context-group>
+        <target state="needs-translation">An error occurred while saving update checking settings.</target>
+      </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="needs-translation">Clear</target>
+      </trans-unit>
+      <trans-unit id="5000042972069710005" datatype="html">
+        <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target state="needs-translation"><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="1234709746630139322" datatype="html">
+        <source>Confirmation</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">Confirmation</target>
+      </trans-unit>
+      <trans-unit id="9178182467454450952" datatype="html">
+        <source>Confirm</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">234</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">272</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">308</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">344</context>
+        </context-group>
+        <target state="needs-translation">Confirm</target>
+      </trans-unit>
+      <trans-unit id="6371576811194810854" datatype="html">
+        <source>After</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <target state="needs-translation">After</target>
+      </trans-unit>
+      <trans-unit id="1218334388194408974" datatype="html">
+        <source>Before</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">42</context>
+        </context-group>
+        <target state="needs-translation">Before</target>
+      </trans-unit>
+      <trans-unit id="4873149362496451858" datatype="html">
+        <source>Last 7 days</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <target state="needs-translation">Last 7 days</target>
+      </trans-unit>
+      <trans-unit id="4463380307954693363" datatype="html">
+        <source>Last month</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="needs-translation">Last month</target>
+      </trans-unit>
+      <trans-unit id="8697368973702409683" datatype="html">
+        <source>Last 3 months</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+          <context context-type="linenumber">51</context>
+        </context-group>
+        <target state="needs-translation">Last 3 months</target>
+      </trans-unit>
+      <trans-unit id="3566342898065860218" datatype="html">
+        <source>Last year</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Last year</target>
+      </trans-unit>
+      <trans-unit id="8953033926734869941" datatype="html" approved="yes">
+        <source>Name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">191</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">40</context>
+        </context-group>
+        <target state="final">اسم</target>
+      </trans-unit>
+      <trans-unit id="8743659855412792665" datatype="html">
+        <source>Matching algorithm</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="needs-translation">Matching algorithm</target>
+      </trans-unit>
+      <trans-unit id="2656329676292524585" datatype="html">
+        <source>Matching pattern</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <target state="needs-translation">Matching pattern</target>
+      </trans-unit>
+      <trans-unit id="6063936469630366525" datatype="html">
+        <source>Case insensitive</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <target state="needs-translation">Case insensitive</target>
+      </trans-unit>
+      <trans-unit id="2159130950882492111" datatype="html">
+        <source>Cancel</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <target state="needs-translation">Cancel</target>
+      </trans-unit>
+      <trans-unit id="3768927257183755959" datatype="html" approved="yes">
+        <source>Save</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">185</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">223</context>
+        </context-group>
+        <target state="final">حفظ</target>
+      </trans-unit>
+      <trans-unit id="6457471243969293847" datatype="html">
+        <source>Create new correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="needs-translation">Create new correspondent</target>
+      </trans-unit>
+      <trans-unit id="2059822531169388684" datatype="html">
+        <source>Edit correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <target state="needs-translation">Edit correspondent</target>
+      </trans-unit>
+      <trans-unit id="6672809941092516947" datatype="html" approved="yes">
+        <source>Create new document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="final">إنشاء نوع مستند جديد</target>
+      </trans-unit>
+      <trans-unit id="36335016091244220" datatype="html" approved="yes">
+        <source>Edit document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <target state="final">تحرير نوع المستند</target>
+      </trans-unit>
+      <trans-unit id="4561076822163447092" datatype="html" approved="yes">
+        <source>Create new item</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <target state="final">إنشاء عنصر جديد</target>
+      </trans-unit>
+      <trans-unit id="5324147361912094446" datatype="html" approved="yes">
+        <source>Edit item</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+          <context context-type="linenumber">56</context>
+        </context-group>
+        <target state="final">تعديل عنصر</target>
+      </trans-unit>
+      <trans-unit id="1699589597032579396" datatype="html">
+        <source>Could not save element: <x id="PH" equiv-text="error"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+          <context context-type="linenumber">60</context>
+        </context-group>
+        <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target>
+      </trans-unit>
+      <trans-unit id="6036319582202941456" datatype="html">
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="8911059720204770105" datatype="html">
+        <source>Path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <target state="needs-translation">Path</target>
+      </trans-unit>
+      <trans-unit id="6625768491622252297" datatype="html">
+        <source>e.g.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+        <target state="needs-translation">e.g.</target>
+      </trans-unit>
+      <trans-unit id="1918584360573970155" datatype="html">
+        <source>or use slashes to add directories e.g.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <target state="needs-translation">or use slashes to add directories e.g.</target>
+      </trans-unit>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+      </trans-unit>
+      <trans-unit id="6898961890896270754" datatype="html">
+        <source>Create new storage path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <target state="needs-translation">Create new storage path</target>
+      </trans-unit>
+      <trans-unit id="3754859110054016570" datatype="html">
+        <source>Edit storage path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+          <context context-type="linenumber">39</context>
+        </context-group>
+        <target state="needs-translation">Edit storage path</target>
+      </trans-unit>
+      <trans-unit id="9011959596901584887" datatype="html" approved="yes">
+        <source>Color</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <target state="final">لون</target>
+      </trans-unit>
+      <trans-unit id="1426037806946650347" datatype="html" approved="yes">
+        <source>Inbox tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target state="final">علامة علبة الوارد</target>
+      </trans-unit>
+      <trans-unit id="8566220514470905459" datatype="html" approved="yes">
+        <source>Inbox tags are automatically assigned to all consumed documents.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target state="final">تُعيَّن علامات علبة الوارد تلقائياً لجميع المستندات المستهلكة.</target>
+      </trans-unit>
+      <trans-unit id="9153094873118985366" datatype="html">
+        <source>Create new tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+        <target state="needs-translation">Create new tag</target>
+      </trans-unit>
+      <trans-unit id="5872175735754226507" datatype="html">
+        <source>Edit tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">Edit tag</target>
+      </trans-unit>
+      <trans-unit id="1616102757855967475" datatype="html">
+        <source>All</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">All</target>
+      </trans-unit>
+      <trans-unit id="3184700926171002527" datatype="html">
+        <source>Any</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <target state="needs-translation">Any</target>
+      </trans-unit>
+      <trans-unit id="4391289919356861627" datatype="html">
+        <source>Apply</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <target state="needs-translation">Apply</target>
+      </trans-unit>
+      <trans-unit id="7780041345210191160" datatype="html">
+        <source>Click again to exclude items.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <target state="needs-translation">Click again to exclude items.</target>
+      </trans-unit>
+      <trans-unit id="7593728289020204896" datatype="html">
+        <source>Not assigned</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context>
+          <context context-type="linenumber">261</context>
+        </context-group>
+        <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note>
+        <target state="needs-translation">Not assigned</target>
+      </trans-unit>
+      <trans-unit id="445302259125375799" datatype="html" approved="yes">
+        <source>Invalid date.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="final">تاريخ غير صالح.</target>
+      </trans-unit>
+      <trans-unit id="524422427194414813" datatype="html">
+        <source>Suggestions:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+          <context context-type="linenumber">42</context>
+        </context-group>
+        <target state="needs-translation">Suggestions:</target>
+      </trans-unit>
+      <trans-unit id="2722549756198502062" datatype="html">
+        <source>Add item</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <note priority="1" from="description">Used for both types, correspondents, storage paths</note>
+        <target state="needs-translation">Add item</target>
+      </trans-unit>
+      <trans-unit id="6560126119609945418" datatype="html">
+        <source>Add tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target state="needs-translation">Add tag</target>
+      </trans-unit>
+      <trans-unit id="3797570084942068182" datatype="html" approved="yes">
+        <source>Select</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target state="final">تحديد</target>
+      </trans-unit>
+      <trans-unit id="7103181924469214926" datatype="html" approved="yes">
+        <source>Please select an object</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="final">الرجاء تحديد كائن</target>
+      </trans-unit>
+      <trans-unit id="3894950702316166331" datatype="html">
+        <source>Loading...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">93</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <target state="needs-translation">Loading...</target>
+      </trans-unit>
+      <trans-unit id="1865646076514070962" datatype="html">
+        <source>Hello <x id="PH" equiv-text="this.settingsService.displayName"/>, welcome to Paperless-ngx</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <target state="needs-translation">Hello <x id="PH" equiv-text="this.settingsService.displayName"/>, welcome to Paperless-ngx</target>
+      </trans-unit>
+      <trans-unit id="5334686081082652461" datatype="html">
+        <source>Welcome to Paperless-ngx</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">Welcome to Paperless-ngx</target>
+      </trans-unit>
+      <trans-unit id="2946624699882754313" datatype="html">
+        <source>Show all</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <target state="needs-translation">Show all</target>
+      </trans-unit>
+      <trans-unit id="4207916966377787111" datatype="html" approved="yes">
+        <source>Created</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">157</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">41</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <target state="final">أُنشئ</target>
+      </trans-unit>
+      <trans-unit id="5701618810648052610" datatype="html" approved="yes">
+        <source>Title</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">75</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">139</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">153</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="final">عنوان</target>
+      </trans-unit>
+      <trans-unit id="1069523139277190436" datatype="html">
+        <source>Statistics</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="needs-translation">Statistics</target>
+      </trans-unit>
+      <trans-unit id="1171694977288479084" datatype="html">
+        <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target>
+      </trans-unit>
+      <trans-unit id="4207135462646354574" datatype="html">
+        <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target>
+      </trans-unit>
+      <trans-unit id="8187573012244728580" datatype="html">
+        <source>Upload new documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="needs-translation">Upload new documents</target>
+      </trans-unit>
+      <trans-unit id="1749180330008942007" datatype="html">
+        <source>Dismiss completed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note>
+        <target state="needs-translation">Dismiss completed</target>
+      </trans-unit>
+      <trans-unit id="118343233500414755" datatype="html">
+        <source>Drop documents here or</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="needs-translation">Drop documents here or</target>
+      </trans-unit>
+      <trans-unit id="8133800334834354642" datatype="html">
+        <source>Browse files</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="needs-translation">Browse files</target>
+      </trans-unit>
+      <trans-unit id="2330646618997399019" datatype="html">
+        <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note>
+        <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target>
+      </trans-unit>
+      <trans-unit id="6443586946875325554" datatype="html">
+        <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+          <context context-type="linenumber">37</context>
+        </context-group>
+        <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target>
+      </trans-unit>
+      <trans-unit id="9182918211699394982" datatype="html">
+        <source>Failed: <x id="PH" equiv-text="countFailed"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+          <context context-type="linenumber">40</context>
+        </context-group>
+        <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target>
+      </trans-unit>
+      <trans-unit id="534116346205124059" datatype="html">
+        <source>Added: <x id="PH" equiv-text="countSuccess"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target>
+      </trans-unit>
+      <trans-unit id="760986369763309193" datatype="html">
+        <source>, </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">179</context>
+        </context-group>
+        <note priority="1" from="description">this string is used to separate processing, failed and added on the file upload widget</note>
+        <target state="needs-translation">, </target>
+      </trans-unit>
+      <trans-unit id="7915903586014997661" datatype="html">
+        <source>Paperless-ngx is running!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <target state="needs-translation">Paperless-ngx is running!</target>
+      </trans-unit>
+      <trans-unit id="3326049540711826572" datatype="html">
+        <source>You&apos;re ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
+      </trans-unit>
+      <trans-unit id="4474647174688421179" datatype="html">
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+      </trans-unit>
+      <trans-unit id="4294899532887357745" datatype="html">
+        <source>Thanks for being a part of the Paperless-ngx community!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target state="needs-translation">Thanks for being a part of the Paperless-ngx community!</target>
+      </trans-unit>
+      <trans-unit id="1415832194529539652" datatype="html">
+        <source>Start the tour</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <target state="needs-translation">Start the tour</target>
+      </trans-unit>
+      <trans-unit id="7822640317427130239" datatype="html">
+        <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target>
+      </trans-unit>
+      <trans-unit id="2122666445936087317" datatype="html">
+        <source>Enter comment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <target state="needs-translation">Enter comment</target>
+      </trans-unit>
+      <trans-unit id="4025397324401332794" datatype="html">
+        <source> Please enter a comment. </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+          <context context-type="linenumber">5,7</context>
+        </context-group>
+        <target state="needs-translation"> Please enter a comment. </target>
+      </trans-unit>
+      <trans-unit id="2337485514607640701" datatype="html">
+        <source>Add comment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target state="needs-translation">Add comment</target>
+      </trans-unit>
+      <trans-unit id="5438997040668245251" datatype="html">
+        <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+          <context context-type="linenumber">68</context>
+        </context-group>
+        <target state="needs-translation">Error saving comment: <x id="PH" equiv-text="e.toString()"/></target>
+      </trans-unit>
+      <trans-unit id="7593210124183303626" datatype="html">
+        <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+          <context context-type="linenumber">83</context>
+        </context-group>
+        <target state="needs-translation">Error deleting comment: <x id="PH" equiv-text="e.toString()"/></target>
+      </trans-unit>
+      <trans-unit id="1407560924967345762" datatype="html" approved="yes">
+        <source>Page</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <target state="final">صفحة</target>
+      </trans-unit>
+      <trans-unit id="2266163016683537825" datatype="html" approved="yes">
+        <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+        <target state="final">من <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target>
+      </trans-unit>
+      <trans-unit id="7022070615528435141" datatype="html">
+        <source>Delete</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">97</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">157</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">209</context>
+        </context-group>
+        <target state="needs-translation">Delete</target>
+      </trans-unit>
+      <trans-unit id="3099741642167775297" datatype="html" approved="yes">
+        <source>Download</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">58</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">86</context>
+        </context-group>
+        <target state="final">تحميل</target>
+      </trans-unit>
+      <trans-unit id="8659635229098859487" datatype="html" approved="yes">
+        <source>Download original</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="final">تحميل النسخة الأصلية</target>
+      </trans-unit>
+      <trans-unit id="8312409092917397847" datatype="html">
+        <source>Redo OCR</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">90</context>
+        </context-group>
+        <target state="needs-translation">Redo OCR</target>
+      </trans-unit>
+      <trans-unit id="1418444397960583910" datatype="html" approved="yes">
+        <source>More like this</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">40</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <target state="final">مزيدا من هذا</target>
+      </trans-unit>
+      <trans-unit id="7819314041543176992" datatype="html" approved="yes">
+        <source>Close</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <target state="final">إغلاق</target>
+      </trans-unit>
+      <trans-unit id="4452427314943113135" datatype="html">
+        <source>Previous</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target state="needs-translation">Previous</target>
+      </trans-unit>
+      <trans-unit id="5028777105388019087" datatype="html" approved="yes">
+        <source>Details</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">72</context>
+        </context-group>
+        <target state="final">تفاصيل</target>
+      </trans-unit>
+      <trans-unit id="1379170675585571971" datatype="html" approved="yes">
+        <source>Archive serial number</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <target state="final">الرقم التسلسلي للأرشيف</target>
+      </trans-unit>
+      <trans-unit id="5114742157723900905" datatype="html" approved="yes">
+        <source>Date created</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">77</context>
+        </context-group>
+        <target state="final">تاريخ الإنشاء</target>
+      </trans-unit>
+      <trans-unit id="2691296884221415710" datatype="html">
+        <source>Correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">79</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">133</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <target state="needs-translation">Correspondent</target>
+      </trans-unit>
+      <trans-unit id="5066119607229701477" datatype="html" approved="yes">
+        <source>Document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">81</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">42</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <target state="final">نوع المستند</target>
+      </trans-unit>
+      <trans-unit id="2091353339965748767" datatype="html">
+        <source>Storage path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">83</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">56</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">151</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">49</context>
+        </context-group>
+        <target state="needs-translation">Storage path</target>
+      </trans-unit>
+      <trans-unit id="5607669932062416162" datatype="html">
+        <source>Default</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">84</context>
+        </context-group>
+        <target state="needs-translation">Default</target>
+      </trans-unit>
+      <trans-unit id="6205355627445317276" datatype="html" approved="yes">
+        <source>Content</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">91</context>
+        </context-group>
+        <target state="final">محتوى</target>
+      </trans-unit>
+      <trans-unit id="218403386307979629" datatype="html">
+        <source>Metadata</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">100</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <target state="needs-translation">Metadata</target>
+      </trans-unit>
+      <trans-unit id="1826652001816486190" datatype="html" approved="yes">
+        <source>Date modified</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">106</context>
+        </context-group>
+        <target state="final">تاريخ التعديل</target>
+      </trans-unit>
+      <trans-unit id="6392918669949841614" datatype="html" approved="yes">
+        <source>Date added</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">110</context>
+        </context-group>
+        <target state="final">تاريخ الإضافة</target>
+      </trans-unit>
+      <trans-unit id="146828917013192897" datatype="html" approved="yes">
+        <source>Media filename</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">114</context>
+        </context-group>
+        <target state="final">اسم ملف الوسائط</target>
+      </trans-unit>
+      <trans-unit id="4500855521601039868" datatype="html">
+        <source>Original filename</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">118</context>
+        </context-group>
+        <target state="needs-translation">Original filename</target>
+      </trans-unit>
+      <trans-unit id="7985558498848210210" datatype="html" approved="yes">
+        <source>Original MD5 checksum</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">122</context>
+        </context-group>
+        <target state="final">مجموع MD5 الاختباري للأصل</target>
+      </trans-unit>
+      <trans-unit id="5888243105821763422" datatype="html" approved="yes">
+        <source>Original file size</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">126</context>
+        </context-group>
+        <target state="final">حجم الملف الأصلي</target>
+      </trans-unit>
+      <trans-unit id="2696647325713149563" datatype="html" approved="yes">
+        <source>Original mime type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">130</context>
+        </context-group>
+        <target state="final">نوع mime الأصلي</target>
+      </trans-unit>
+      <trans-unit id="342875990758166588" datatype="html" approved="yes">
+        <source>Archive MD5 checksum</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">134</context>
+        </context-group>
+        <target state="final">مجموع MD5 الاختباري للأرشيف</target>
+      </trans-unit>
+      <trans-unit id="6033581412811562084" datatype="html" approved="yes">
+        <source>Archive file size</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">138</context>
+        </context-group>
+        <target state="final">حجم ملف الأرشيف</target>
+      </trans-unit>
+      <trans-unit id="6992781481378431874" datatype="html" approved="yes">
+        <source>Original document metadata</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">144</context>
+        </context-group>
+        <target state="final">بيانات التعريف للمستند الأصلي</target>
+      </trans-unit>
+      <trans-unit id="2846565152091361585" datatype="html" approved="yes">
+        <source>Archived document metadata</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="final">بيانات التعريف للمستند الأصلي</target>
+      </trans-unit>
+      <trans-unit id="8191371354890763172" datatype="html">
+        <source>Enter Password</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">167</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">203</context>
+        </context-group>
+        <target state="needs-translation">Enter Password</target>
+      </trans-unit>
+      <trans-unit id="3807699453257291879" datatype="html">
+        <source>Comments</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">174</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">154</context>
+        </context-group>
+        <target state="needs-translation">Comments</target>
+      </trans-unit>
+      <trans-unit id="3823219296477075982" datatype="html" approved="yes">
+        <source>Discard</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">183</context>
+        </context-group>
+        <target state="final">تجاهل</target>
+      </trans-unit>
+      <trans-unit id="5129524307369213584" datatype="html" approved="yes">
+        <source>Save &amp; next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">184</context>
+        </context-group>
+        <target state="final">حفظ &amp; التالي</target>
+      </trans-unit>
+      <trans-unit id="9021887951960049161" datatype="html" approved="yes">
+        <source>Confirm delete</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">442</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">153</context>
+        </context-group>
+        <target state="final">تأكيد الحذف</target>
+      </trans-unit>
+      <trans-unit id="5382975254277698192" datatype="html" approved="yes">
+        <source>Do you really want to delete document &quot;<x id="PH" equiv-text="this.document.title"/>&quot;?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">443</context>
+        </context-group>
+        <target state="final">هل تريد حقاً حذف المستند "<x id="PH" equiv-text="this.document.title"/>"؟</target>
+      </trans-unit>
+      <trans-unit id="6691075929777935948" datatype="html" approved="yes">
+        <source>The files for this document will be deleted permanently. This operation cannot be undone.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">444</context>
+        </context-group>
+        <target state="final">ستحذف ملفات هذا المستند بشكل دائم. لا يمكن التراجع عن هذه العملية.</target>
+      </trans-unit>
+      <trans-unit id="719892092227206532" datatype="html" approved="yes">
+        <source>Delete document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">446</context>
+        </context-group>
+        <target state="final">حذف مستند</target>
+      </trans-unit>
+      <trans-unit id="1844801255494293730" datatype="html" approved="yes">
+        <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">462</context>
+        </context-group>
+        <target state="final">حدث خطأ أثناء حذف الوثيقة: <x id="PH" equiv-text="JSON.stringify(error)"/></target>
+      </trans-unit>
+      <trans-unit id="7362691899087997122" datatype="html">
+        <source>Redo OCR confirm</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">482</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">387</context>
+        </context-group>
+        <target state="needs-translation">Redo OCR confirm</target>
+      </trans-unit>
+      <trans-unit id="9197453786953646058" datatype="html">
+        <source>This operation will permanently redo OCR for this document.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">483</context>
+        </context-group>
+        <target state="needs-translation">This operation will permanently redo OCR for this document.</target>
+      </trans-unit>
+      <trans-unit id="5641451190833696892" datatype="html">
+        <source>This operation cannot be undone.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">484</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">364</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">389</context>
+        </context-group>
+        <target state="needs-translation">This operation cannot be undone.</target>
+      </trans-unit>
+      <trans-unit id="1181910457994920507" datatype="html">
+        <source>Proceed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">486</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">391</context>
+        </context-group>
+        <target state="needs-translation">Proceed</target>
+      </trans-unit>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">494</context>
+        </context-group>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
+      </trans-unit>
+      <trans-unit id="8008978164775353960" datatype="html">
+        <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+          <context context-type="linenumber">505,507</context>
+        </context-group>
+        <target state="needs-translation">Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></target>
+      </trans-unit>
+      <trans-unit id="6857598786757174736" datatype="html">
+        <source>Select:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <target state="needs-translation">Select:</target>
+      </trans-unit>
+      <trans-unit id="6299008920007331381" datatype="html">
+        <source>Edit:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <target state="needs-translation">Edit:</target>
+      </trans-unit>
+      <trans-unit id="7001227209911602786" datatype="html">
+        <source>Filter tags</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <target state="needs-translation">Filter tags</target>
+      </trans-unit>
+      <trans-unit id="184185893993764098" datatype="html">
+        <source>Filter correspondents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">39</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">36</context>
+        </context-group>
+        <target state="needs-translation">Filter correspondents</target>
+      </trans-unit>
+      <trans-unit id="2947613869920454977" datatype="html">
+        <source>Filter document types</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">48</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <target state="needs-translation">Filter document types</target>
+      </trans-unit>
+      <trans-unit id="8816999377397522522" datatype="html">
+        <source>Filter storage paths</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">57</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target state="needs-translation">Filter storage paths</target>
+      </trans-unit>
+      <trans-unit id="3193976279273491157" datatype="html">
+        <source>Actions</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">75</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">208</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+        <target state="needs-translation">Actions</target>
+      </trans-unit>
+      <trans-unit id="1559181160090274453" datatype="html">
+        <source> Download <x id="START_TAG_DIV" ctype="x-div" equiv-text="&lt;div *ngIf=&quot;awaitingDownload&quot; class=&quot;spinner-border spinner-border-sm&quot; role=&quot;status&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;visually-hidden&quot;&gt;"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="&lt;/div&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">78,82</context>
+        </context-group>
+        <target state="needs-translation"> Download <x id="START_TAG_DIV" ctype="x-div" equiv-text="&lt;div *ngIf=&quot;awaitingDownload&quot; class=&quot;spinner-border spinner-border-sm&quot; role=&quot;status&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;visually-hidden&quot;&gt;"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="&lt;/div&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="9202029122138685465" datatype="html">
+        <source> Download originals <x id="START_TAG_DIV" ctype="x-div" equiv-text="&lt;div *ngIf=&quot;awaitingDownload&quot; class=&quot;spinner-border spinner-border-sm&quot; role=&quot;status&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;visually-hidden&quot;&gt;"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="&lt;/div&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+          <context context-type="linenumber">84,88</context>
+        </context-group>
+        <target state="needs-translation"> Download originals <x id="START_TAG_DIV" ctype="x-div" equiv-text="&lt;div *ngIf=&quot;awaitingDownload&quot; class=&quot;spinner-border spinner-border-sm&quot; role=&quot;status&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;visually-hidden&quot;&gt;"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="&lt;/div&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="7985804062689412812" datatype="html">
+        <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">103,105</context>
+        </context-group>
+        <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></target>
+      </trans-unit>
+      <trans-unit id="7894972847287473517" datatype="html">
+        <source>&quot;<x id="PH" equiv-text="items[0].name"/>&quot;</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">171</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">177</context>
+        </context-group>
+        <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target>
+      </trans-unit>
+      <trans-unit id="8639884465898458690" datatype="html">
+        <source>&quot;<x id="PH" equiv-text="items[0].name"/>&quot; and &quot;<x id="PH_1" equiv-text="items[1].name"/>&quot;</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">173</context>
+        </context-group>
+        <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note>
+        <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target>
+      </trans-unit>
+      <trans-unit id="1822679894391095557" datatype="html">
+        <source><x id="PH" equiv-text="list"/> and &quot;<x id="PH_1" equiv-text="items[items.length - 1].name"/>&quot;</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">181,183</context>
+        </context-group>
+        <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note>
+        <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target>
+      </trans-unit>
+      <trans-unit id="4137232459980262849" datatype="html">
+        <source>Confirm tags assignment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">198</context>
+        </context-group>
+        <target state="needs-translation">Confirm tags assignment</target>
+      </trans-unit>
+      <trans-unit id="6619516195038467207" datatype="html">
+        <source>This operation will add the tag &quot;<x id="PH" equiv-text="tag.name"/>&quot; to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">204</context>
+        </context-group>
+        <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="1894412783609570695" datatype="html">
+        <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToAdd         )"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">209,211</context>
+        </context-group>
+        <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToAdd         )"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="7181166515756808573" datatype="html">
+        <source>This operation will remove the tag &quot;<x id="PH" equiv-text="tag.name"/>&quot; from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">217</context>
+        </context-group>
+        <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="3819792277998068944" datatype="html">
+        <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToRemove         )"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">222,224</context>
+        </context-group>
+        <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToRemove         )"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="2739066218579571288" datatype="html">
+        <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToAdd         )"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(           changedTags.itemsToRemove         )"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">226,230</context>
+        </context-group>
+        <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(           changedTags.itemsToAdd         )"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(           changedTags.itemsToRemove         )"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="2996713129519325161" datatype="html">
+        <source>Confirm correspondent assignment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">265</context>
+        </context-group>
+        <target state="needs-translation">Confirm correspondent assignment</target>
+      </trans-unit>
+      <trans-unit id="6900893559485781849" datatype="html">
+        <source>This operation will assign the correspondent &quot;<x id="PH" equiv-text="correspondent.name"/>&quot; to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">267</context>
+        </context-group>
+        <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="1257522660364398440" datatype="html">
+        <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">269</context>
+        </context-group>
+        <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="5393409374423140648" datatype="html">
+        <source>Confirm document type assignment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">301</context>
+        </context-group>
+        <target state="needs-translation">Confirm document type assignment</target>
+      </trans-unit>
+      <trans-unit id="332180123895325027" datatype="html">
+        <source>This operation will assign the document type &quot;<x id="PH" equiv-text="documentType.name"/>&quot; to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">303</context>
+        </context-group>
+        <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="2236642492594872779" datatype="html">
+        <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">305</context>
+        </context-group>
+        <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="6386555513013840736" datatype="html">
+        <source>Confirm storage path assignment</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">337</context>
+        </context-group>
+        <target state="needs-translation">Confirm storage path assignment</target>
+      </trans-unit>
+      <trans-unit id="8750527458618415924" datatype="html">
+        <source>This operation will assign the storage path &quot;<x id="PH" equiv-text="storagePath.name"/>&quot; to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">339</context>
+        </context-group>
+        <target state="needs-translation">This operation will assign the storage path "<x id="PH" equiv-text="storagePath.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="60728365335056946" datatype="html">
+        <source>This operation will remove the storage path from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">341</context>
+        </context-group>
+        <target state="needs-translation">This operation will remove the storage path from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="749430623564850405" datatype="html">
+        <source>Delete confirm</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">362</context>
+        </context-group>
+        <target state="needs-translation">Delete confirm</target>
+      </trans-unit>
+      <trans-unit id="4303174930844518780" datatype="html">
+        <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">363</context>
+        </context-group>
+        <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="6734339521247847366" datatype="html">
+        <source>Delete document(s)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">366</context>
+        </context-group>
+        <target state="needs-translation">Delete document(s)</target>
+      </trans-unit>
+      <trans-unit id="8968869182645922415" datatype="html">
+        <source>This operation will permanently redo OCR for <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+          <context context-type="linenumber">388</context>
+        </context-group>
+        <target state="needs-translation">This operation will permanently redo OCR for <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+      </trans-unit>
+      <trans-unit id="8076495233090006322" datatype="html">
+        <source>Filter by correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">178</context>
+        </context-group>
+        <target state="needs-translation">Filter by correspondent</target>
+      </trans-unit>
+      <trans-unit id="2784168796433474565" datatype="html">
+        <source>Filter by tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">183</context>
+        </context-group>
+        <target state="needs-translation">Filter by tag</target>
+      </trans-unit>
+      <trans-unit id="7585826646011739428" datatype="html" approved="yes">
+        <source>Edit</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">70</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <target state="final">تحرير</target>
+      </trans-unit>
+      <trans-unit id="2509141182388535183" datatype="html">
+        <source>View</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target state="needs-translation">View</target>
+      </trans-unit>
+      <trans-unit id="78870852467682010" datatype="html">
+        <source>Filter by document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">63</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">187</context>
+        </context-group>
+        <target state="needs-translation">Filter by document type</target>
+      </trans-unit>
+      <trans-unit id="157572966557284263" datatype="html">
+        <source>Filter by storage path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">70</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">192</context>
+        </context-group>
+        <target state="needs-translation">Filter by storage path</target>
+      </trans-unit>
+      <trans-unit id="3727324658595204357" datatype="html">
+        <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate }}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">85</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">48</context>
+        </context-group>
+        <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate }}"/></target>
+      </trans-unit>
+      <trans-unit id="2030261243264601523" datatype="html">
+        <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate }}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">86</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">49</context>
+        </context-group>
+        <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate }}"/></target>
+      </trans-unit>
+      <trans-unit id="4235671847487610290" datatype="html">
+        <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate }}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">87</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate }}"/></target>
+      </trans-unit>
+      <trans-unit id="2332107018974972998" datatype="html">
+        <source>Score:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+          <context context-type="linenumber">98</context>
+        </context-group>
+        <target state="needs-translation">Score:</target>
+      </trans-unit>
+      <trans-unit id="3661756380991326939" datatype="html">
+        <source>Toggle tag filter</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <target state="needs-translation">Toggle tag filter</target>
+      </trans-unit>
+      <trans-unit id="4648526799630820486" datatype="html">
+        <source>Toggle correspondent filter</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <target state="needs-translation">Toggle correspondent filter</target>
+      </trans-unit>
+      <trans-unit id="5319701482646590642" datatype="html">
+        <source>Toggle document type filter</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <target state="needs-translation">Toggle document type filter</target>
+      </trans-unit>
+      <trans-unit id="8950368321707344185" datatype="html">
+        <source>Toggle storage path filter</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <target state="needs-translation">Toggle storage path filter</target>
+      </trans-unit>
+      <trans-unit id="5145213156408463657" datatype="html" approved="yes">
+        <source>Select none</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target state="final">بدون تحديد</target>
+      </trans-unit>
+      <trans-unit id="1512866475468373520" datatype="html" approved="yes">
+        <source>Select page</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target state="final">تحديد صفحة</target>
+      </trans-unit>
+      <trans-unit id="1494518490116523821" datatype="html" approved="yes">
+        <source>Select all</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="final">تحديد الكل</target>
+      </trans-unit>
+      <trans-unit id="5146398958364876914" datatype="html" approved="yes">
+        <source>Sort</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <target state="final">ترتيب</target>
+      </trans-unit>
+      <trans-unit id="2123659921722214537" datatype="html" approved="yes">
+        <source>Views</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">64</context>
+        </context-group>
+        <target state="final">طرق عرض</target>
+      </trans-unit>
+      <trans-unit id="1233494216161906927" datatype="html">
+        <source>Save &quot;<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>&quot;</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">75</context>
+        </context-group>
+        <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target>
+      </trans-unit>
+      <trans-unit id="2276119452079372898" datatype="html" approved="yes">
+        <source>Save as...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <target state="final">حفظ باسم...</target>
+      </trans-unit>
+      <trans-unit id="8786996283897742947" datatype="html">
+        <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">95</context>
+        </context-group>
+        <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target>
+      </trans-unit>
+      <trans-unit id="6600548268163632449" datatype="html">
+        <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">97</context>
+        </context-group>
+        <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target>
+      </trans-unit>
+      <trans-unit id="2243770355958919528" datatype="html" approved="yes">
+        <source>(filtered)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">97</context>
+        </context-group>
+        <target state="final">(مصفاة)</target>
+      </trans-unit>
+      <trans-unit id="1559883523769732271" datatype="html">
+        <source>Error while loading documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">110</context>
+        </context-group>
+        <target state="needs-translation">Error while loading documents</target>
+      </trans-unit>
+      <trans-unit id="7517688192215738656" datatype="html">
+        <source>ASN</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">127</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">158</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <target state="needs-translation">ASN</target>
+      </trans-unit>
+      <trans-unit id="231679111972850796" datatype="html" approved="yes">
+        <source>Added</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">163</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">65</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <target state="final">أضيف</target>
+      </trans-unit>
+      <trans-unit id="2179847500064178686" datatype="html">
+        <source>Edit document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+          <context context-type="linenumber">182</context>
+        </context-group>
+        <target state="needs-translation">Edit document</target>
+      </trans-unit>
+      <trans-unit id="2155249406916744630" datatype="html">
+        <source>View &quot;<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>&quot; saved successfully.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+          <context context-type="linenumber">196</context>
+        </context-group>
+        <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target>
+      </trans-unit>
+      <trans-unit id="6837554170707123455" datatype="html">
+        <source>View &quot;<x id="PH" equiv-text="savedView.name"/>&quot; created successfully.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+          <context context-type="linenumber">237</context>
+        </context-group>
+        <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target>
+      </trans-unit>
+      <trans-unit id="6849725902312323996" datatype="html">
+        <source>Reset filters</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+          <context context-type="linenumber">78</context>
+        </context-group>
+        <target state="needs-translation">Reset filters</target>
+      </trans-unit>
+      <trans-unit id="5195932016807797291" datatype="html">
+        <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find((c) =&gt; c.id == +rule.value)?.name"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">94,96</context>
+        </context-group>
+        <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find((c) =&gt; c.id == +rule.value)?.name"/></target>
+      </trans-unit>
+      <trans-unit id="8170755470576301659" datatype="html" approved="yes">
+        <source>Without correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">98</context>
+        </context-group>
+        <target state="final">بدون مراسل</target>
+      </trans-unit>
+      <trans-unit id="8705701325879965907" datatype="html">
+        <source>Type: <x id="PH" equiv-text="this.documentTypes.find((dt) =&gt; dt.id == +rule.value)?.name"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">103,105</context>
+        </context-group>
+        <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find((dt) =&gt; dt.id == +rule.value)?.name"/></target>
+      </trans-unit>
+      <trans-unit id="4362173610367509215" datatype="html" approved="yes">
+        <source>Without document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">107</context>
+        </context-group>
+        <target state="final">بدون نوع المستند</target>
+      </trans-unit>
+      <trans-unit id="8180755793012580465" datatype="html">
+        <source>Tag: <x id="PH" equiv-text="this.tags.find((t) =&gt; t.id == +rule.value)?.name"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">111,113</context>
+        </context-group>
+        <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find((t) =&gt; t.id == +rule.value)?.name"/></target>
+      </trans-unit>
+      <trans-unit id="6494566478302448576" datatype="html" approved="yes">
+        <source>Without any tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">117</context>
+        </context-group>
+        <target state="final">بدون أي علامة</target>
+      </trans-unit>
+      <trans-unit id="6523384805359286307" datatype="html">
+        <source>Title: <x id="PH" equiv-text="rule.value"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target>
+      </trans-unit>
+      <trans-unit id="1872523635812236432" datatype="html">
+        <source>ASN: <x id="PH" equiv-text="rule.value"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">124</context>
+        </context-group>
+        <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target>
+      </trans-unit>
+      <trans-unit id="3100631071441658964" datatype="html">
+        <source>Title &amp; content</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">156</context>
+        </context-group>
+        <target state="needs-translation">Title &amp; content</target>
+      </trans-unit>
+      <trans-unit id="1010505078885609376" datatype="html">
+        <source>Advanced search</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">161</context>
+        </context-group>
+        <target state="needs-translation">Advanced search</target>
+      </trans-unit>
+      <trans-unit id="2649431021108393503" datatype="html">
+        <source>More like</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">167</context>
+        </context-group>
+        <target state="needs-translation">More like</target>
+      </trans-unit>
+      <trans-unit id="3697582909018473071" datatype="html">
+        <source>equals</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">186</context>
+        </context-group>
+        <target state="needs-translation">equals</target>
+      </trans-unit>
+      <trans-unit id="5325481293405718739" datatype="html">
+        <source>is empty</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">190</context>
+        </context-group>
+        <target state="needs-translation">is empty</target>
+      </trans-unit>
+      <trans-unit id="6166785695326182482" datatype="html">
+        <source>is not empty</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">194</context>
+        </context-group>
+        <target state="needs-translation">is not empty</target>
+      </trans-unit>
+      <trans-unit id="4686622206659266699" datatype="html">
+        <source>greater than</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">198</context>
+        </context-group>
+        <target state="needs-translation">greater than</target>
+      </trans-unit>
+      <trans-unit id="8014012170270529279" datatype="html">
+        <source>less than</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+          <context context-type="linenumber">202</context>
+        </context-group>
+        <target state="needs-translation">less than</target>
+      </trans-unit>
+      <trans-unit id="7210076240260527720" datatype="html">
+        <source>Save current view</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <target state="needs-translation">Save current view</target>
+      </trans-unit>
+      <trans-unit id="8689274715612276035" datatype="html">
+        <source>Show in sidebar</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">203</context>
+        </context-group>
+        <target state="needs-translation">Show in sidebar</target>
+      </trans-unit>
+      <trans-unit id="4104807402967139762" datatype="html">
+        <source>Show on dashboard</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">199</context>
+        </context-group>
+        <target state="needs-translation">Show on dashboard</target>
+      </trans-unit>
+      <trans-unit id="6965614903949668392" datatype="html">
+        <source>Filter rules error occurred while saving this view</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target state="needs-translation">Filter rules error occurred while saving this view</target>
+      </trans-unit>
+      <trans-unit id="6438839705789707938" datatype="html">
+        <source>The error returned was</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="needs-translation">The error returned was</target>
+      </trans-unit>
+      <trans-unit id="6316128875819022658" datatype="html">
+        <source>correspondent</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+          <context context-type="linenumber">33</context>
+        </context-group>
+        <target state="needs-translation">correspondent</target>
+      </trans-unit>
+      <trans-unit id="1612355304340685070" datatype="html">
+        <source>correspondents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <target state="needs-translation">correspondents</target>
+      </trans-unit>
+      <trans-unit id="6360600151505327572" datatype="html">
+        <source>Last used</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+          <context context-type="linenumber">38</context>
+        </context-group>
+        <target state="needs-translation">Last used</target>
+      </trans-unit>
+      <trans-unit id="7427874343955308724" datatype="html">
+        <source>Do you really want to delete the correspondent &quot;<x id="PH" equiv-text="object.name"/>&quot;?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+          <context context-type="linenumber">48</context>
+        </context-group>
+        <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target>
+      </trans-unit>
+      <trans-unit id="8084492669582894778" datatype="html">
+        <source>document type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">document type</target>
+      </trans-unit>
+      <trans-unit id="2992451138146293104" datatype="html">
+        <source>document types</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <target state="needs-translation">document types</target>
+      </trans-unit>
+      <trans-unit id="4990731724078522539" datatype="html" approved="yes">
+        <source>Do you really want to delete the document type &quot;<x id="PH" equiv-text="object.name"/>&quot;?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+          <context context-type="linenumber">37</context>
+        </context-group>
+        <target state="final">هل ترغب حقاً في حذف نوع المستند "<x id="PH" equiv-text="object.name"/>"؟</target>
+      </trans-unit>
+      <trans-unit id="5674286808255988565" datatype="html" approved="yes">
+        <source>Create</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <target state="final">إنشاء</target>
+      </trans-unit>
+      <trans-unit id="4010735610815226758" datatype="html" approved="yes">
+        <source>Filter by:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target state="final">تصفية حسب:</target>
+      </trans-unit>
+      <trans-unit id="1383365546483928780" datatype="html" approved="yes">
+        <source>Matching</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="final">مطابقة</target>
+      </trans-unit>
+      <trans-unit id="1488347670280290838" datatype="html" approved="yes">
+        <source>Document count</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <target state="final">عدد المستندات</target>
+      </trans-unit>
+      <trans-unit id="7376880254267897616" datatype="html">
+        <source>Filter Documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">44</context>
+        </context-group>
+        <target state="needs-translation">Filter Documents</target>
+      </trans-unit>
+      <trans-unit id="8095412801504464756" datatype="html">
+        <source>{VAR_PLURAL, plural, =1 {One <x id="INTERPOLATION"/>} other {<x id="INTERPOLATION_1"/> total <x id="INTERPOLATION_2"/>}}</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <target state="needs-translation">{VAR_PLURAL, plural, =1 {One <x id="INTERPOLATION"/>} other {<x id="INTERPOLATION_1"/> total <x id="INTERPOLATION_2"/>}}</target>
+      </trans-unit>
+      <trans-unit id="810888510148304696" datatype="html">
+        <source>Automatic</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">87</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">39</context>
+        </context-group>
+        <target state="needs-translation">Automatic</target>
+      </trans-unit>
+      <trans-unit id="4012132330507560812" datatype="html">
+        <source>Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">140</context>
+        </context-group>
+        <target state="needs-translation">Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</target>
+      </trans-unit>
+      <trans-unit id="8371896857609524947" datatype="html">
+        <source>Associated documents will not be deleted.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">155</context>
+        </context-group>
+        <target state="needs-translation">Associated documents will not be deleted.</target>
+      </trans-unit>
+      <trans-unit id="5467489005440577210" datatype="html">
+        <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+          <context context-type="linenumber">168,170</context>
+        </context-group>
+        <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></target>
+      </trans-unit>
+      <trans-unit id="1685061484835793745" datatype="html">
+        <source>Start tour</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">2</context>
+        </context-group>
+        <target state="needs-translation">Start tour</target>
+      </trans-unit>
+      <trans-unit id="6439365426343089851" datatype="html">
+        <source>General</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <target state="needs-translation">General</target>
+      </trans-unit>
+      <trans-unit id="8671234314555525900" datatype="html" approved="yes">
+        <source>Appearance</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target state="final">المظهر</target>
+      </trans-unit>
+      <trans-unit id="3777637051272512093" datatype="html" approved="yes">
+        <source>Display language</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <target state="final">لغة العرض</target>
+      </trans-unit>
+      <trans-unit id="53523152145406584" datatype="html">
+        <source>You need to reload the page after applying a new language.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="needs-translation">You need to reload the page after applying a new language.</target>
+      </trans-unit>
+      <trans-unit id="3766032098416558788" datatype="html">
+        <source>Date display</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <target state="needs-translation">Date display</target>
+      </trans-unit>
+      <trans-unit id="3733378544613473393" datatype="html">
+        <source>Date format</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <target state="needs-translation">Date format</target>
+      </trans-unit>
+      <trans-unit id="3407788781115661841" datatype="html">
+        <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;shortDate&apos;:null:computedDateLocale}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">51</context>
+        </context-group>
+        <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target>
+      </trans-unit>
+      <trans-unit id="6290748171049664628" datatype="html">
+        <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;mediumDate&apos;:null:computedDateLocale}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target>
+      </trans-unit>
+      <trans-unit id="7189855711197998347" datatype="html">
+        <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:&apos;longDate&apos;:null:computedDateLocale}}"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">59</context>
+        </context-group>
+        <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target>
+      </trans-unit>
+      <trans-unit id="8939587804990976924" datatype="html">
+        <source>Items per page</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">67</context>
+        </context-group>
+        <target state="needs-translation">Items per page</target>
+      </trans-unit>
+      <trans-unit id="8028535997917730106" datatype="html">
+        <source>Document editor</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">83</context>
+        </context-group>
+        <target state="needs-translation">Document editor</target>
+      </trans-unit>
+      <trans-unit id="6708098108196142028" datatype="html">
+        <source>Use PDF viewer provided by the browser</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">87</context>
+        </context-group>
+        <target state="needs-translation">Use PDF viewer provided by the browser</target>
+      </trans-unit>
+      <trans-unit id="9003921625412907981" datatype="html">
+        <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">87</context>
+        </context-group>
+        <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target>
+      </trans-unit>
+      <trans-unit id="3982403428275430291" datatype="html">
+        <source>Sidebar</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">94</context>
+        </context-group>
+        <target state="needs-translation">Sidebar</target>
+      </trans-unit>
+      <trans-unit id="4608457133854405683" datatype="html">
+        <source>Use &apos;slim&apos; sidebar (icons only)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">98</context>
+        </context-group>
+        <target state="needs-translation">Use 'slim' sidebar (icons only)</target>
+      </trans-unit>
+      <trans-unit id="1356890996281769972" datatype="html">
+        <source>Dark mode</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">105</context>
+        </context-group>
+        <target state="needs-translation">Dark mode</target>
+      </trans-unit>
+      <trans-unit id="4913823100518391922" datatype="html">
+        <source>Use system settings</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">108</context>
+        </context-group>
+        <target state="needs-translation">Use system settings</target>
+      </trans-unit>
+      <trans-unit id="5782828784040423650" datatype="html">
+        <source>Enable dark mode</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">109</context>
+        </context-group>
+        <target state="needs-translation">Enable dark mode</target>
+      </trans-unit>
+      <trans-unit id="6336642923114460405" datatype="html">
+        <source>Invert thumbnails in dark mode</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">110</context>
+        </context-group>
+        <target state="needs-translation">Invert thumbnails in dark mode</target>
+      </trans-unit>
+      <trans-unit id="7983234071833154796" datatype="html">
+        <source>Theme Color</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">116</context>
+        </context-group>
+        <target state="needs-translation">Theme Color</target>
+      </trans-unit>
+      <trans-unit id="7808756054397155068" datatype="html">
+        <source>Reset</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">125</context>
+        </context-group>
+        <target state="needs-translation">Reset</target>
+      </trans-unit>
+      <trans-unit id="8901931207592071833" datatype="html">
+        <source>Update checking</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">130</context>
+        </context-group>
+        <target state="needs-translation">Update checking</target>
+      </trans-unit>
+      <trans-unit id="7890007688616707209" datatype="html">
+        <source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Actual updating of the app must still be performed manually. </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">134,137</context>
+        </context-group>
+        <target state="needs-translation"> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Actual updating of the app must still be performed manually. </target>
+      </trans-unit>
+      <trans-unit id="5489945693955857309" datatype="html">
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">139</context>
+        </context-group>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="5070799004079086984" datatype="html">
+        <source>Enable update checking</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">141</context>
+        </context-group>
+        <target state="needs-translation">Enable update checking</target>
+      </trans-unit>
+      <trans-unit id="5478370193831195440" datatype="html">
+        <source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be &apos;ahead&apos; of the current third-party release.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">141</context>
+        </context-group>
+        <target state="needs-translation">Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release.</target>
+      </trans-unit>
+      <trans-unit id="8508424367627989968" datatype="html">
+        <source>Bulk editing</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="needs-translation">Bulk editing</target>
+      </trans-unit>
+      <trans-unit id="8158899674926420054" datatype="html">
+        <source>Show confirmation dialogs</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">149</context>
+        </context-group>
+        <target state="needs-translation">Show confirmation dialogs</target>
+      </trans-unit>
+      <trans-unit id="6906812245033969309" datatype="html">
+        <source>Deleting documents will always ask for confirmation.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">149</context>
+        </context-group>
+        <target state="needs-translation">Deleting documents will always ask for confirmation.</target>
+      </trans-unit>
+      <trans-unit id="290238406234356122" datatype="html">
+        <source>Apply on close</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">150</context>
+        </context-group>
+        <target state="needs-translation">Apply on close</target>
+      </trans-unit>
+      <trans-unit id="4666858503087488647" datatype="html">
+        <source>Enable comments</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">158</context>
+        </context-group>
+        <target state="needs-translation">Enable comments</target>
+      </trans-unit>
+      <trans-unit id="5851560788527570644" datatype="html" approved="yes">
+        <source>Notifications</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">166</context>
+        </context-group>
+        <target state="final">الإشعارات</target>
+      </trans-unit>
+      <trans-unit id="8545554728558600606" datatype="html">
+        <source>Document processing</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">169</context>
+        </context-group>
+        <target state="needs-translation">Document processing</target>
+      </trans-unit>
+      <trans-unit id="3656786776644872398" datatype="html">
+        <source>Show notifications when new documents are detected</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">173</context>
+        </context-group>
+        <target state="needs-translation">Show notifications when new documents are detected</target>
+      </trans-unit>
+      <trans-unit id="6057053428592387613" datatype="html">
+        <source>Show notifications when document processing completes successfully</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">174</context>
+        </context-group>
+        <target state="needs-translation">Show notifications when document processing completes successfully</target>
+      </trans-unit>
+      <trans-unit id="370315664367425513" datatype="html">
+        <source>Show notifications when document processing fails</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">175</context>
+        </context-group>
+        <target state="needs-translation">Show notifications when document processing fails</target>
+      </trans-unit>
+      <trans-unit id="6838309441164918531" datatype="html">
+        <source>Suppress notifications on dashboard</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">176</context>
+        </context-group>
+        <target state="needs-translation">Suppress notifications on dashboard</target>
+      </trans-unit>
+      <trans-unit id="2741919327232918179" datatype="html">
+        <source>This will suppress all messages about document processing status on the dashboard.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">176</context>
+        </context-group>
+        <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target>
+      </trans-unit>
+      <trans-unit id="6925788033494878061" datatype="html">
+        <source>Appears on</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">196</context>
+        </context-group>
+        <target state="needs-translation">Appears on</target>
+      </trans-unit>
+      <trans-unit id="7877440816920439876" datatype="html">
+        <source>No saved views defined.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+          <context context-type="linenumber">213</context>
+        </context-group>
+        <target state="needs-translation">No saved views defined.</target>
+      </trans-unit>
+      <trans-unit id="5610279464668232148" datatype="html">
+        <source>Saved view &quot;<x id="PH" equiv-text="savedView.name"/>&quot; deleted.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">217</context>
+        </context-group>
+        <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target>
+      </trans-unit>
+      <trans-unit id="3891152409365583719" datatype="html">
+        <source>Settings saved</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">310</context>
+        </context-group>
+        <target state="needs-translation">Settings saved</target>
+      </trans-unit>
+      <trans-unit id="7217000812750597833" datatype="html">
+        <source>Settings were saved successfully.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">311</context>
+        </context-group>
+        <target state="needs-translation">Settings were saved successfully.</target>
+      </trans-unit>
+      <trans-unit id="525012668859298131" datatype="html">
+        <source>Settings were saved successfully. Reload is required to apply some changes.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">315</context>
+        </context-group>
+        <target state="needs-translation">Settings were saved successfully. Reload is required to apply some changes.</target>
+      </trans-unit>
+      <trans-unit id="8491974984518503778" datatype="html">
+        <source>Reload now</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">316</context>
+        </context-group>
+        <target state="needs-translation">Reload now</target>
+      </trans-unit>
+      <trans-unit id="6839066544204061364" datatype="html" approved="yes">
+        <source>Use system language</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">334</context>
+        </context-group>
+        <target state="final">استخدم لغة النظام</target>
+      </trans-unit>
+      <trans-unit id="7729897675462249787" datatype="html" approved="yes">
+        <source>Use date format of display language</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">341</context>
+        </context-group>
+        <target state="final">استخدم تنسيق تاريخ لغة العرض</target>
+      </trans-unit>
+      <trans-unit id="8488620293789898901" datatype="html">
+        <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+          <context context-type="linenumber">361,363</context>
+        </context-group>
+        <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(               error.error             )"/></target>
+      </trans-unit>
+      <trans-unit id="5101757640976222639" datatype="html">
+        <source>storage path</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">storage path</target>
+      </trans-unit>
+      <trans-unit id="22235115124223314" datatype="html">
+        <source>storage paths</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <target state="needs-translation">storage paths</target>
+      </trans-unit>
+      <trans-unit id="1569070683025071137" datatype="html">
+        <source>Do you really want to delete the storage path &quot;<x id="PH" equiv-text="object.name"/>&quot;?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+        <target state="needs-translation">Do you really want to delete the storage path "<x id="PH" equiv-text="object.name"/>"?</target>
+      </trans-unit>
+      <trans-unit id="6402703264596649214" datatype="html">
+        <source>tag</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">tag</target>
+      </trans-unit>
+      <trans-unit id="4975748273657042999" datatype="html">
+        <source>tags</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <target state="needs-translation">tags</target>
+      </trans-unit>
+      <trans-unit id="93754014749412887" datatype="html" approved="yes">
+        <source>Do you really want to delete the tag &quot;<x id="PH" equiv-text="object.name"/>&quot;?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <target state="final">هل ترغب حقاً في حذف العلامة "<x id="PH" equiv-text="object.name"/>"؟</target>
+      </trans-unit>
+      <trans-unit id="103921551219467537" datatype="html">
+        <source>Clear selection</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+        <target state="needs-translation">Clear selection</target>
+      </trans-unit>
+      <trans-unit id="187187500641108332" datatype="html">
+        <source>
+          <x id="INTERPOLATION" equiv-text="{{dismissButtonText}}"/>
+        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{dismissButtonText}}"/></target>
+      </trans-unit>
+      <trans-unit id="1102717806459547726" datatype="html">
+        <source>Refresh</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">Refresh</target>
+      </trans-unit>
+      <trans-unit id="5968132631442328843" datatype="html">
+        <source>Results</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">42</context>
+        </context-group>
+        <target state="needs-translation">Results</target>
+      </trans-unit>
+      <trans-unit id="8958063833276423847" datatype="html">
+        <source>click for full output</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">66</context>
+        </context-group>
+        <target state="needs-translation">click for full output</target>
+      </trans-unit>
+      <trans-unit id="1536087519743707362" datatype="html">
+        <source>Dismiss</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">81</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">56</context>
+        </context-group>
+        <target state="needs-translation">Dismiss</target>
+      </trans-unit>
+      <trans-unit id="2134950584701094962" datatype="html">
+        <source>Open Document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">86</context>
+        </context-group>
+        <target state="needs-translation">Open Document</target>
+      </trans-unit>
+      <trans-unit id="6798650225457993016" datatype="html">
+        <source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot; class=&quot;badge bg-danger ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">103</context>
+        </context-group>
+        <target state="needs-translation">Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot; class=&quot;badge bg-danger ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="2352193508676933865" datatype="html">
+        <source>Complete <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.completedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">109</context>
+        </context-group>
+        <target state="needs-translation">Complete <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.completedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="1697296301417588213" datatype="html">
+        <source>Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.startedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">115</context>
+        </context-group>
+        <target state="needs-translation">Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.startedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="6517676116023827583" datatype="html">
+        <source>Queued <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.queuedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">Queued <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.queuedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+      </trans-unit>
+      <trans-unit id="5404910960991552159" datatype="html">
+        <source>Dismiss selected</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <target state="needs-translation">Dismiss selected</target>
+      </trans-unit>
+      <trans-unit id="8829078752502782653" datatype="html">
+        <source>Dismiss all</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <target state="needs-translation">Dismiss all</target>
+      </trans-unit>
+      <trans-unit id="1323591410517879795" datatype="html">
+        <source>Confirm Dismiss All</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <target state="needs-translation">Confirm Dismiss All</target>
+      </trans-unit>
+      <trans-unit id="6566358716882976903" datatype="html">
+        <source>tasks?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <target state="needs-translation">tasks?</target>
+      </trans-unit>
+      <trans-unit id="181464970911903082" datatype="html">
+        <source>404 Not Found</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+        <target state="needs-translation">404 Not Found</target>
+      </trans-unit>
+      <trans-unit id="5851669019930456395" datatype="html">
+        <source>Any word</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <target state="needs-translation">Any word</target>
+      </trans-unit>
+      <trans-unit id="7517655726614958140" datatype="html">
+        <source>Any: Document contains any of these words (space separated)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <target state="needs-translation">Any: Document contains any of these words (space separated)</target>
+      </trans-unit>
+      <trans-unit id="700315718208181326" datatype="html">
+        <source>All words</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <target state="needs-translation">All words</target>
+      </trans-unit>
+      <trans-unit id="111914402588955480" datatype="html">
+        <source>All: Document contains all of these words (space separated)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">All: Document contains all of these words (space separated)</target>
+      </trans-unit>
+      <trans-unit id="9180173992399180575" datatype="html">
+        <source>Exact match</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <target state="needs-translation">Exact match</target>
+      </trans-unit>
+      <trans-unit id="7109184332944610787" datatype="html">
+        <source>Exact: Document contains this string</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="needs-translation">Exact: Document contains this string</target>
+      </trans-unit>
+      <trans-unit id="1338733395833138319" datatype="html">
+        <source>Regular expression</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <target state="needs-translation">Regular expression</target>
+      </trans-unit>
+      <trans-unit id="7548151332424148033" datatype="html">
+        <source>Regular expression: Document matches this regular expression</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">Regular expression: Document matches this regular expression</target>
+      </trans-unit>
+      <trans-unit id="1856513373880048959" datatype="html">
+        <source>Fuzzy word</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <target state="needs-translation">Fuzzy word</target>
+      </trans-unit>
+      <trans-unit id="8419167206585286450" datatype="html">
+        <source>Fuzzy: Document contains a word similar to this word</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target>
+      </trans-unit>
+      <trans-unit id="2167862279705099846" datatype="html">
+        <source>Auto: Learn matching automatically</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+          <context context-type="linenumber">40</context>
+        </context-group>
+        <target state="needs-translation">Auto: Learn matching automatically</target>
+      </trans-unit>
+      <trans-unit id="5948496158474272829" datatype="html">
+        <source>Warning: You have unsaved changes to your document(s).</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-doc.guard.ts</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <target state="needs-translation">Warning: You have unsaved changes to your document(s).</target>
+      </trans-unit>
+      <trans-unit id="159901853873315050" datatype="html">
+        <source>Unsaved Changes</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">116</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">143</context>
+        </context-group>
+        <target state="needs-translation">Unsaved Changes</target>
+      </trans-unit>
+      <trans-unit id="2573823578527613511" datatype="html">
+        <source>You have unsaved changes.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">144</context>
+        </context-group>
+        <target state="needs-translation">You have unsaved changes.</target>
+      </trans-unit>
+      <trans-unit id="3305084982600522070" datatype="html">
+        <source>Are you sure you want to leave?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <target state="needs-translation">Are you sure you want to leave?</target>
+      </trans-unit>
+      <trans-unit id="729881853265307704" datatype="html">
+        <source>Leave page</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <target state="needs-translation">Leave page</target>
+      </trans-unit>
+      <trans-unit id="1649285023712919370" datatype="html">
+        <source>You have unsaved changes to the saved view</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+        <target state="needs-translation">You have unsaved changes to the saved view</target>
+      </trans-unit>
+      <trans-unit id="7282050913165342352" datatype="html">
+        <source>Are you sure you want to close this saved view?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target state="needs-translation">Are you sure you want to close this saved view?</target>
+      </trans-unit>
+      <trans-unit id="856284624775342512" datatype="html">
+        <source>Save and close</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <target state="needs-translation">Save and close</target>
+      </trans-unit>
+      <trans-unit id="7536524521722799066" datatype="html" approved="yes">
+        <source>(no title)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target state="final">(بدون عنوان)</target>
+      </trans-unit>
+      <trans-unit id="2807800733729323332" datatype="html" approved="yes">
+        <source>Yes</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target state="final">نعم</target>
+      </trans-unit>
+      <trans-unit id="3542042671420335679" datatype="html" approved="yes">
+        <source>No</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target state="final">لا</target>
+      </trans-unit>
+      <trans-unit id="2119857572761283468" datatype="html" approved="yes">
+        <source>Document already exists.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">15</context>
+        </context-group>
+        <target state="final">المستند موجود مسبقاً.</target>
+      </trans-unit>
+      <trans-unit id="148389968432135849" datatype="html" approved="yes">
+        <source>File not found.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <target state="final">لم يعثر على الملف.</target>
+      </trans-unit>
+      <trans-unit id="1520671543092565667" datatype="html">
+        <source>Pre-consume script does not exist.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+        <target state="needs-translation">Pre-consume script does not exist.</target>
+      </trans-unit>
+      <trans-unit id="7742915911032564889" datatype="html">
+        <source>Error while executing pre-consume script.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+        <target state="needs-translation">Error while executing pre-consume script.</target>
+      </trans-unit>
+      <trans-unit id="8995193730018060346" datatype="html">
+        <source>Post-consume script does not exist.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+        <target state="needs-translation">Post-consume script does not exist.</target>
+      </trans-unit>
+      <trans-unit id="256773668518189604" datatype="html">
+        <source>Error while executing post-consume script.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">20</context>
+        </context-group>
+        <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+        <target state="needs-translation">Error while executing post-consume script.</target>
+      </trans-unit>
+      <trans-unit id="6252258095055634191" datatype="html" approved="yes">
+        <source>Received new file.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">21</context>
+        </context-group>
+        <target state="final">استلم ملف جديد.</target>
+      </trans-unit>
+      <trans-unit id="7337565919209746135" datatype="html" approved="yes">
+        <source>File type not supported.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <target state="final">نوع الملف غير مدعوم.</target>
+      </trans-unit>
+      <trans-unit id="5002399167376099234" datatype="html" approved="yes">
+        <source>Processing document...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <target state="final">معالجة الوثيقة...</target>
+      </trans-unit>
+      <trans-unit id="1085975194762600381" datatype="html" approved="yes">
+        <source>Generating thumbnail...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <target state="final">إنشاء مصغرات...</target>
+      </trans-unit>
+      <trans-unit id="3280851677698431426" datatype="html" approved="yes">
+        <source>Retrieving date from document...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target state="final">استرداد التاريخ من المستند...</target>
+      </trans-unit>
+      <trans-unit id="7162102384876037296" datatype="html" approved="yes">
+        <source>Saving document...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+        <target state="final">حفظ المستند...</target>
+      </trans-unit>
+      <trans-unit id="4550450765009165976" datatype="html" approved="yes">
+        <source>Finished.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <target state="final">انتهى.</target>
+      </trans-unit>
+      <trans-unit id="5523607037798226031" datatype="html">
+        <source>You have unsaved changes to the document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">118</context>
+        </context-group>
+        <target state="needs-translation">You have unsaved changes to the document</target>
+      </trans-unit>
+      <trans-unit id="2089045849587358256" datatype="html">
+        <source>Are you sure you want to close this document?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">122</context>
+        </context-group>
+        <target state="needs-translation">Are you sure you want to close this document?</target>
+      </trans-unit>
+      <trans-unit id="2885986061416655600" datatype="html">
+        <source>Close document</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">124</context>
+        </context-group>
+        <target state="needs-translation">Close document</target>
+      </trans-unit>
+      <trans-unit id="6755718693176327396" datatype="html">
+        <source>Are you sure you want to close all documents?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="needs-translation">Are you sure you want to close all documents?</target>
+      </trans-unit>
+      <trans-unit id="4215561719980781894" datatype="html">
+        <source>Close documents</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+          <context context-type="linenumber">147</context>
+        </context-group>
+        <target state="needs-translation">Close documents</target>
+      </trans-unit>
+      <trans-unit id="3553216189604488439" datatype="html" approved="yes">
+        <source>Modified</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <target state="final">تعديل</target>
+      </trans-unit>
+      <trans-unit id="4460262093225954455" datatype="html" approved="yes">
+        <source>Search score</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <note priority="1" from="description">Score is a value returned by the full text search engine and specifies how well a result matches the given query</note>
+        <target state="final">نقاط البحث</target>
+      </trans-unit>
+      <trans-unit id="1206520795340730278" datatype="html">
+        <source>English (US)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">145</context>
+        </context-group>
+        <target state="needs-translation">English (US)</target>
+      </trans-unit>
+      <trans-unit id="3098941349689899577" datatype="html">
+        <source>Belarusian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">151</context>
+        </context-group>
+        <target state="needs-translation">Belarusian</target>
+      </trans-unit>
+      <trans-unit id="2719780722934172508" datatype="html">
+        <source>Czech</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">157</context>
+        </context-group>
+        <target state="needs-translation">Czech</target>
+      </trans-unit>
+      <trans-unit id="2924289692679201020" datatype="html">
+        <source>Danish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">163</context>
+        </context-group>
+        <target state="needs-translation">Danish</target>
+      </trans-unit>
+      <trans-unit id="1858110241312746425" datatype="html">
+        <source>German</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">169</context>
+        </context-group>
+        <target state="needs-translation">German</target>
+      </trans-unit>
+      <trans-unit id="6987083569809053351" datatype="html">
+        <source>English (GB)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">175</context>
+        </context-group>
+        <target state="needs-translation">English (GB)</target>
+      </trans-unit>
+      <trans-unit id="5190825892106392539" datatype="html" approved="yes">
+        <source>Spanish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">181</context>
+        </context-group>
+        <target state="final">الإسبانية</target>
+      </trans-unit>
+      <trans-unit id="7633754075223722162" datatype="html">
+        <source>French</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">187</context>
+        </context-group>
+        <target state="needs-translation">French</target>
+      </trans-unit>
+      <trans-unit id="2935232983274991580" datatype="html">
+        <source>Italian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">193</context>
+        </context-group>
+        <target state="needs-translation">Italian</target>
+      </trans-unit>
+      <trans-unit id="1334425850005897370" datatype="html">
+        <source>Luxembourgish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">199</context>
+        </context-group>
+        <target state="needs-translation">Luxembourgish</target>
+      </trans-unit>
+      <trans-unit id="3071065188816255493" datatype="html">
+        <source>Dutch</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">205</context>
+        </context-group>
+        <target state="needs-translation">Dutch</target>
+      </trans-unit>
+      <trans-unit id="792060551707690640" datatype="html" approved="yes">
+        <source>Polish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">211</context>
+        </context-group>
+        <target state="final">البولندية</target>
+      </trans-unit>
+      <trans-unit id="9184513005098760425" datatype="html">
+        <source>Portuguese (Brazil)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">217</context>
+        </context-group>
+        <target state="needs-translation">Portuguese (Brazil)</target>
+      </trans-unit>
+      <trans-unit id="153799456510623899" datatype="html" approved="yes">
+        <source>Portuguese</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">223</context>
+        </context-group>
+        <target state="final">البرتغالية</target>
+      </trans-unit>
+      <trans-unit id="8118856427047826368" datatype="html">
+        <source>Romanian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">229</context>
+        </context-group>
+        <target state="needs-translation">Romanian</target>
+      </trans-unit>
+      <trans-unit id="7137419789978325708" datatype="html" approved="yes">
+        <source>Russian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">235</context>
+        </context-group>
+        <target state="final">الروسية</target>
+      </trans-unit>
+      <trans-unit id="4287008301409320881" datatype="html">
+        <source>Slovenian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">241</context>
+        </context-group>
+        <target state="needs-translation">Slovenian</target>
+      </trans-unit>
+      <trans-unit id="8608389829607915090" datatype="html">
+        <source>Serbian</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">247</context>
+        </context-group>
+        <target state="needs-translation">Serbian</target>
+      </trans-unit>
+      <trans-unit id="499386805970351976" datatype="html" approved="yes">
+        <source>Swedish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">253</context>
+        </context-group>
+        <target state="final">السويدية</target>
+      </trans-unit>
+      <trans-unit id="5682359291233237791" datatype="html">
+        <source>Turkish</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">259</context>
+        </context-group>
+        <target state="needs-translation">Turkish</target>
+      </trans-unit>
+      <trans-unit id="4689443708886954687" datatype="html">
+        <source>Chinese Simplified</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">265</context>
+        </context-group>
+        <target state="needs-translation">Chinese Simplified</target>
+      </trans-unit>
+      <trans-unit id="4912706592792948707" datatype="html">
+        <source>ISO 8601</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">282</context>
+        </context-group>
+        <target state="needs-translation">ISO 8601</target>
+      </trans-unit>
+      <trans-unit id="313643372755303297" datatype="html">
+        <source>Successfully completed one-time migratration of settings to the database!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">393</context>
+        </context-group>
+        <target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
+      </trans-unit>
+      <trans-unit id="5558341108007064934" datatype="html">
+        <source>Unable to migrate settings to the database, please try saving manually.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+          <context context-type="linenumber">394</context>
+        </context-group>
+        <target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
+      </trans-unit>
+      <trans-unit id="1519954996184640001" datatype="html" approved="yes">
+        <source>Error</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/toast.service.ts</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <target state="final">خطأ</target>
+      </trans-unit>
+      <trans-unit id="5037437391296624618" datatype="html" approved="yes">
+        <source>Information</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/toast.service.ts</context>
+          <context context-type="linenumber">36</context>
+        </context-group>
+        <target state="final">معلومات</target>
+      </trans-unit>
+      <trans-unit id="3852289441366561594" datatype="html">
+        <source>Connecting...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <target state="needs-translation">Connecting...</target>
+      </trans-unit>
+      <trans-unit id="1245343823699368872" datatype="html">
+        <source>Uploading...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+          <context context-type="linenumber">43</context>
+        </context-group>
+        <target state="needs-translation">Uploading...</target>
+      </trans-unit>
+      <trans-unit id="7446520539098045935" datatype="html">
+        <source>Upload complete, waiting...</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+          <context context-type="linenumber">46</context>
+        </context-group>
+        <target state="needs-translation">Upload complete, waiting...</target>
+      </trans-unit>
+      <trans-unit id="1405142710727603568" datatype="html">
+        <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+          <context context-type="linenumber">62</context>
+        </context-group>
+        <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
index e054c2ee905f4b1155c37b4b0368143cb055ff06..1ef5ec4efd140dd1b30def0588f8a97ea26de15c 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Закрыць</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Папярэдняя</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Наступная</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Абраць месяц</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Абраць год</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Папярэдні месяц</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Наступны месяц</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Першы</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Папярэдняя</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Наступная</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">На апошнюю</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Гадзіны</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Хвіліны</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Прыбавіць гадзіну</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Адняць гадзіну</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Прыбавіць хвіліну</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Адняць хвіліну</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Секунды</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Прыбавіць секунду</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Адняць секунду</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Закрыць</target>
       </trans-unit>
         </context-group>
         <target state="translated">Дакумент <x id="PH" equiv-text="status.filename"/> апрацоўваецца paperless-ngx.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Наступная</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="translated">Прыборную панэль можна выкарыстоўваць для паказу захаваных праглядаў, такіх як "Уваходныя". Гэтыя налады знаходзяцца ў Наладах &gt; Захаваныя прагляды пасля таго, як вы іх стварылі.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Спіс дакументаў паказвае ўсе вашы дакументы і дазваляе фільтраваць, а таксама масава рэдагаваць. Ёсць тры розныя стылі прагляду: спіс, маленькія карты і вялікія карты. Спіс дакументаў, адкрытых для рэдагавання, паказаны на бакавой панэлі.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="translated">Інструменты фільтрацыі дазваляюць хутка знаходзіць дакументы па розных пошуках, датах, тэгах і г.д.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="translated">Любую камбінацыю фільтраў можна захаваць у выглядзе 'прагляда', які потым можа адлюстроўвацца на прыборнай панэлі і/або бакавой панэлі.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="translated">З дапамогай гэтых старонак можна кіраваць тэгамі, карэспандэнтамі, тыпамі дакументаў і шляхамі захоўвання. Іх таксама можна стварыць з прагляду рэдагавання дакумента.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="translated">Файлавыя задачы паказваюць вам дакументы, якія былі спажыты, чакаюць або пацярпелі збой падчас працэсу.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Праверце налады для розных налад вэб-праграмы або каб пераключыць налады для захаваных відаў.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="translated">Вобласць адміністратара змяшчае больш пашыраныя элементы кіравання, а таксама налады для аўтаматычнага атрымання электроннай пошты.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Дзякуй! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="translated">Ёсць &lt;em&gt;тоны&lt;/em&gt; дадатковыя магчымасці і інфармацыя, якую мы тут не разглядалі, але гэта дапаможа вам пачаць. Праверце дакументацыю або наведайце праект на GitHub, каб даведацца больш або паведаміць аб праблемах.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="translated">Нарэшце, ад імя кожнага ўдзельніка гэтага праекта, які падтрымліваецца супольнасцю, дзякуй за выкарыстанне Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Пачатак загрузкі...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Вы ўвайшлі як <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Выхад</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Адкрыць дакументы</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Закрыць усё</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Кіраванне</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Карэспандэнты</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Тэгі</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Тыпы дакументаў</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Шляхі захоўвання</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="translated">Файлавыя задачы<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Кіраўнік</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Дакументацыя</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Прапанаваць ідэю</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">даступна.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Націсніце, каб убачыць.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="translated">Paperless-ngx можа аўтаматычна правяраць наяўнасць абнаўленняў</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated"> Як гэта працуе? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Даступна абнаўленне</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="translated">Адбылася памылка падчас захавання налад праверкі абнаўленняў.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Ачысціць</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Пасля</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Ачысціць</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Перад</target>
       </trans-unit>
         <target state="translated">Немагчыма захаваць элемент: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Звярніце ўвагу, што рэдагаванне шляху не прымяняе змены да захаваных файлаў, пакуль вы не запусціце ўтыліту 'document_renamer'. Глядзіце <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration. html#utilities-renamer&quot;&gt;"/>дакументацыю<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x- em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">або выкарыстоўвайце касыя рысы, каб дадаць каталогі, напр.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Глядзіце &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;дакументацыю&lt;/a&gt; для поўнага спісу.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Любы</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Ужыць</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Націсніце зноў, каб выключыць элементы.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="translated">Вы гатовыя пачаць запампоўку дакументаў! Даследуйце розныя функцыі гэтай вэб-праграмы самастойна або пачніце кароткі тур, націснуўшы кнопку ніжэй.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="translated">Больш падрабязную інфармацыю аб выкарыстанні і наладзе Paperless-ngx заўсёды можна знайсці ў <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs. io&quot; target=&quot;_blank&quot;&gt;"/>дакументацыі<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Папярэдняя</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Наступная</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Шлях захоўвання</target>
       </trans-unit>
         </context-group>
         <target state="translated">Працягнуць</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">Паўтор аперацыі OCR пачнецца ў фонавым рэжыме.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Фільтраваць тэгі</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Фільтр карэспандэнтаў</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Фільтр тыпаў дакументаў</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Фільтраваць шляхі захоўвання</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Скінуць фільтры</target>
       </trans-unit>
index 11f1e0c547fb774cb27d93d5772a274e94e21460..6b58c8f8d76e6744880fdb3e7ce51e8e708bfde2 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zavřít</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Předchozí</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Následující</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Vybrat měsíc</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Vybrat rok</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Předchozí měsíc</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Následující měsíc</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">První</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Předchozí</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Následující</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Poslední</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Hodin</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuty</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekundy</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zavřít</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> je zpracováván Paperless-ngx.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Odhlásit se</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Otevřené dokumenty</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Zavřít vše</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Spravovat</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Korespondenti</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Štítky</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Typy dokumentu</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="needs-translation">Admin</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Dokumentace</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="needs-translation">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Navrhnout úpravu</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">is available.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">Click to view.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="needs-translation">Update available</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Smazat</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Po</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Smazat</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Před</target>
       </trans-unit>
         <target state="final">Nelze uložit prvek: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Použít</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="needs-translation">Click again to exclude items.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrovat štítky</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrovat korespondenty</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrovat typy dokumentů</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Zrušit filtry</target>
       </trans-unit>
index 3303e8f084af061b9e2283d2770917a6dcac43ec..9d1b527b450d2e6dedf4e4ad6fb57d32bb05ecfc 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Luk</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Næste</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Vælg måned</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Vælg år</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Forrige måned</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Næste måned</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Første</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Næste</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Sidste</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Timer</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutter</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Forøg timer</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Reducer timer</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Forøg minutter</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Reducer minutter</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunder</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Forøg sekunder</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Reducer sekunder</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Luk</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> behandles af paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Næste</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Uploader...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Log ud</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Åbn dokumenter</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Luk alle</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Administrér</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Korrespondenter</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Etiketter</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Dokumenttyper</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Admin</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentation</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Foreslå en idé</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">er tilgængelig.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klik for at se.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Opdatering tilgængelig</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Ryd</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Efter</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Ryd</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Før</target>
       </trans-unit>
         <target state="final">Kunne ikke gemme element: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Anvend</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Klik igen for at ekskludere elementer.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Næste</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Filtrer etiketter</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Filtrer korrespondenter</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Filtrer dokumenttyper</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Nulstil filtre</target>
       </trans-unit>
index b543f614803ed64f75758a7dd3536efd1c9b24cf..f85e13d67d86c323aec56ca992d68979eee67972 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Schließen</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Folie <x id="INTERPOLATION" equiv-text="ing when mouse"/> von <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Vorherige</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Nächste</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Monat auswählen</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Jahr auswählen</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Vorheriger Monat</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Nächster Monat</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Erste</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Vorherige</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Nächste</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Letzte</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Stunden</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuten</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Stunden erhöhen</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Stunden verringern</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Minuten erhöhen</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Minuten verringern</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunden</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunden erhöhen</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunden verringern</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Schließen</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> wird von Paperless verarbeitet.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="translated">Zurück</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Weiter</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="translated">Ende</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="translated">Das Dashboard kann zum Anzeigen von gespeicherten Ansichten verwendet werden, wie zum Beispiel einem 'Posteingang'. Diese Einstellungen werden unter Einstellungen &gt; gespeicherte Ansichten gefunden, sobald Sie mindestens eine eigene Ansicht erstellt haben.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="translated">Ziehen Sie hier Dokumente hinein, um mit dem Hochladen zu beginnen oder kopieren Sie Dateien in den 'consume' Ordner. Sie können auch Dokumente überall auf allen anderen Seiten der Web-App ziehen. Wenn Sie dies tun, startet Paperless-ngx seine Algorithmen.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Die Dokumentenliste zeigt alle Ihre Dokumente an und ermöglicht das Filtern sowie die Massenbearbeitung von mehreren Dokumenten. Es gibt drei verschiedene Ansichtsstile: Liste, kleine Karten und große Karten.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="translated">Mit den Filterwerkzeugen können Sie schnell Dokumente finden, die verschiedene Datumsbereiche, Tags und andere Suchbegriffe enthalten.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="translated">Jede Kombination von Filterkriterien kann als 'Ansicht' gespeichert werden, die dann auf dem Dashboard und / oder der Seitenleiste angezeigt werden können.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="translated">Schlagwörter, Korrespondenten, Dokumententypen und Speicherpfade können über diese Seiten verwaltet werden. Sie können auch aus der Dokumentbearbeitung erstellt werden.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="translated">Die Dateiaufgaben zeigen Ihnen Dokumente, die verarbeitet wurden, auf Verarbeitung warten oder während der Verarbeitung fehlgeschlagen sind.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Hier finden Sie verschiedene globale Einstellungen für die Anwendung und können die gespeicherten Ansichten verwalten.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="translated">Der Adminbereich enthält erweiterte Steuerelemente sowie die Einstellungen für das automatische Abrufen von E-Mails.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Vielen Dank! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="translated">Es gibt noch &lt;em&gt;erheblich&lt;/em&gt; mehr Funktionen und Informationen, die nicht in der Tour abgedeckt wurden, nach der Tour sollten Sie jedoch direkt loslegen können. Schauen Sie sich die Dokumentation an oder besuchen Sie das Projekt auf GitHub um mehr zu erfahren oder Probleme zu melden.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="translated">Im Namen jedes Beitragenden zu diesem von der Gemeinschaft unterstützten Projekt, sagen wir, Danke, dass Sie Paperless-ngx benutzen!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Beginne Upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Eingeloggt als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Abmelden</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Geöffnete Dokumente</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Alle schließen</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Verwalten</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Korrespondenten</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Tags</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Dokumenttypen</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Speicherpfad</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="translated">Dateiaufgaben<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administration</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Dokumentation</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Eine Idee vorschlagen</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">ist verfügbar.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Zum Anzeigen klicken.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="translated">Paperless-ngx kann automatisch auf Updates überprüfen</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated"> Wie funktioniert das? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Aktualisierung verfügbar</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="translated">Es ist ein Fehler beim Speichern der Update Einstellungen aufgetreten.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Zurücksetzen</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Nach</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Zurücksetzen</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Vor</target>
       </trans-unit>
         <target state="final">Konnte Element nicht speichern: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Beachten Sie, dass das Bearbeiten eines Pfades keine Änderungen an gespeicherten Dateien vornimmt, bis Sie das Programm 'document_renamer' gestartet haben. Siehe die <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>Dokumentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">oder benutzen Sie Schrägstriche, um bspw. Verzeichnisse hinzuzufügen</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Siehe &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;Dokumentation&lt;/a&gt; für die vollständige Liste.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Irgendeines</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Anwenden</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Erneut klicken, um Elemente auszuschließen.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="translated">Sie sind bereit, Dokumente hochzuladen! Entdecken Sie die verschiedenen Funktionen dieser Web-App auf eigene Faust oder starten Sie eine kurze Tour mit dem unten stehenden Button.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="translated">Mehr Details zum Benutzen und Konfigurieren von Paperless-ngx ist in der offiziellen <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>-Dokumentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> verfügbar.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Zurück</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Weiter</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Speicherpfad</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
           <context context-type="linenumber">387</context>
         </context-group>
-        <target state="translated">OCR wiederholen</target>
+        <target state="translated">OCR wiederholen bestätigen</target>
       </trans-unit>
       <trans-unit id="9197453786953646058" datatype="html">
         <source>This operation will permanently redo OCR for this document.</source>
         </context-group>
         <target state="translated">Fortfahren</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">Die erneute Texterkennung wird im Hintergrund gestartet.</target>
+        <target state="translated">OCR-Vorgang wird im Hintergrund neu gestartet. Schließen oder laden Sie dieses Dokument nach Abschluss der Operation neu oder öffnen Sie es erneut, um neue Inhalte anzuzeigen.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Tags filtern</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Korrespondenten filtern</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Dokumenttypen filtern</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Speicherpfade filtern</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
           <context context-type="linenumber">388</context>
         </context-group>
-        <target state="translated">Diese Aktion wird die Texterkennung für <x id="PH" equiv-text="this.list.selected.size"/> ausgewählte(s) Dokument(e) wiederholen.</target>
+        <target state="translated">Diese Aktion wird OCR permanent für <x id="PH" equiv-text="this.list.selected.size"/> ausgewählte(s) Dokument(e) wiederholen.</target>
       </trans-unit>
       <trans-unit id="8076495233090006322" datatype="html" approved="yes">
         <source>Filter by correspondent</source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Filter zurücksetzen</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">173</context>
         </context-group>
-        <target state="final">Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target>
+        <target state="final">Benachrichtigungen anzeigen, wenn neue Dokumente erkannt werden</target>
       </trans-unit>
       <trans-unit id="6057053428592387613" datatype="html" approved="yes">
         <source>Show notifications when document processing completes successfully</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">174</context>
         </context-group>
-        <target state="final">Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target>
+        <target state="final">Benachrichtigungen anzeigen, wenn die Dokumentenverarbeitung erfolgreich abgeschlossen wurde</target>
       </trans-unit>
       <trans-unit id="370315664367425513" datatype="html" approved="yes">
         <source>Show notifications when document processing fails</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">175</context>
         </context-group>
-        <target state="final">Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target>
+        <target state="final">Benachrichtigungen anzeigen, wenn die Verarbeitung des Dokuments fehlschlägt</target>
       </trans-unit>
       <trans-unit id="6838309441164918531" datatype="html" approved="yes">
         <source>Suppress notifications on dashboard</source>
index 6c7dbdb2dd8b1f2f4b3f77284646c43a5fbba643..98ddc6f52cb3872d81e2e1464a69a3f300107292 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Cerrar</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Siguiente</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Seleccionar mes</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Seleccionar año</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mes anterior</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mes siguiente</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Primero</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Siguiente</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Último</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Horas</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutos</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Incrementar horas</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Decrementar horas</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Incrementar minutos</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Decrementar minutos</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Segundos</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Incrementar segundos</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Decrementar segundos</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Cerrar</target>
       </trans-unit>
         </context-group>
         <target state="final">El documento<x id="PH" equiv-text="status.filename"/> está siendo procesado por paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Siguiente</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Iniciando subida...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Sesión iniciada como <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Cerrar sesión</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Abrir documentos</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Cerrar todos</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Organizar</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Interlocutores</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etiquetas</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Tipos de documento</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Rutas de almacenamiento</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administrar</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Documentación</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Sugerir una idea</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">está disponible.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Haz clic para ver.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Actualización disponible</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Limpiar</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Después</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Limpiar</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Antes</target>
       </trans-unit>
         <target state="final">No se pudo guardar el elemento: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Tenga en cuenta que editar una ruta no aplica los cambios a los archivos almacenados hasta que ejecute la utilidad 'document_renamer'. Vea la <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentación<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">o utilice barras para añadir directorios p.ej.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Vea la &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentación&lt;/a&gt; para la lista completa.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Cualquiera</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Aplicar</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Haga clic de nuevo para excluir los elementos.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Siguiente</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Ruta de almacenamiento</target>
       </trans-unit>
         </context-group>
         <target state="translated">Continuar</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">La operación de rehacer OCR comenzará en segundo plano.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrar etiquetas</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrar interlocutores</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrar tipos de documento</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtrar rutas de almacenamiento</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Quitar filtros</target>
       </trans-unit>
index cb238ea6973e1eed85e2e31e6addc65ca0e23b23..1329f5db25357ebdbbd6425e14050249a3b8d9d9 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Sulje</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Liu'uta <x id="INTERPOLATION" equiv-text="ing when mouse"/> / <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Edellinen</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Seuraava</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Valitse kuukausi</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Valitse vuosi</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Edellinen kuukausi</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Seuraava kuukausi</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Ensimmäinen</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Edellinen</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Seuraava</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Viimeinen</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Tuntia</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuuttia</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Lisää tunteja</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Pienennä tunteja</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Lisää minuutteja</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Pienennä minuutteja</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekuntia</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Lisäys sekunteina</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Vähennys sekunteina</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Sulje</target>
       </trans-unit>
         </context-group>
         <target state="translated">Paperless käsittelee asiakirjaa <x id="PH" equiv-text="status.filename"/>.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Seuraava</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Aloittaa latausta...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Kirjautunut käyttäjänä <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Kirjaudu ulos</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Avaa asiakirjat</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Sulje kaikki</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Hallitse</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Yhteyshenkilöt</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Tunnisteet</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Dokumenttityypit</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Tallennustilan polut</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Ylläpito</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentaatio</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Ehdota ideaa</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">on saatavilla.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Näytä klikkaamalla.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Päivitys saatavilla</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Tyhjennä</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Jälkeen</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Tyhjennä</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Ennen</target>
       </trans-unit>
         <target state="translated">Elementtiä ei voitu tallentaa: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Huomaa, että polun muokkaaminen ei tallenna muutoksia tiedostoon ennenkuin olet suorittanut asiakirjan_renamer-apuohjelman. Katso <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>dokumentaatio<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">tai käytä kauttaviivoja lisätäksesi hakemistoja, esim.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Katso &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;dokumentaatio&lt;/a&gt;.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Mikä tahansa</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Käytä</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Klikkaa uudelleen jättääksesi pois kohteita.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Edellinen</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Seuraava</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Tallennustilan polku</target>
       </trans-unit>
         </context-group>
         <target state="translated">Jatka</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">Tee OCR uudelleen -operaatio alkaa taustalla.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Suodata tunnisteita</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Suodata yhteyshenkilöt</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Suodata asiakirjatyyppejä</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Suodata tallennuspolkuja</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Tyhjennä suodattimet</target>
       </trans-unit>
index 3d77ebb527bdb4c358dd42240a8b3629d093843d..118cb5abb4840ee5e45307bcdbf83e8d063184fd 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Fermer</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated">Diapositive <x id="INTERPOLATION" equiv-text="ing when mouse"/> sur <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Précédent</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Suivant</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Sélectionner le mois</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Sélectionner l'année</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mois précédent</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mois suivant</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Premier</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Précédent</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Suivant</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Dernier</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Heures</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutes</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Incrémenter les heures</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Décrémenter les heures</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Incrémenter les minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Décrémenter les minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Secondes</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Incrémenter les secondes</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Décrémenter les secondes</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Fermer</target>
       </trans-unit>
         </context-group>
         <target state="final">Le document <x id="PH" equiv-text="status.filename"/> est en cours de traitement par Paperless-ngx.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Suivant</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="translated">Le tableau de bord peut être utilisé pour afficher les vues enregistrées, comme une boîte de réception. Ces paramètres se trouvent dans Paramètres &gt; Vues sauvegardées une fois que vous en avez créé.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">La liste des documents affiche tous vos documents et permet le filtrage ainsi que l'édition en bloc. Il y a trois styles de vue différents : liste, vignettes et liste détaillée. Une liste de documents actuellement ouverts à l'édition est affichée dans la barre latérale.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="translated">Les outils de filtrage vous permettent de trouver rapidement des documents en utilisant diverses recherches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="translated">Toute combinaison de filtres peut être enregistrée sous la forme d'une 'vue' qui peut ensuite être affichée sur le tableau de bord et / ou la barre latérale.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="translated">Les tags, correspondants, types de documents et chemins de stockage peuvent tous être gérés à l'aide de ces pages. Ils peuvent également être créés à partir de la vue d'édition du document.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="translated">Les tâches de fichiers vous montrent les documents qui ont été consommés, sont en attente d'être traité ou peuvent avoir échoué au cours du processus.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Consultez les paramètres pour les diverses améliorations apportées à l'application Web ou pour activer les paramètres pour les vues enregistrées.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="translated">La zone Admin contient des contrôles plus avancés ainsi que les paramètres pour la récupération automatique des e-mails.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Merci ! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="translated">Il y a &lt;em&gt;des tonnes&lt;/em&gt; de fonctionnalités et d'informations supplémentaires que nous n'avons pas couvertes ici, mais cela devrait vous aider à démarrer. Consultez la documentation ou visitez le projet sur GitHub pour en savoir plus ou pour rapporter des problèmes.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="translated">Enfin, au nom de chaque contributeur à ce projet soutenu par la communauté, merci d'utiliser Paperless-ngx !</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Début du téléversement...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Connecté en tant que <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Déconnexion</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Documents ouverts</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Fermer tout</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Gestion</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Correspondants</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Étiquettes</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Types de document</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Chemins de stockage</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="translated">Traitement des fichiers<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administration</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Documentation</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Suggérer une idée</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">est disponible.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Cliquer pour visualiser.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="translated">Paperless-ngx peut automatiquement vérifier la disponibilité des mises à jour</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated">Comment ça fonctionne ?</target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Mise à jour disponible</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="translated">Une erreur s'est produite lors de l'enregistrement des paramètres de vérification des mises à jour.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Réinitialiser</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Après</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Réinitialiser</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Avant</target>
       </trans-unit>
         <target state="final">Impossible d'enregistrer l'élément : <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Notez que l'édition d'un chemin ne modifie pas les fichiers stockés jusqu'à ce que vous ayez exécuté l'utilitaire 'document_renamer'. Voir la documentation <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/><x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">ou utilisez des barres obliques pour ajouter des répertoires, comme</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Voir &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; pour la liste complète.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Tous</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Appliquer</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Cliquer à nouveau pour exclure des éléments.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="translated">Vous êtes prêt à télécharger des documents ! Explorez les différentes fonctionnalités de cette application web par vous-même, ou commencez une visite rapide en utilisant le bouton ci-dessous.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="translated">Plus de détails sur la façon d'utiliser et de configurer Paperless-ngx est toujours disponible dans la <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Précédent</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Suivant</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Chemin de stockage</target>
       </trans-unit>
         </context-group>
         <target state="translated">Continuer</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">La relance de la ROC commencera en arrière-plan.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrer les étiquettes</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrer les correspondants</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrer les types de documents</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtrer les chemins de stockage</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Réinitialiser les filtres</target>
       </trans-unit>
index 2010af50b50cbdfacc78ada96f22fad8477084e3..7a74488ecc4c99e5540053ca9047c8dedc24ebb3 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">סגור</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">הקודם</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">הבא</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">בחר חודש</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">בחר שנה</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">חודש קודם</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">חודש הבא</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">ראשון</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">קודם</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">הבא</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">אחרון</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">שש</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">שעות</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">חח</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">דקות</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">הגדלת שעות</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">הקטנת שעות</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">הגדלת דקות</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">הקטנת דקות</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">שש</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">שניות</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">הגדלת שניות</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">הקטנת שניות</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">סגור</target>
       </trans-unit>
         </context-group>
         <target state="final">מסמך <x id="PH" equiv-text="status.filename"/> נמצא בעיבוד ע"י Paperless-NG.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">הבא</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">מאתחל העלאה...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">מחובר כ- <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">התנתק/י</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">מסמכים פתוחים</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">סגור הכל</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">נהל</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">מכותבים</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">תגיות</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">סוגי מסמך</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">נתיבי אכסון</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">מנהל</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">תיעוד</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">הצעה רעיון</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">זמין.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">לחץ להצגה.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">קיים עדכון</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">ניקוי</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">אחרי</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">ניקוי</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">לפני</target>
       </trans-unit>
         <target state="translated">לא ניתן לשמור את האלמנט: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>שים לב שעריכת נתיב לא תחיל שינויים על קבצים מאוחסנים עד שתפעיל את כלי השירות 'document_namer'. ראה את<x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>התיעוד<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">או השתמשו באלכסונים כדי להוסיף ספריות, לדוג'</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">ראה &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt; את התיעוד&lt;/a&gt; לרשימה מלאה.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">החל</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">לחץ שוב כדי לא לכלול פריטים.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">הקודם</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">הבא</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">נתיב אכסון</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">סנן תגיות</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">סנן מכותבים</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">סנן סוגי מסמכים</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">סנן מיקום אכסון</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="needs-translation">Reset filters</target>
       </trans-unit>
index 446cd548e6651a361fdc8f2d2f8d5ba7a88741f9..c09ac3644d4415f644c74dbaeb347a4f355de9ef 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zatvori</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Prethodno</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Sljedeće</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Odaberi mjesec</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Odaberi godinu</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Prethodni mjesec</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Sljedeći mjesec</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prvi</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prethodni</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Sljedeći</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Zadnji</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* Maksima"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Sati</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minute</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Povećanje sati</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Smanjenje sati</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Povečanje minuta</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Smanjenje minuta</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunde</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Povečanje sekundi</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Smanjenje sekundi</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zatvori</target>
       </trans-unit>
         </context-group>
         <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> je u fazi obrade.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Pokretanje prijenosa...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Prijavljen kao <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Odjavi se</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Otvoreni dokumenti</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Zatvori sve</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Upravljaj</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Dopisnici</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Oznake</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Vrste dokumenta</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Putanje pohrane</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Administrator</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentacija</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Predloži ideju</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">je dostupno.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klikni za prikaz.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Dostupno ažuriranje</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Očisti</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Nakon</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Očisti</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Prije</target>
       </trans-unit>
         <target state="translated">Nije moguće spremiti element: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Imajte na umu da uređivanje putanje se ne primjenjuje na pohranjene datoteke dok ne pokrenete uslužni program 'document_renamer'. Vidi <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">ili koristite kose crte za dodavanje imenika, npr.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Vidi &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; za cijeli popis.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Bilo koji</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Primijeni</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Pritisnite ponovo da biste isključili stavke.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="needs-translation">Filter tags</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="needs-translation">Filter correspondents</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="needs-translation">Filter document types</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="needs-translation">Reset filters</target>
       </trans-unit>
index 47aadf0f4205d201bd65e4db3f99526d211c60d5..32ce62de0761aa10ee0dc02311b6355b5c9d576c 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Chiudi</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Diapositiva <x id="INTERPOLATION" equiv-text="ing when mouse"/> di <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Precedente</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Successivo</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Seleziona il mese</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Seleziona anno</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mese precedente</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mese successivo</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Primo</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Precedente</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Successivo</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Ultimo</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Ore</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuti</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Incrementa ore</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Decrementa ore</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Incrementa minuti</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Decrementa minuti</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Secondi</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Incremento in secondi</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Decremento in secondi</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Chiudi</target>
       </trans-unit>
         </context-group>
         <target state="final">Paperless sta elaborando il documento <x id="PH" equiv-text="status.filename"/>.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="translated">Prec</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Successivo</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="translated">Fine</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="translated">La dashboard può essere usata per mostrare le viste salvate, come una 'Inbox'. Queste impostazioni si trovano in Impostazioni &gt; Viste salvate, dopo averne create alcune.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
-        <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+        <target state="translated">Trascina i documenti qui per iniziare a caricarli, oppure posizionali nella cartella di elaborazione. Puoi anche trascinare i documenti ovunque su tutte le altre pagine della web app. Una volta fatto, Paperless-ngx inizierà a formare i suoi algoritmi di machine learning.</target>
       </trans-unit>
       <trans-unit id="7495498057594070122" datatype="html">
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">L'elenco dei documenti mostra tutti i tuoi documenti e consente di filtrarli e modificarli in blocco. Ci sono tre stili di visualizzazione diversi: elenco, carte piccole e carte grandi. Un elenco di documenti attualmente aperti per la modifica è mostrato nella barra laterale.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="translated">Gli strumenti di filtraggio ti consentono di trovare rapidamente documenti utilizzando vari termini di ricerca, date, tag, ecc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="translated">Qualsiasi combinazione di filtri può essere salvata come 'vista' che può essere visualizzata sulla dashboard e/o nella barra laterale.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="translated">Tag, corrispondenti, tipi di documenti e percorsi di archiviazione possono essere gestiti utilizzando queste pagine. Possono anche essere creati dalla vista di modifica dei documenti.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="translated">Le Attività File mostrano i documenti che sono stati consumati, sono in attesa di esserlo, o possano aver portato a un fallimento durante l'Attività.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Controlla le impostazioni per varie modifiche all'app web o per attivare o disattivare le impostazioni per le viste salvate.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="translated">L'area di Amministrazione contiene impostazioni più avanzate e per il recupero automatico delle e-mail.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Grazie! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="translated">Ci sono &lt;em&gt;tonnellate&lt;/em&gt; di caratteristiche e informazioni che non abbiamo coperto qui, ma questo dovrebbe essere abbastanza per cominciare. Consulta la documentazione o visita il progetto su GitHub per saperne di più o per segnalare problemi.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="translated">Infine, a nome di ogni collaboratore di questo progetto supportato dalla comunità, grazie per utilizzare Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Avvio caricamento...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Accesso effettuato come <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Esci</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Apri documenti</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Chiudi tutti</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Gestisci</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Corrispondenti</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etichette</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Tipi di documento</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Percorsi di archiviazione</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="translated">Attività File<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Amministratore</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Documentazione</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Suggerisci un'idea</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">è disponibile.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Clicca per visualizzare.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="translated">Paperless-ngx può controllare automaticamente la presenza di aggiornamenti</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated"> Come funziona? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Aggiornamento disponibile</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="translated">Si è verificato un errore durante il salvataggio delle impostazioni sugli aggiornamenti.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Pulisci</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Dopo</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Pulisci</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Prima</target>
       </trans-unit>
         <target state="final">Non è possibile salvare l'elemento: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Si noti che la modifica di un percorso non applica le modifiche ai file memorizzati finché non viene eseguita l'utilità 'document_renamer'. Vedi la <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentazione<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">o usa slash per aggiungere directory, ad es.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Vedere &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentazione&lt;/a&gt; per l'elenco completo.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Qualsiasi</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Applica</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Clicca di nuovo per escludere gli elementi.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="translated">Sei pronto per iniziare a caricare documenti! Esplora le varie funzionalità di questa web app da sola, o inizia un rapido tour utilizzando il pulsante qui sotto.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="translated">Maggiori dettagli su come usare e configurare Paperless-ngx sono sempre disponibili nella <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentazione<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Precedente</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Successivo</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Percorso archiviazione</target>
       </trans-unit>
         </context-group>
         <target state="translated">Procedi</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">L'operazione di rilettura OCR inizierà in background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtra tag</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtra corrispondenti</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtra tipi di documento</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtra percorsi di archiviazione</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Ripristina filtri</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">109</context>
         </context-group>
-        <target state="translated">Completa <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.completedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+        <target state="translated">Completato <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.completedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
       <trans-unit id="1697296301417588213" datatype="html">
         <source>Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.startedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">121</context>
         </context-group>
-        <target state="translated">Accodato <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.queuedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
+        <target state="translated">In coda <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.queuedFileTasks.length &gt; 0&quot; class=&quot;badge bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
       <trans-unit id="5404910960991552159" datatype="html">
         <source>Dismiss selected</source>
           <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
           <context context-type="linenumber">26</context>
         </context-group>
-        <target state="needs-translation">You have unsaved changes to the saved view</target>
+        <target state="translated">Hai modifiche non salvate alla vista salvata</target>
       </trans-unit>
       <trans-unit id="7282050913165342352" datatype="html">
         <source>Are you sure you want to close this saved view?</source>
           <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">Are you sure you want to close this saved view?</target>
+        <target state="translated">Sei sicuro di voler chiudere questa vista salvata?</target>
       </trans-unit>
       <trans-unit id="856284624775342512" datatype="html">
         <source>Save and close</source>
           <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
           <context context-type="linenumber">34</context>
         </context-group>
-        <target state="needs-translation">Save and close</target>
+        <target state="translated">Salva e chiudi</target>
       </trans-unit>
       <trans-unit id="7536524521722799066" datatype="html" approved="yes">
         <source>(no title)</source>
index aa3be8443d8645a0cffb12806eec02eae64c0dc5..2b138390ca0a1d212e6786a109fae657a73bdc17 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zoumaachen</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Zréck</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Weider</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Mount auswielen</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Joer auswielen</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mount virdrun</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Nächste Mount</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Ufank</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Zréck</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Weider</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Schluss</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Stonnen</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutten</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Stonnen eropsetzen</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Stonnen erofsetzen</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Minutten erhéijen</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Minutten erofsetzen</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekonnen</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekonnen eropsetzen</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekonnen erofsetzen</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zoumaachen</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> gëtt vu Paperless-ngx veraarbecht.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Weider</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
-        <target state="needs-translation">Thank you! 🙏</target>
+        <target state="translated">Merci! 🙏</target>
       </trans-unit>
       <trans-unit id="7354947513482088740" datatype="html">
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Upload fänkt un...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Ageloggt als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Ofmellen</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Oppen Dokumenter</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">All zoumaachen</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Verwalten</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Korrespondenten</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etiketten</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Dokumententypen</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Späicherpfaden</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">1</context>
         </context-group>
-        <target state="needs-translation">File Tasks</target>
+        <target state="translated">Datei Jobs</target>
       </trans-unit>
       <trans-unit id="5537285341303594392" datatype="html">
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administratioun</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Dokumentatioun</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Eng Iddi virschloen</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">ass disponibel.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klicke fir unzeweisen.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Update disponibel</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Läschen</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">No</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Läschen</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Virun</target>
       </trans-unit>
         <target state="final">Element konnt net gespäichert ginn: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Applizéieren</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Klickt nach eng Kéier fir Elementer auszeschléissen.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">3</context>
         </context-group>
-        <target state="needs-translation">Paperless-ngx is running!</target>
+        <target state="translated">Paperless-ngx leeft!</target>
       </trans-unit>
       <trans-unit id="3326049540711826572" datatype="html">
         <source>You&apos;re ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</source>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">9</context>
         </context-group>
-        <target state="needs-translation">Start the tour</target>
+        <target state="translated">Tour starten</target>
       </trans-unit>
       <trans-unit id="7822640317427130239" datatype="html" approved="yes">
         <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
           <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
-        <target state="needs-translation">Enter comment</target>
+        <target state="translated">Kommentar antippen</target>
       </trans-unit>
       <trans-unit id="4025397324401332794" datatype="html">
         <source> Please enter a comment. </source>
           <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
           <context context-type="linenumber">5,7</context>
         </context-group>
-        <target state="needs-translation"> Please enter a comment. </target>
+        <target state="translated"> Tipp en Kommentar an. </target>
       </trans-unit>
       <trans-unit id="2337485514607640701" datatype="html">
         <source>Add comment</source>
           <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
-        <target state="needs-translation">Add comment</target>
+        <target state="translated">Kommentar bäifügen</target>
       </trans-unit>
       <trans-unit id="5438997040668245251" datatype="html">
         <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
         </context-group>
         <target state="translated">Zréck</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Weider</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Späicherpfad</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
           <context context-type="linenumber">118</context>
         </context-group>
-        <target state="needs-translation">Original filename</target>
+        <target state="translated">Original Dateinumm</target>
       </trans-unit>
       <trans-unit id="7985558498848210210" datatype="html" approved="yes">
         <source>Original MD5 checksum</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">154</context>
         </context-group>
-        <target state="needs-translation">Comments</target>
+        <target state="translated">Kommentaren</target>
       </trans-unit>
       <trans-unit id="3823219296477075982" datatype="html" approved="yes">
         <source>Discard</source>
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
           <context context-type="linenumber">391</context>
         </context-group>
-        <target state="needs-translation">Proceed</target>
+        <target state="translated">Weider</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Etikette filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Korrespondente filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Dokumententype filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Filteren zrécksetzen</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">2</context>
         </context-group>
-        <target state="needs-translation">Start tour</target>
+        <target state="translated">Tour starten</target>
       </trans-unit>
       <trans-unit id="6439365426343089851" datatype="html">
         <source>General</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">94</context>
         </context-group>
-        <target state="needs-translation">Sidebar</target>
+        <target state="translated">Saiteläischt</target>
       </trans-unit>
       <trans-unit id="4608457133854405683" datatype="html">
         <source>Use &apos;slim&apos; sidebar (icons only)</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">98</context>
         </context-group>
-        <target state="needs-translation">Use 'slim' sidebar (icons only)</target>
+        <target state="translated">Schmuel Saiteläischt benotzen (nëmmen Ikonen)</target>
       </trans-unit>
       <trans-unit id="1356890996281769972" datatype="html" approved="yes">
         <source>Dark mode</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">130</context>
         </context-group>
-        <target state="needs-translation">Update checking</target>
+        <target state="translated">Aktualiséierungs Kontroll</target>
       </trans-unit>
       <trans-unit id="7890007688616707209" datatype="html">
         <source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Actual updating of the app must still be performed manually. </source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">141</context>
         </context-group>
-        <target state="needs-translation">Enable update checking</target>
+        <target state="translated">Aktualiséierungs Kontroll aschalten</target>
       </trans-unit>
       <trans-unit id="5478370193831195440" datatype="html">
         <source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be &apos;ahead&apos; of the current third-party release.</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">158</context>
         </context-group>
-        <target state="needs-translation">Enable comments</target>
+        <target state="translated">Kommentaren erlaben</target>
       </trans-unit>
       <trans-unit id="5851560788527570644" datatype="html" approved="yes">
         <source>Notifications</source>
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">86</context>
         </context-group>
-        <target state="needs-translation">Open Document</target>
+        <target state="translated">Dokument opmaachen</target>
       </trans-unit>
       <trans-unit id="6798650225457993016" datatype="html">
         <source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot; class=&quot;badge bg-danger ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
           <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
           <context context-type="linenumber">34</context>
         </context-group>
-        <target state="needs-translation">Save and close</target>
+        <target state="translated">Späicheren an zoumaachen</target>
       </trans-unit>
       <trans-unit id="7536524521722799066" datatype="html" approved="yes">
         <source>(no title)</source>
index 801654c792a1efe0ec4c411668b4af7836cbd6a9..40387ebd217305d42f08c669933e516d43461946 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Sluiten</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Vorige</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Volgende</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Maand selecteren</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Jaar selecteren</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Vorige maand</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Volgende maand</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Eerste</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Vorige</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Volgende</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Laatste</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="needs-translation">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Uren</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="needs-translation">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuten</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Uren verhogen</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Uren verlagen</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Minuten verhogen</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Minuten verlagen</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Seconden</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Seconden verhogen</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Seconden verlagen</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Sluiten</target>
       </trans-unit>
         </context-group>
         <target state="final">Document <x id="PH" equiv-text="status.filename"/> wordt verwerkt door paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Volgende</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Bedankt! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Upload starten...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Ingelogd als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Afmelden</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Open documenten</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Alles sluiten</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Beheren</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Correspondenten</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Labels</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Documenttypen</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Opslag paden</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Beheer</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Handleiding</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Ideeënbus</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">is beschikbaar.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klik om te bekijken.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Update beschikbaar</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Leegmaken</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Na</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Leegmaken</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Voor</target>
       </trans-unit>
         <target state="final">Kon het element niet opslaan: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">of gebruik slashes om mappen toe te voegen, bijv.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Zie &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentatie&lt;/a&gt; voor volledige lijst.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Alle</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Toepassen</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Klik nogmaals om items uit te sluiten.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Vorige</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Volgende</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Opslag pad</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Labels filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Correspondenten filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Documenttypes filteren</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Filters terug zetten</target>
       </trans-unit>
index 69d5b4d59f93f6692fc953ec42cdefb3c8751a05..74c4267f3ad033ea6d64a554446fd8f38bf5b912 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Lukk</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Neste</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Velg en måned</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Velg år</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Forrige måned</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Neste måned</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Først</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Neste</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Siste</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Timer</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutter</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Økende timer</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Reduksjon i timer</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Økende minutter</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Reduksjon i minutter</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunder</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Tilleggstid i sekund</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Reduksjon sekunder</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Lukk</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Neste</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Starter opplasting...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Logg ut</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Åpne dokumenter</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Lukk alle</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Behandle</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Korrespondenter</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Tags</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Dokumenttyper</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Lagringssti</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Admin</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentasjon</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Foreslå en idé</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">er tilgjengelig.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klikk for å se.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Oppdatering er tilgjengelig</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Tøm</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Etter</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Tøm</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Før</target>
       </trans-unit>
         <target state="translated">Kunne ikke lagre elementet: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">eller bruk skråstreker for å legge til kataloger, f.eks.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Enhver</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Bruk</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Klikk igjen for å ekskludere elementer.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Forrige</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Neste</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Lagringssti</target>
       </trans-unit>
         </context-group>
         <target state="translated">Fortsett</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Filtrer etter tagger</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Filtrere korrespondenter</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Filtrer dokumenttyper</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtrere lagringsbaner</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Tilbakestille filtre</target>
       </trans-unit>
index 33d55be1dad8bda43d68fb04dbb2dc3d78839c78..2d66f575877eef4c8f4aa57c09adf27be97ef0a0 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zamknij</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Poprzedni</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Następny</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Wybierz miesiąc</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Wybierz rok</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Poprzedni miesiąc</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Następny miesiąc</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Pierwszy</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Poprzedni</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Następny</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Ostatni</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Godziny</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuty</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Godziny przyrostu</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Redukcja godzin</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Przyrost minut</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Zmniejszenie minut</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekundy</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Zwiększa sekundy</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Zmniejsz sekundy</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zamknij</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> jest przetwarzany przez paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Następny</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Rozpoczęcie wysyłania...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Zalogowany jako <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Wyloguj</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Otwarte dokumenty</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Zamknij wszystkie</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Zarządzaj</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Nadawcy</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Tagi</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Typy dokumentów</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Ścieżki składowania</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Administracja</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Dokumentacja</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Zaproponuj pomysł</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">jest dostępny.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Kliknij, aby zobaczyć.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Aktualizacja jest dostępna</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Wyczyść</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Po</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Wyczyść</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Przed</target>
       </trans-unit>
         <target state="final">Nie można zapisać elementu: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Pamiętaj, że edytowanie ścieżki nie stosuje zmian do zapisanych plików, dopóki nie uruchomisz narzędzia 'document_renamer'. Zobacz <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>dokumentacje<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">lub użyj ukośników, aby dodać katalogi, np.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Zobacz &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;dokumentacje&lt;/a&gt; dla pełnej listy.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Zastosuj</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Kliknij ponownie, aby wykluczyć elementy.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Poprzedni</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Następny</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Ścieżki składowania</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtruj tagi</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtruj nadawców</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtruj typy dokumentów</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtruj ścieżkę przechowywania</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Zresetuj filtry</target>
       </trans-unit>
index 8c844a941ba85c26db4fde7b28f7458c67c8f018..ca224f1b23f82e371f0364efe215eb77cd86969e 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select month</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select year</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Previous month</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Next month</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">First</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Last</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="needs-translation">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="needs-translation">Hours</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="needs-translation">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="needs-translation">Minutes</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Seconds</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
         </context-group>
         <target state="final">Documento <x id="PH" equiv-text="status.filename"/> está sendo processado pelo paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Encerrar sessão</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Abrir documentos</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Fechar todos</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Gerenciar</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Correspondentes</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etiquetas</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Tipos de documento</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Admin</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Documentação</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Sugerir uma idéia</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">is available.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">Click to view.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="needs-translation">Update available</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Limpar</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Antes</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Limpar</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Depois</target>
       </trans-unit>
         <target state="final">Não podemos salvar elemento: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Aplicar</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Clique novamente para excluir itens.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrar etiquetas</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrar correspondentes</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrar tipos de documento</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Limpar filtros</target>
       </trans-unit>
index 4664a0a50413ad43a7f09ebb8594618282f7e9ee..7f2c5c6686a348c2911f666d73104a36d975d9bc 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Fechar</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Seguinte</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Selecionar mês</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Selecionar ano</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mês anterior</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Mês seguinte</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Primeiro</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Seguinte</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Último</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Horas</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minutos</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Incrementar horas</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Diminuir horas</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Incrementar minutos</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Diminuir minutos</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Segundos</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Incrementar segundos</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Diminuir segundos</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Fechar</target>
       </trans-unit>
         </context-group>
         <target state="final">Documento <x id="PH" equiv-text="status.filename"/> está a ser processado pelo paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Seguinte</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Obrigado! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">A iniciar o carregamento...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Terminar sessão</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Abrir documentos</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Fechar todos</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Gerir</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Correspondentes</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etiquetas</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Tipos de documento</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administrador</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Documentação</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="final">Github</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Sugerir uma ideia</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">está disponível.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Clique para ver.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated"> Como é que isto funciona? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Atualização disponível</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Limpar</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Antes</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Limpar</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Depois</target>
       </trans-unit>
         <target state="final">Não foi possível guardar elemento: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Aplicar</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Clique novamente para excluir itens.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Anterior</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Seguinte</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrar etiquetas</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrar correspondentes</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrar tipos de documentos</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Limpar filtros</target>
       </trans-unit>
index b2d69484f15c55cf16a761cfa6bdb199b2f64c89..43c2e28fcb24423f3e27bd8b2f990850a52c27c9 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select month</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select year</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Previous month</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Next month</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">First</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Last</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="needs-translation">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="needs-translation">Hours</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="needs-translation">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="needs-translation">Minutes</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Seconds</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
         </context-group>
         <target state="final">Documentul <x id="PH" equiv-text="status.filename"/> este în procesare.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Deconectare</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Deschide documente</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Închide tot</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Administrează</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Corespondenți</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Etichete</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Tipuri de documente</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Administrator</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Documentație</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Sugestii</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">is available.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">Click to view.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="needs-translation">Update available</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Curăță</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">După</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Curăță</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Înainte</target>
       </trans-unit>
         <target state="final">Nu s-a putut salva elementul: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Aplică</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Click din nou pentru a exclude elemente.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrează etichete</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrează corespondenți</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrează tipuri de documente</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Resetare filtre</target>
       </trans-unit>
index 9c840066560d4097a6d87992a84b13ffa783b3fb..acd343eff47322504a519d912e5d6e042392458c 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Закрыть</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Слайд <x id="INTERPOLATION" equiv-text="ing when mouse"/> из <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Назад</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Следующий</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Выберите месяц</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Выберите год</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Предыдущий месяц</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Следующий месяц</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Первый</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Предыдущий</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Следующий</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Последний</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">ЧЧ</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Часы</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Минуты</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">СС</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Секунды</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Закрыть</target>
       </trans-unit>
         </context-group>
         <target state="final">Документ <x id="PH" equiv-text="status.filename"/> обрабатывается paperless</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Следующий</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Выход</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Открыть документы</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Закрыть всё</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Управлять</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Корреспонденты</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Теги</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Типы документов</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Пути хранения</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="final">Администрирование</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Документация</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Предложить идею</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">доступно.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Нажмите для просмотра.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Доступно обновление</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Очистить</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">После</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Очистить</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">До</target>
       </trans-unit>
         <target state="final">Не могу сохранить элемент: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">или используйте слэши для добавления каталогов, например.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Любой</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Подтвердить</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Нажмите еще раз, чтобы исключить элементы.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Предыдущий</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Следующий</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Путь к хранилищу</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Фильтр тегов</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Фильтр корреспондентов</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Фильтр типа документов</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Фильтр по пути хранения</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Сбросить фильтры</target>
       </trans-unit>
index 98aa005460499b9054b33eb29fc4a4bd30e7ba43..547da3dafbaf08be2e4c38e53d7f0ac3e54ac138 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zapri</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Slike <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Prejšnji</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Naslednji</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Izberi mesec</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Izberi leto</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Prejšnji mesec</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Naslednji mesec</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prvi</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prejšnji</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Naslednja</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Zadnji</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Ura</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuta</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Povečanje ur</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Zmanjšanje ur</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Povečanje minut</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Zmanjšanje minut</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekunde</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Povečanje sekund</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Zmanjšanje sekund</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zapri</target>
       </trans-unit>
         </context-group>
         <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> je v postopku obdelave.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Naslednji</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Začetek nalaganja...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Prijavljen kot <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Odjavi se</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Odpri dokumente</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Zapri vse</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Upravljaj</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Dopisniki</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Oznake</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Vrste dokumentov</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Poti do shrambe</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Skrbnik</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentacija</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Podaj predlog</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">je na voljo.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klikni za ogled.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Posodobitev na voljo</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Počisti</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Po</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Počisti</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Pred</target>
       </trans-unit>
         <target state="translated">Elementa ni bilo mogoče shraniti: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">ali uporabljaj slash za dodajanje map npr.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Poglejte &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; za cel seznam.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Poljuben</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Uporabi</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Kliknite znova, da izključite elemente.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">Prejšnji</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Naslednji</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Pot do shrambe</target>
       </trans-unit>
         </context-group>
         <target state="translated">Nadaljuj</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">Ponovna izdelava OCR operacije se bo izvedla v ozadju.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Filtriraj oznake</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Filtrirajte dopisnike</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Filtrirajte vrste dokumentov</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtriraj poti shrambe</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Ponastavi filtre</target>
       </trans-unit>
index 33e8f06a1e210439eb8675119eece4addd81c5cc..233c59373465271be41c5a3898135e74ada30e3b 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Zatvori</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> od <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Prethodni</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Sledeći</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Odaberi mesec</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Odaberi godinu</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Prethodni mesec</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Naredni mesec</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prvi</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Prethodni</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Sledeći</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Poslednji</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">Sati</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">Minuta</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">Povećaj sate</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">Smanji sate</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">Povećaj minute</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">Smanji minute</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Sekundi</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Povećaj sekunde</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">Smanji sekunde</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Zatvori</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
           <context context-type="linenumber">45</context>
         </context-group>
-        <target state="translated">Otvoreni dokument</target>
+        <target state="translated">Otvori dokument</target>
       </trans-unit>
       <trans-unit id="8582620835547864448" datatype="html">
         <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source>
         </context-group>
         <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> obrađuje Paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="translated">Prethodni</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">Sledeći</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="translated">Kraj</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
-        <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
+        <target state="translated">Kontrolna tabla se može koristiti za prikazivanje sačuvanih pogleda, kao što je 'Inbox'. Kada kreirate neke poglede ta podešavanja će se nalazati pod Podešavanja &gt; Sačuvani pogledi.</target>
       </trans-unit>
       <trans-unit id="9075755296812854717" datatype="html">
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
-        <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+        <target state="translated">Prevucite i otpustite dokumente ovde da biste započeli otpremanje ili ih stavite u folder za konzumiranje. Takođe možete da prevučete i otpustite dokumente bilo gde na svim drugim stranicama veb aplikacije. Kada to učinite, Paperless-ngx će početi da trenira svoje algoritme za mašinsko učenje.</target>
       </trans-unit>
       <trans-unit id="7495498057594070122" datatype="html">
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
-        <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
+        <target state="translated">Lista dokumenata prikazuje sve vaše dokumente i omogućava filtriranje kao i grupno uređivanje. Postoje tri različita stila prikaza: lista, male kartice i velike kartice. Na bočnoj traci je prikazana lista dokumenata koji su trenutno otvoreni za uređivanje.</target>
       </trans-unit>
       <trans-unit id="1334220418719920556" datatype="html">
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
-        <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
+        <target state="translated">Alati za filtriranje vam omogućavaju da brzo pronađete dokumente koristeći različite pretrage, datume, oznake itd.</target>
       </trans-unit>
       <trans-unit id="5427326625898532358" datatype="html">
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
-        <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
+        <target state="translated">Bilo koja kombinacija filtera se može sačuvati kao 'pogled' koji se zatim može prikazati na kontrolnoj tabli i/ili bočnoj traci.</target>
       </trans-unit>
       <trans-unit id="2804886236408698479" datatype="html">
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
-        <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
+        <target state="translated">Oznake, korespodenti, tipovi dokumenata i putanje skladištenja svi se mogu se uređivati pomoću ovih stranica. Takođe se mogu kreirati iz prikaza za uređivanje dokumenta.</target>
       </trans-unit>
       <trans-unit id="4680387114119209483" datatype="html">
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="translated">Obrada dokumenata vam prikazuje dokumenta koja su obrađena, čekaju da budu obrađena ili možda nisu uspešno obrađena.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
-        <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
+        <target state="translated">Proverite podešavanja za različita podešavanja veb aplikacije ili da biste uključili podešavanja za sačuvane poglede.</target>
       </trans-unit>
       <trans-unit id="7643249460591212914" datatype="html">
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
-        <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
+        <target state="translated">Administracija sadrži naprednije kontrole, kao i podešavanja za automatsko preuzimanje e-pošte.</target>
       </trans-unit>
       <trans-unit id="7172877665285340082" datatype="html">
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="translated">Hvala vam! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
-        <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
+        <target state="translated">Ima &lt;em&gt;tona&lt;/em&gt; više funkcija i informacija koje ovde nismo pokrili, ali ovo bi trebalo da vas pokrene. Pogledajte dokumentaciju ili posetite projekat na GitHub-u da biste saznali više ili prijavili probleme.</target>
       </trans-unit>
       <trans-unit id="4270528545616947218" datatype="html">
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
-        <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
+        <target state="translated">Na kraju, u ime svih koji doprinose ovom projektu koji podržava zajednica, hvala vam što koristite Paperless-ngx!</target>
       </trans-unit>
       <trans-unit id="5749300816154614125" datatype="html">
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">Pokretanje otpremanja...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">Ulogovan kao <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Odjavi se</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
           <context context-type="linenumber">1</context>
         </context-group>
-        <target state="translated">Komandna tabla</target>
+        <target state="translated">Kontrolna tabla</target>
       </trans-unit>
       <trans-unit id="4733307402565258070" datatype="html">
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Otvorena dokumenta</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Zatvori svе</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Upravljanje</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Korespodenti</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Oznake</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Tipovi dokumenta</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">Putanja skladišta</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="translated">Obrada dokumenata<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Administracija</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokumentacija</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Predložite ideju</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">je dostupno.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Klik za prеglеd.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
-        <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
+        <target state="translated">Paperless-ngx može automatski da proveri da li postoje ažuriranja</target>
       </trans-unit>
       <trans-unit id="894819944961861800" datatype="html">
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="translated"> Kako ovo radi? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Dostupno jе ažuriranjе</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
+        </context-group>
+        <target state="translated">Došlo je do greške prilikom čuvanja podešavanja.</target>
+      </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
         </context-group>
-        <target state="needs-translation">An error occurred while saving update checking settings.</target>
+        <target state="translated">Očisti</target>
       </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Posle</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Očisti</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Pre</target>
       </trans-unit>
         <target state="translated">Nije moguće sačuvati elelement: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Imajte na umu da se promena uređivanje putanje ne primenjuje na sačuvane datoteke sve dok ne pokrenete uslužni program 'document_renamer'. Pogledajte <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>dokumentaciju<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">ili koristite kose crte za dodavanje direktorijuma, npr.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">Pogledaj &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;dokumentaciju&lt;/a&gt; za kompletnu listu.</target>
+        <target state="translated">Pogledaj &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;dokumentaciju&lt;/a&gt; za kompletnu listu.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">Bilo koja</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Primeni</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Kliknite ponovo da biste isključili stavke.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
-        <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
+        <target state="translated">Spremni ste da počnete da otpremate dokumente! Istražite različite funkcije ove veb aplikacije sami ili započnite brzi obilazak koristeći dugme ispod.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="translated">Više detalja o tome kako da koristite i konfigurišete Paperless-ngx je uvek dostupno u <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>dokumentaciji<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">8</context>
         </context-group>
-        <target state="needs-translation">Thanks for being a part of the Paperless-ngx community!</target>
+        <target state="translated">Hvala što ste deo Paperless-ngx zajednice!</target>
       </trans-unit>
       <trans-unit id="1415832194529539652" datatype="html">
         <source>Start the tour</source>
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">9</context>
         </context-group>
-        <target state="translated">Započni upoznavanje</target>
+        <target state="translated">Započni obilazak</target>
       </trans-unit>
       <trans-unit id="7822640317427130239" datatype="html">
         <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
         </context-group>
         <target state="translated">Prethodni</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">Sledeći</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">Putanja skladišta</target>
       </trans-unit>
         </context-group>
         <target state="translated">Nastavi</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="translated">Operacija ponovnog OCR će započeti u pozadini.</target>
+        <target state="translated">Ponovna OCR operacija će početi u pozadini. Zatvorite i ponovo otvorite ili ponovo učitajte ovaj dokument nakon što se operacija završi da biste videli novi sadržaj.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Filtriraj oznake</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Filtriraj korespodente</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Filtriraj tip dokumenta</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Filtriraj po putanji skladišta</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Poništavanje filtera</target>
       </trans-unit>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">2</context>
         </context-group>
-        <target state="translated">Započni upoznavanje</target>
+        <target state="translated">Započni obilazak</target>
       </trans-unit>
       <trans-unit id="6439365426343089851" datatype="html">
         <source>General</source>
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
           <context context-type="linenumber">134,137</context>
         </context-group>
-        <target state="needs-translation"> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Actual updating of the app must still be performed manually. </target>
+        <target state="translated"> Provera ažuriranja funkcioniše pingovanjem javnog <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/> za najnovije izdanje da bi se utvrdilo da li je nova verzija dostupna.<x id="LINE_BREAK" ctype="lb" equiv-text="&lt;br/&gt;"/> Stvarno ažuriranje aplikacije i dalje mora da se obavlja ručno. </target>
       </trans-unit>
       <trans-unit id="5489945693955857309" datatype="html">
         <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
           <context context-type="linenumber">86</context>
         </context-group>
-        <target state="translated">Otvoreni dokument</target>
+        <target state="translated">Otvori dokument</target>
       </trans-unit>
       <trans-unit id="6798650225457993016" datatype="html">
         <source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot; class=&quot;badge bg-danger ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
index 4251bb632f072bf4dc59896d7ef9ab3224729f6a..e8f6af14e53e4e577bbc651323e56b00492ce213 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select month</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="needs-translation">Select year</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Previous month</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="needs-translation">Next month</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">First</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Next</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="needs-translation">Last</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="needs-translation">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="needs-translation">Hours</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="needs-translation">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="needs-translation">Minutes</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Seconds</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="needs-translation">Close</target>
       </trans-unit>
         </context-group>
         <target state="final">Dokument <x id="PH" equiv-text="status.filename"/> behandlas av paperless.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="final">Logga ut</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="final">Öppna dokument</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="final">Stäng alla</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="final">Hantera</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="final">Korrespondenter</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="final">Taggar</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="final">Dokumenttyper</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="needs-translation">Admin</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="final">Dokumentation</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="needs-translation">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="final">Föreslå en idé</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">is available.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">Click to view.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="needs-translation">Update available</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="final">Rensa</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="final">Efter</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html" approved="yes">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="final">Rensa</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html" approved="yes">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="final">Innan</target>
       </trans-unit>
         <target state="final">Kunde inte spara element: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="final">Tillämpa</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="needs-translation">Click again to exclude items.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html" approved="yes">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="needs-translation">Proceed</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="final">Filtrera taggar</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="final">Filtrera korrespondenter</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="final">Filtrera dokument typ</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="final">Återställ filter</target>
       </trans-unit>
index cf0beb28a02c6804e6535b15eacec2e65e4a1b55..719914c4a9c08530d6e217568e16480c1f2b8c38 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">Kapat</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">Önceki</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">Sonraki</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Ay seçin</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">Yıl seçin</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Önceki ay</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">Sonraki ay</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">İlk</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Önceki</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Sonraki</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">Son</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="needs-translation">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="needs-translation">Hours</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="needs-translation">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="needs-translation">Minutes</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="needs-translation">Increment hours</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="needs-translation">Decrement hours</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="needs-translation">Increment minutes</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="needs-translation">Decrement minutes</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Seconds</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Increment seconds</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="needs-translation">Decrement seconds</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">Kapat</target>
       </trans-unit>
         </context-group>
         <target state="translated"><x id="PH" equiv-text="status.filename"/> adlı belge paperless tarafından işleniyor.</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="needs-translation">Next</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="needs-translation">Initiating upload...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">Oturumu kapat</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">Belgeleri aç</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">Tümünü kapat</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">Yönet</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">Muhabirler</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">Etiketler</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">Belge türleri</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="needs-translation">Storage paths</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">Yönetici</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">Dokümantasyon</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">Github</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">Bir fikir öner</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="needs-translation">is available.</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">Görüntülemek için tıklayın.</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">Güncelleme mevcut</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">Temizle</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">Sonrası</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">Temizle</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">Öncesinde</target>
       </trans-unit>
         <target state="translated"><x id="PH" equiv-text="error"/> olan öğeyi kayıt edemiyorum</target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="needs-translation">or use slashes to add directories e.g.</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="needs-translation">See &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="needs-translation">Any</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">Uygula</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">Öğeleri hariç tutmak için yeniden tıklatın.</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="needs-translation">Previous</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="needs-translation">Next</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="needs-translation">Storage path</target>
       </trans-unit>
         </context-group>
         <target state="translated">Devam et</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">Etiketlere göre filtrele</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">Muhabire göre filtrele</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">Belge türlerini göre filtrele</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="needs-translation">Filter storage paths</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">Filtreleri sıfırla</target>
       </trans-unit>
index c040b6fcb68c395d8bce49650c5a38bb6113096b..83d55672f58b6a3cec04f793f990eb7acd347324 100644 (file)
@@ -6,24 +6,24 @@
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
-          <context context-type="linenumber">42,44</context>
+          <context context-type="linenumber">47,48</context>
         </context-group>
         <target state="translated">关闭</target>
       </trans-unit>
       <trans-unit id="ngb.carousel.slide-number" datatype="html">
-        <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </source>
+        <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">157,166</context>
+          <context context-type="linenumber">178,186</context>
         </context-group>
         <note priority="1" from="description">Currently selected slide number read by screen reader</note>
-        <target state="translated"> 滑动 <x id="INTERPOLATION" equiv-text="ing when mouse"/> 的 <x id="INTERPOLATION_1" equiv-text="e.    *    * @s"/> </target>
+        <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
       </trans-unit>
       <trans-unit id="ngb.carousel.previous" datatype="html">
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">188,191</context>
+          <context context-type="linenumber">213,215</context>
         </context-group>
         <target state="translated">上一个</target>
       </trans-unit>
@@ -31,7 +31,7 @@
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
-          <context context-type="linenumber">209,211</context>
+          <context context-type="linenumber">236</context>
         </context-group>
         <target state="translated">下一个</target>
       </trans-unit>
         <source>Select month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">选择月份</target>
       </trans-unit>
         <source>Select year</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
-          <context context-type="linenumber">41,42</context>
+          <context context-type="linenumber">50,51</context>
         </context-group>
         <target state="translated">选择年份</target>
       </trans-unit>
         <source>Previous month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">上个月</target>
       </trans-unit>
         <source>Next month</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
-          <context context-type="linenumber">43,46</context>
+          <context context-type="linenumber">60,63</context>
         </context-group>
         <target state="translated">下个月</target>
       </trans-unit>
@@ -87,7 +87,7 @@
         <source>««</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">««</target>
       </trans-unit>
@@ -95,7 +95,7 @@
         <source>«</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">«</target>
       </trans-unit>
         <source>»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»</target>
       </trans-unit>
         <source>»»</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,270</context>
         </context-group>
         <target state="translated">»»</target>
       </trans-unit>
         <source>First</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">第一页</target>
       </trans-unit>
         <source>Previous</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,226</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">上一页</target>
       </trans-unit>
         <source>Next</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">下一页</target>
       </trans-unit>
         <source>Last</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
-          <context context-type="linenumber">224,225</context>
+          <context context-type="linenumber">269,271</context>
         </context-group>
         <target state="translated">最后一页</target>
       </trans-unit>
       <trans-unit id="ngb.progressbar.value" datatype="html">
         <source>
-          <x id="INTERPOLATION" equiv-text="* The maxim"/>
+          <x id="INTERPOLATION" equiv-text="* The maximal"/>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
-          <context context-type="linenumber">23,26</context>
+          <context context-type="linenumber">30,33</context>
         </context-group>
-        <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+        <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
       </trans-unit>
       <trans-unit id="ngb.timepicker.HH" datatype="html">
         <source>HH</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">138,141</context>
+          <context context-type="linenumber">230,231</context>
         </context-group>
         <target state="translated">HH</target>
       </trans-unit>
         <source>Hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">161</context>
+          <context context-type="linenumber">255,258</context>
         </context-group>
         <target state="translated">小时</target>
       </trans-unit>
         <source>MM</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">280,282</context>
         </context-group>
         <target state="translated">MM</target>
       </trans-unit>
         <source>Minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">298,299</context>
         </context-group>
         <target state="translated">分钟</target>
       </trans-unit>
         <source>Increment hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">218,219</context>
+          <context context-type="linenumber">328,329</context>
         </context-group>
         <target state="translated">增加小时</target>
       </trans-unit>
         <source>Decrement hours</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">239,240</context>
+          <context context-type="linenumber">350,356</context>
         </context-group>
         <target state="translated">减少小时</target>
       </trans-unit>
         <source>Increment minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">264,268</context>
+          <context context-type="linenumber">383,384</context>
         </context-group>
         <target state="translated">增加分钟</target>
       </trans-unit>
         <source>Decrement minutes</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">287,289</context>
+          <context context-type="linenumber">412,416</context>
         </context-group>
         <target state="translated">减少分钟</target>
       </trans-unit>
         <source>SS</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">SS</target>
       </trans-unit>
         <source>Seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">秒</target>
       </trans-unit>
         <source>Increment seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">增加秒</target>
       </trans-unit>
         <source>Decrement seconds</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
         <target state="translated">减少秒</target>
       </trans-unit>
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.timepicker.AM" datatype="html">
         </source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
-          <context context-type="linenumber">295</context>
+          <context context-type="linenumber">429</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ngb.toast.close-aria" datatype="html">
         <source>Close</source>
         <context-group purpose="location">
           <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
-          <context context-type="linenumber">70,71</context>
+          <context context-type="linenumber">74,75</context>
         </context-group>
         <target state="translated">关闭</target>
       </trans-unit>
         </context-group>
         <target state="translated">文档 <x id="PH" equiv-text="status.filename"/> 正在被 paperless 处理中。</target>
       </trans-unit>
+      <trans-unit id="2501522447884928778" datatype="html">
+        <source>Prev</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">119</context>
+        </context-group>
+        <target state="needs-translation">Prev</target>
+      </trans-unit>
+      <trans-unit id="3885497195825665706" datatype="html">
+        <source>Next</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">120</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <target state="translated">下一个</target>
+      </trans-unit>
+      <trans-unit id="1241348629231510663" datatype="html">
+        <source>End</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/app.component.ts</context>
+          <context context-type="linenumber">121</context>
+        </context-group>
+        <target state="needs-translation">End</target>
+      </trans-unit>
       <trans-unit id="3909462337752654810" datatype="html">
         <source>The dashboard can be used to show saved views, such as an &apos;Inbox&apos;. Those settings are found under Settings &gt; Saved Views once you have created some.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">122</context>
+          <context context-type="linenumber">126</context>
         </context-group>
         <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings &gt; Saved Views once you have created some.</target>
       </trans-unit>
         <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">129</context>
+          <context context-type="linenumber">136</context>
         </context-group>
         <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
       </trans-unit>
         <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">135</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
       </trans-unit>
         <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">157</context>
         </context-group>
         <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
       </trans-unit>
         <source>Any combination of filters can be saved as a &apos;view&apos; which can then be displayed on the dashboard and / or sidebar.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
       </trans-unit>
         <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">157</context>
+          <context context-type="linenumber">176</context>
         </context-group>
         <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
       </trans-unit>
         <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">163</context>
+          <context context-type="linenumber">185</context>
         </context-group>
         <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
       </trans-unit>
         <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
       </trans-unit>
         <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">175</context>
+          <context context-type="linenumber">203</context>
         </context-group>
         <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
       </trans-unit>
         <source>Thank you! 🙏</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">180</context>
+          <context context-type="linenumber">211</context>
         </context-group>
         <target state="needs-translation">Thank you! 🙏</target>
       </trans-unit>
         <source>There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn&apos;t cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">213</context>
         </context-group>
         <target state="needs-translation">There are &lt;em&gt;tons&lt;/em&gt; more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
       </trans-unit>
         <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">184</context>
+          <context context-type="linenumber">215</context>
         </context-group>
         <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
       </trans-unit>
         <source>Initiating upload...</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/app.component.ts</context>
-          <context context-type="linenumber">230</context>
+          <context context-type="linenumber">264</context>
         </context-group>
         <target state="translated">正在初始化上传...</target>
       </trans-unit>
         <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">39</context>
         </context-group>
         <target state="translated">登录为 <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
       </trans-unit>
         <source>Settings</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">40</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">166</context>
+          <context context-type="linenumber">171</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">169</context>
+          <context context-type="linenumber">174</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Logout</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">退出</target>
       </trans-unit>
         <source>Dashboard</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">69</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
         <source>Documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">76</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">74</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
         <source>Saved views</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">80</context>
+          <context context-type="linenumber">85</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
         <source>Open documents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">94</context>
+          <context context-type="linenumber">99</context>
         </context-group>
         <target state="translated">打开文档</target>
       </trans-unit>
         <source>Close all</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">110</context>
+          <context context-type="linenumber">115</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">113</context>
+          <context context-type="linenumber">118</context>
         </context-group>
         <target state="translated">全部关闭</target>
       </trans-unit>
         <source>Manage</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">119</context>
+          <context context-type="linenumber">124</context>
         </context-group>
         <target state="translated">管理</target>
       </trans-unit>
         <source>Correspondents</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="linenumber">128</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">126</context>
+          <context context-type="linenumber">131</context>
         </context-group>
         <target state="translated">联系人</target>
       </trans-unit>
         <source>Tags</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">130</context>
+          <context context-type="linenumber">135</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">138</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <target state="translated">标签</target>
       </trans-unit>
         <source>Document types</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">137</context>
+          <context context-type="linenumber">142</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">140</context>
+          <context context-type="linenumber">145</context>
         </context-group>
         <target state="translated">文档类型</target>
       </trans-unit>
         <source>Storage paths</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">144</context>
+          <context context-type="linenumber">149</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">152</context>
         </context-group>
         <target state="translated">保存路径</target>
       </trans-unit>
         <source>File Tasks</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">151</context>
+          <context context-type="linenumber">156</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">155</context>
+          <context context-type="linenumber">160</context>
         </context-group>
         <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="&lt;span *ngIf=&quot;tasksService.failedFileTasks.length &gt; 0&quot;&gt;"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge bg-danger ms-2&quot;&gt;"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
       </trans-unit>
         <source>Logs</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">159</context>
+          <context context-type="linenumber">164</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">162</context>
+          <context context-type="linenumber">167</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
         <source>Admin</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">173</context>
+          <context context-type="linenumber">178</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">176</context>
+          <context context-type="linenumber">181</context>
         </context-group>
         <target state="translated">后台管理</target>
       </trans-unit>
         <source>Info</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">182</context>
+          <context context-type="linenumber">187</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <source>Documentation</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">186</context>
+          <context context-type="linenumber">191</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">189</context>
+          <context context-type="linenumber">194</context>
         </context-group>
         <target state="translated">帮助文档</target>
       </trans-unit>
         <source>GitHub</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">194</context>
+          <context context-type="linenumber">199</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">197</context>
+          <context context-type="linenumber">202</context>
         </context-group>
         <target state="translated">GitHub</target>
       </trans-unit>
         <source>Suggest an idea</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">199</context>
+          <context context-type="linenumber">204</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">203</context>
+          <context context-type="linenumber">208</context>
         </context-group>
         <target state="translated">提出建议</target>
       </trans-unit>
         <source>is available.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">可用</target>
       </trans-unit>
         <source>Click to view.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">212</context>
+          <context context-type="linenumber">217</context>
         </context-group>
         <target state="translated">点击查看</target>
       </trans-unit>
         <source>Paperless-ngx can automatically check for updates</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">216</context>
+          <context context-type="linenumber">221</context>
         </context-group>
         <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
       </trans-unit>
         <source> How does this work? </source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">223,225</context>
+          <context context-type="linenumber">228,230</context>
         </context-group>
         <target state="needs-translation"> How does this work? </target>
       </trans-unit>
         <source>Update available</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
-          <context context-type="linenumber">234</context>
+          <context context-type="linenumber">239</context>
         </context-group>
         <target state="translated">有可用更新</target>
       </trans-unit>
         <source>An error occurred while saving update checking settings.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
-          <context context-type="linenumber">202</context>
+          <context context-type="linenumber">216</context>
         </context-group>
         <target state="needs-translation">An error occurred while saving update checking settings.</target>
       </trans-unit>
+      <trans-unit id="8700121026680200191" datatype="html">
+        <source>Clear</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+          <context context-type="linenumber">1</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+          <context context-type="linenumber">47</context>
+        </context-group>
+        <target state="translated">清除</target>
+      </trans-unit>
       <trans-unit id="5000042972069710005" datatype="html">
         <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;d-inline-block&quot; style=&quot;padding-bottom: 1px;&quot; &gt;"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
         <context-group purpose="location">
         <source>After</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">19</context>
         </context-group>
         <target state="translated">之后</target>
       </trans-unit>
-      <trans-unit id="8700121026680200191" datatype="html">
-        <source>Clear</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">49</context>
-        </context-group>
-        <target state="translated">清除</target>
-      </trans-unit>
       <trans-unit id="1218334388194408974" datatype="html">
         <source>Before</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <target state="translated">之前</target>
       </trans-unit>
         <target state="translated">无法保存元素: <x id="PH" equiv-text="error"/></target>
       </trans-unit>
       <trans-unit id="6036319582202941456" datatype="html">
-        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
+        <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the &apos;document_renamer&apos; utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
-        <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>请注意,在您运行“document_renamer”工具之前,编辑路径不会对存储的文件应用更改。 请参阅 <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer&quot;&gt;"/>文档<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>。<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
+        <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/administration/#renamer&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
       </trans-unit>
       <trans-unit id="8911059720204770105" datatype="html">
         <source>Path</source>
         </context-group>
         <target state="translated">或者使用斜线来添加目录,例如</target>
       </trans-unit>
-      <trans-unit id="7992597438102889079" datatype="html">
-        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
+      <trans-unit id="7871464228487558644" datatype="html">
+        <source>See &lt;a target=&quot;_blank&quot; href=&quot;https://docs.paperless-ngx.com/advanced_usage/#file-name-handling&quot;&gt;documentation&lt;/a&gt; for full list.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <target state="translated">查看 &lt;a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"&gt;文档&lt;/a&gt; 以获取完整列表。</target>
+        <target state="needs-translation">See &lt;a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"&gt;documentation&lt;/a&gt; for full list.</target>
       </trans-unit>
       <trans-unit id="6898961890896270754" datatype="html">
         <source>Create new storage path</source>
         <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
         <source>Any</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">18</context>
         </context-group>
         <target state="translated">所有</target>
       </trans-unit>
         <source>Apply</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">32</context>
         </context-group>
         <target state="translated">应用</target>
       </trans-unit>
         <source>Click again to exclude items.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <target state="translated">再次单击以排除项目。</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">54</context>
+          <context context-type="linenumber">59</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
         <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
       </trans-unit>
       <trans-unit id="4474647174688421179" datatype="html">
-        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
+        <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
-        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://paperless-ngx.readthedocs.io&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
+        <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://docs.paperless-ngx.com&quot; target=&quot;_blank&quot;&gt;"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.</target>
       </trans-unit>
       <trans-unit id="4294899532887357745" datatype="html">
         <source>Thanks for being a part of the Paperless-ngx community!</source>
         </context-group>
         <target state="translated">上一个</target>
       </trans-unit>
-      <trans-unit id="3885497195825665706" datatype="html">
-        <source>Next</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
-          <context context-type="linenumber">55</context>
-        </context-group>
-        <target state="translated">下一个</target>
-      </trans-unit>
       <trans-unit id="5028777105388019087" datatype="html">
         <source>Details</source>
         <context-group purpose="location">
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="linenumber">35</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="linenumber">42</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <target state="translated">保存路径</target>
       </trans-unit>
         </context-group>
         <target state="translated">继续操作</target>
       </trans-unit>
-      <trans-unit id="7662620858973651688" datatype="html">
-        <source>Redo OCR operation will begin in the background.</source>
+      <trans-unit id="5729001209753056399" datatype="html">
+        <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
           <context context-type="linenumber">494</context>
         </context-group>
-        <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+        <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
       </trans-unit>
       <trans-unit id="8008978164775353960" datatype="html">
         <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify(                 error.error               )"/></source>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="linenumber">28</context>
         </context-group>
         <target state="translated">过滤器标签</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">36</context>
         </context-group>
         <target state="translated">过滤联系人</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <target state="translated">过滤文档类型</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">45</context>
+          <context context-type="linenumber">50</context>
         </context-group>
         <target state="translated">筛选存储路径</target>
       </trans-unit>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="linenumber">65</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
         <source>Reset filters</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
-          <context context-type="linenumber">73</context>
+          <context context-type="linenumber">78</context>
         </context-group>
         <target state="translated">重置过滤器</target>
       </trans-unit>
index fcb69c913b0c4a20cf355e80952e038746a580d1..ab62dff251c769731e41bccdd7c3b4d29732d78a 100644 (file)
@@ -242,10 +242,12 @@ a, a:hover,
   }
 
   .input-group {
-    .ng-select-container {
-      height: 100%;
-      border-top-right-radius: 0;
-      border-bottom-right-radius: 0;
+    ng-select:not(:last-child) {
+      .ng-select-container {
+        height: 100%;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+      }
     }
   }
 }
index f542a1d98ab36aba74eeefbafc0f9cce59dfb6aa..b46b3a6839b68862be8114e6c52fe6b72b0fe62e 100644 (file)
@@ -2,7 +2,8 @@ import datetime
 import hashlib
 import os
 import uuid
-from subprocess import Popen
+from subprocess import CompletedProcess
+from subprocess import run
 from typing import Optional
 from typing import Type
 
@@ -148,13 +149,20 @@ class Consumer(LoggingMixin):
         script_env["DOCUMENT_SOURCE_PATH"] = filepath_arg
 
         try:
-            Popen(
-                (
+            completed_proc = run(
+                args=[
                     settings.PRE_CONSUME_SCRIPT,
                     filepath_arg,
-                ),
+                ],
                 env=script_env,
-            ).wait()
+                capture_output=True,
+            )
+
+            self._log_script_outputs(completed_proc)
+
+            # Raises exception on non-zero output
+            completed_proc.check_returncode()
+
         except Exception as e:
             self._fail(
                 MESSAGE_PRE_CONSUME_SCRIPT_ERROR,
@@ -208,8 +216,8 @@ class Consumer(LoggingMixin):
         script_env["DOCUMENT_ORIGINAL_FILENAME"] = str(document.original_filename)
 
         try:
-            Popen(
-                (
+            completed_proc = run(
+                args=[
                     settings.POST_CONSUME_SCRIPT,
                     str(document.pk),
                     document.get_public_filename(),
@@ -219,9 +227,16 @@ class Consumer(LoggingMixin):
                     reverse("document-thumb", kwargs={"pk": document.pk}),
                     str(document.correspondent),
                     str(",".join(document.tags.all().values_list("name", flat=True))),
-                ),
+                ],
                 env=script_env,
-            ).wait()
+                capture_output=True,
+            )
+
+            self._log_script_outputs(completed_proc)
+
+            # Raises exception on non-zero output
+            completed_proc.check_returncode()
+
         except Exception as e:
             self._fail(
                 MESSAGE_POST_CONSUME_SCRIPT_ERROR,
@@ -444,7 +459,12 @@ class Consumer(LoggingMixin):
 
         return document
 
-    def _store(self, text, date, mime_type) -> Document:
+    def _store(
+        self,
+        text: str,
+        date: Optional[datetime.datetime],
+        mime_type: str,
+    ) -> Document:
 
         # If someone gave us the original filename, use it instead of doc.
 
@@ -510,3 +530,39 @@ class Consumer(LoggingMixin):
         with open(source, "rb") as read_file:
             with open(target, "wb") as write_file:
                 write_file.write(read_file.read())
+
+    def _log_script_outputs(self, completed_process: CompletedProcess):
+        """
+        Decodes a process stdout and stderr streams and logs them to the main log
+        """
+        # Log what the script exited as
+        self.log(
+            "info",
+            f"{completed_process.args[0]} exited {completed_process.returncode}",
+        )
+
+        # Decode the output (if any)
+        if len(completed_process.stdout):
+            stdout_str = (
+                completed_process.stdout.decode("utf8", errors="ignore")
+                .strip()
+                .split(
+                    "\n",
+                )
+            )
+            self.log("info", "Script stdout:")
+            for line in stdout_str:
+                self.log("info", line)
+
+        if len(completed_process.stderr):
+            stderr_str = (
+                completed_process.stderr.decode("utf8", errors="ignore")
+                .strip()
+                .split(
+                    "\n",
+                )
+            )
+
+            self.log("warning", "Script stderr:")
+            for line in stderr_str:
+                self.log("warning", line)
index f621996775699480e35f0a5ba5077d4e5d43b9b2..e2309b366521aaeef24194d451d6c8885f42c1be 100644 (file)
@@ -260,7 +260,7 @@ def parse_date_generator(filename, text) -> Iterator[datetime.datetime]:
 
         try:
             date = __parser(date_string, date_order)
-        except (TypeError, ValueError):
+        except Exception:
             # Skip all matches that do not parse to a proper date
             date = None
 
index 865c83935e9055393b6ac54aedcc2218b647fa17..c28ea8e2b5ee65b4086374a58775a75e47443b46 100644 (file)
@@ -447,7 +447,8 @@ def update_filename_and_move_files(sender, instance, **kwargs):
                 archive_filename=instance.archive_filename,
             )
 
-        except (OSError, DatabaseError, CannotMoveFilesException):
+        except (OSError, DatabaseError, CannotMoveFilesException) as e:
+            logger.warn(f"Exception during file handling: {e}")
             # This happens when either:
             #  - moving the files failed due to file system errors
             #  - saving to the database failed due to database errors
@@ -456,9 +457,11 @@ def update_filename_and_move_files(sender, instance, **kwargs):
             # Try to move files to their original location.
             try:
                 if move_original and os.path.isfile(instance.source_path):
+                    logger.info("Restoring previous original path")
                     os.rename(instance.source_path, old_source_path)
 
                 if move_archive and os.path.isfile(instance.archive_path):
+                    logger.info("Restoring previous archive path")
                     os.rename(instance.archive_path, old_archive_path)
 
             except Exception:
@@ -468,7 +471,7 @@ def update_filename_and_move_files(sender, instance, **kwargs):
                 #  issue that's going to get caught by the santiy checker.
                 #  All files remain in place and will never be overwritten,
                 #  so this is not the end of the world.
-                # B: if moving the orignal file failed, nothing has changed
+                # B: if moving the original file failed, nothing has changed
                 #  anyway.
                 pass
 
index 667c3d9dfc43466ae7768154052ec95c7fdb5f47..f5bad665ad012ed0ea3fe208a03248176ea34e59 100644 (file)
@@ -3,6 +3,7 @@ import logging
 import os
 import shutil
 import uuid
+from datetime import datetime
 from pathlib import Path
 from typing import Type
 
@@ -98,6 +99,14 @@ def consume_file(
 
     path = Path(path).resolve()
 
+    # Celery converts this to a string, but everything expects a datetime
+    # Long term solution is to not use JSON for the serializer but pickle instead
+    if override_created is not None and isinstance(override_created, str):
+        try:
+            override_created = datetime.fromisoformat(override_created)
+        except Exception:
+            pass
+
     # check for separators in current document
     if settings.CONSUMER_ENABLE_BARCODES:
 
index fb817bfea732862297605563614d5cf0e454f773..4364eeb36d7dddd8e67393c2baf1ed3704bf6f02 100644 (file)
@@ -76,7 +76,7 @@
                                        </g>
                                </svg>
                                <h6 class="m-auto">{% translate "Paperless-ngx is loading..." %}</h6>
-                               <p class="warning m-auto mt-3 small fade hide">{% translate "Still here?! Hmm, something might be wrong." %} <a href="https://paperless-ngx.readthedocs.io/en/latest/">{% translate "Here's a link to the docs." %}</a></p>
+                               <p class="warning m-auto mt-3 small fade hide">{% translate "Still here?! Hmm, something might be wrong." %} <a href="https://docs.paperless-ngx.com">{% translate "Here's a link to the docs." %}</a></p>
                        </div>
                </div>
        </app-root>
index 3b94b889b85db91a06c9ec4d1af3708ea4a37cdd..f6685ad02016ceee87cd9c6f1b4b4925a25517fa 100644 (file)
@@ -2,7 +2,9 @@ import datetime
 import os
 import re
 import shutil
+import stat
 import tempfile
+from subprocess import CalledProcessError
 from unittest import mock
 from unittest.mock import MagicMock
 
@@ -801,7 +803,16 @@ class TestConsumerCreatedDate(DirectoriesMixin, TestCase):
 
 
 class PreConsumeTestCase(TestCase):
-    @mock.patch("documents.consumer.Popen")
+    def setUp(self) -> None:
+
+        # this prevents websocket message reports during testing.
+        patcher = mock.patch("documents.consumer.Consumer._send_progress")
+        self._send_progress = patcher.start()
+        self.addCleanup(patcher.stop)
+
+        return super().setUp()
+
+    @mock.patch("documents.consumer.run")
     @override_settings(PRE_CONSUME_SCRIPT=None)
     def test_no_pre_consume_script(self, m):
         c = Consumer()
@@ -809,7 +820,7 @@ class PreConsumeTestCase(TestCase):
         c.run_pre_consume_script()
         m.assert_not_called()
 
-    @mock.patch("documents.consumer.Popen")
+    @mock.patch("documents.consumer.run")
     @mock.patch("documents.consumer.Consumer._send_progress")
     @override_settings(PRE_CONSUME_SCRIPT="does-not-exist")
     def test_pre_consume_script_not_found(self, m, m2):
@@ -818,7 +829,7 @@ class PreConsumeTestCase(TestCase):
         c.path = "path-to-file"
         self.assertRaises(ConsumerError, c.run_pre_consume_script)
 
-    @mock.patch("documents.consumer.Popen")
+    @mock.patch("documents.consumer.run")
     def test_pre_consume_script(self, m):
         with tempfile.NamedTemporaryFile() as script:
             with override_settings(PRE_CONSUME_SCRIPT=script.name):
@@ -830,14 +841,78 @@ class PreConsumeTestCase(TestCase):
 
                 args, kwargs = m.call_args
 
-                command = args[0]
+                command = kwargs["args"]
 
                 self.assertEqual(command[0], script.name)
                 self.assertEqual(command[1], "path-to-file")
 
+    @mock.patch("documents.consumer.Consumer.log")
+    def test_script_with_output(self, mocked_log):
+        """
+        GIVEN:
+            - A script which outputs to stdout and stderr
+        WHEN:
+            - The script is executed as a consume script
+        THEN:
+            - The script's outputs are logged
+        """
+        with tempfile.NamedTemporaryFile(mode="w") as script:
+            # Write up a little script
+            with script.file as outfile:
+                outfile.write("#!/usr/bin/env bash\n")
+                outfile.write("echo This message goes to stdout\n")
+                outfile.write("echo This message goes to stderr >&2")
+
+            # Make the file executable
+            st = os.stat(script.name)
+            os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+            with override_settings(PRE_CONSUME_SCRIPT=script.name):
+                c = Consumer()
+                c.path = "path-to-file"
+                c.run_pre_consume_script()
+
+                mocked_log.assert_called()
+
+                mocked_log.assert_any_call("info", "This message goes to stdout")
+                mocked_log.assert_any_call("warning", "This message goes to stderr")
+
+    def test_script_exit_non_zero(self):
+        """
+        GIVEN:
+            - A script which exits with a non-zero exit code
+        WHEN:
+            - The script is executed as a pre-consume script
+        THEN:
+            - A ConsumerError is raised
+        """
+        with tempfile.NamedTemporaryFile(mode="w") as script:
+            # Write up a little script
+            with script.file as outfile:
+                outfile.write("#!/usr/bin/env bash\n")
+                outfile.write("exit 100\n")
+
+            # Make the file executable
+            st = os.stat(script.name)
+            os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+            with override_settings(PRE_CONSUME_SCRIPT=script.name):
+                c = Consumer()
+                c.path = "path-to-file"
+                self.assertRaises(ConsumerError, c.run_pre_consume_script)
+
 
 class PostConsumeTestCase(TestCase):
-    @mock.patch("documents.consumer.Popen")
+    def setUp(self) -> None:
+
+        # this prevents websocket message reports during testing.
+        patcher = mock.patch("documents.consumer.Consumer._send_progress")
+        self._send_progress = patcher.start()
+        self.addCleanup(patcher.stop)
+
+        return super().setUp()
+
+    @mock.patch("documents.consumer.run")
     @override_settings(POST_CONSUME_SCRIPT=None)
     def test_no_post_consume_script(self, m):
         doc = Document.objects.create(title="Test", mime_type="application/pdf")
@@ -858,7 +933,7 @@ class PostConsumeTestCase(TestCase):
         c.filename = "somefile.pdf"
         self.assertRaises(ConsumerError, c.run_post_consume_script, doc)
 
-    @mock.patch("documents.consumer.Popen")
+    @mock.patch("documents.consumer.run")
     def test_post_consume_script_simple(self, m):
         with tempfile.NamedTemporaryFile() as script:
             with override_settings(POST_CONSUME_SCRIPT=script.name):
@@ -868,7 +943,7 @@ class PostConsumeTestCase(TestCase):
 
                 m.assert_called_once()
 
-    @mock.patch("documents.consumer.Popen")
+    @mock.patch("documents.consumer.run")
     def test_post_consume_script_with_correspondent(self, m):
         with tempfile.NamedTemporaryFile() as script:
             with override_settings(POST_CONSUME_SCRIPT=script.name):
@@ -889,7 +964,7 @@ class PostConsumeTestCase(TestCase):
 
                 args, kwargs = m.call_args
 
-                command = args[0]
+                command = kwargs["args"]
 
                 self.assertEqual(command[0], script.name)
                 self.assertEqual(command[1], str(doc.pk))
@@ -897,3 +972,29 @@ class PostConsumeTestCase(TestCase):
                 self.assertEqual(command[6], f"/api/documents/{doc.pk}/thumb/")
                 self.assertEqual(command[7], "my_bank")
                 self.assertCountEqual(command[8].split(","), ["a", "b"])
+
+    def test_script_exit_non_zero(self):
+        """
+        GIVEN:
+            - A script which exits with a non-zero exit code
+        WHEN:
+            - The script is executed as a post-consume script
+        THEN:
+            - A ConsumerError is raised
+        """
+        with tempfile.NamedTemporaryFile(mode="w") as script:
+            # Write up a little script
+            with script.file as outfile:
+                outfile.write("#!/usr/bin/env bash\n")
+                outfile.write("exit -500\n")
+
+            # Make the file executable
+            st = os.stat(script.name)
+            os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+            with override_settings(POST_CONSUME_SCRIPT=script.name):
+                c = Consumer()
+                doc = Document.objects.create(title="Test", mime_type="application/pdf")
+                c.path = "path-to-file"
+                with self.assertRaises(ConsumerError):
+                    c.run_post_consume_script(doc)
diff --git a/src/locale/ar_BH/LC_MESSAGES/django.po b/src/locale/ar_BH/LC_MESSAGES/django.po
deleted file mode 100644 (file)
index c2f70f7..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Bahrain\n"
-"Language: ar_BH\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-BH\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
diff --git a/src/locale/ar_EG/LC_MESSAGES/django.po b/src/locale/ar_EG/LC_MESSAGES/django.po
deleted file mode 100644 (file)
index cef7ec0..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Egypt\n"
-"Language: ar_EG\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-EG\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
diff --git a/src/locale/ar_YE/LC_MESSAGES/django.po b/src/locale/ar_YE/LC_MESSAGES/django.po
deleted file mode 100644 (file)
index 3975448..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Yemen\n"
-"Language: ar_YE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-YE\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
index 14d3591d27192b9ff5a66234a993d6b6d91c00a9..2b12b7dfb243658b490013ccc1b3027b75a45ce8 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-16 13:46\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Belarusian\n"
 "Language: be_BY\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Дакументы"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Любое слова"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Усе словы"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Дакладнае супадзенне"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Рэгулярны выраз"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Невыразнае слова"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Аўтаматычна"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "назва"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "супадзенне"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "алгарытм супастаўлення"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "без уліку рэгістра"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "карэспандэнт"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "карэспандэнты"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "колер"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "гэта ўваходны тэг"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Пазначыць гэты тэг як тэг папкі \"Уваходныя\": Усе нядаўна спажытыя дакументы будуць пазначаны тэгамі \"Уваходныя\"."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "тэг"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "тэгі"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "тып дакумента"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "тыпы дакументаў"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "шлях"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "шлях захоўвання"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "шляхі захоўвання"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Незашыфраваны"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Зашыфравана з дапамогай GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "назва"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "змест"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Неапрацаваныя тэкставыя даныя дакумента. Гэта поле ў асноўным выкарыстоўваецца для пошуку."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "тып MIME"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "кантрольная сума"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Кантрольная сума зыходнага дакумента."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "кантрольная сума архіва"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Кантрольная сума архіўнага дакумента."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "створаны"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "мадыфікаваны"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "тып захоўвання"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "дададзена"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "імя файла"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Цяперашняе імя файла ў сховішчы"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "імя файла архіва"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Цяперашняе імя файла архіва ў сховішчы"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "парадкавы нумар архіва"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Пазіцыя гэтага дакумента ў вашым фізічным архіве дакументаў."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "дакумент"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "дакументы"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "адладка"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "інфармацыя"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "папярэджанне"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "памылка"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "крытычны"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "група"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "паведамленне"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "узровень"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "лог"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "логі"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "захаваны выгляд"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "захаваныя выгляды"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "карыстальнік"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "паказаць на панэлі"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "паказаць у бакавой панэлі"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "поле сартавання"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "сартаваць у адваротным парадку"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "назва змяшчае"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "змест змяшчае"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "карэспандэнт"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "тып дакумента"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "ва ўваходных"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "мае тэг"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "мае любы тэг"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "створана перад"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "створана пасля"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "год стварэння"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "месяц стварэння"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "дзень стварэння"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "даданы перад"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "даданы пасля"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "зменены перад"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "зменены пасля"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "не мае тэга"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "не мае ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "назва або змест смяшчае"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "поўнатэкставы запыт"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "больш падобнага"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "мае тэгі ў"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "тып правіла"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "значэнне"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "правіла фільтрацыі"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "правілы фільтрацыі"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "пачата"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Няправільны рэгулярны выраз: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Няправільны колер."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Тып файла %(type)s не падтрымліваецца"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Выяўлена няправільная зменная."
 
@@ -444,87 +556,87 @@ msgstr "Пароль"
 msgid "Sign in"
 msgstr "Увайсці"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Англійская (ЗША)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Беларуская"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Чэшская"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Дацкая"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Нямецкая"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Англійская (Вялікабрытанія)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Іспанская"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Французская"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Італьянская"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Люксембургская"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Нідэрландская"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Польская"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Партугальская (Бразілія)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Партугальская"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Румынская"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Руская"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Славенская"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Сербская"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Шведская"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Турэцкая"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Кітайская спрошчаная"
 
index fc6dd3edeb82acf0e8991260099d5030ea55ddaf..2acdedcb52ec875b5adc15d754aa8f42608e2fef 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-18 20:06\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Czech\n"
 "Language: cs_CZ\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenty"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Jakékoliv slovo"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Všechna slova"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Přesná shoda"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regulární výraz"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Fuzzy slovo"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatický"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "název"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "shoda"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritmus pro shodu"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "je ignorováno"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korespondenti"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "barva"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "tag přichozí"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Označí tento tag jako tag pro příchozí: Všechny nově zkonzumované dokumenty budou označeny tagem pro přichozí"
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "tagy"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "tagy"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "typ dokumentu"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "typy dokumentu"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "cesta"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "cesta k úložišti"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "cesta k úložišti"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Nešifrované"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Šifrované pomocí GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titulek"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "obsah"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Nezpracovaná, pouze textová data dokumentu. Toto pole je používáno především pro vyhledávání."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime typ"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrolní součet"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrolní součet původního dokumentu"
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "kontrolní součet archivu"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrolní součet archivovaného dokumentu."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "vytvořeno"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "upraveno"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "typ úložiště"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "přidáno"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "název souboru"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Aktuální název souboru v úložišti"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "Název archivovaného souboru"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Aktuální název souboru archivu v úložišti"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "sériové číslo archivu"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Pozice dokumentu ve vašem archivu fyzických dokumentů"
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenty"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "ladění"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informace"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "varování"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "chyba"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritická"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "skupina"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "zpráva"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "úroveň"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "záznam"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "záznamy"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "uložený pohled"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "uložené pohledy"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "uživatel"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "zobrazit v dashboardu"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "zobrazit v postranním menu"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "pole na řazení"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "třídit opačně"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "titulek obsahuje"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "obsah obsahuje"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN je"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "korespondent je"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "typ dokumentu je"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "je v příchozích"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "má tag"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "má jakýkoliv tag"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "vytvořeno před"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "vytvořeno po"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "rok vytvoření je"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "měsíc vytvoření je"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "den vytvoření je"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "přidáno před"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "přidáno po"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "upraveno před"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "upraveno po"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "nemá tag"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "Nemá ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "Titulek nebo obsah obsahuje"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "Fulltextový dotaz"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "Podobné"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "má značky v"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "typ pravidla"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "hodnota"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtrovací pravidlo"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtrovací pravidla"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "zahájeno"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Neplatný regulární výraz: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Neplatná barva."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Typ souboru %(type)s není podporován"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Zjištěna neplatná proměnná."
 
@@ -444,87 +556,87 @@ msgstr "Heslo"
 msgid "Sign in"
 msgstr "Přihlásit se"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Angličtina (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Běloruština"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Čeština"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dánština"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Němčina"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Angličtina (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Španělština"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francouzština"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italština"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Lucemburština"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Holandština"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polština"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugalština (Brazílie)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugalština"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumunština"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ruština"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovinština"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Srbština"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Švédština"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turečtina"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Čínština (zjednodušená)"
 
index 2fd63c6f5a76cc117a2448cf6e49a99f9a07b62c..f7ccff0db70b7b33f32845eedf18bdcd08b7a648 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Danish\n"
 "Language: da_DK\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenter"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Ethvert ord"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Alle ord"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Præcis match"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regulær udtryk"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Tilnærmet ord"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatisk"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "navn"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "match"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "matching algoritme"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "er usensitiv"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korrespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korrespondenter"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "farve"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "er indbakkeetiket"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Markerer denne etiket som en indbakkeetiket: Alle ny-bearbejdede dokumenter vil blive mærket med indbakkeetiketter."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etiket"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiketter"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "dokumenttype"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "dokumenttyper"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Ukrypteret"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Krypteret med GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "indhold"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Dokumentets rå tekstdata. Dette felt bruges primært til søgning."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "MIME-type"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrolsum"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrolsummen af det oprindelige dokument."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arkiv kontrolsum"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrolsummen af det arkiverede dokument."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "oprettet"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "ændret"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "lagringstype"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "tilføjet"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "filnavn"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nuværende filnavn lagret"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "arkiv filnavn"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nuværende arkivfilnavn lagret"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arkiv serienummer"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Placeringen af dette dokument i dit fysiske dokumentarkiv."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenter"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "fejlfinding"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "information"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "advarsel"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "fejl"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritisk"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "gruppe"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "besked"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "niveau"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "log"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logninger"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "gemt visning"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "gemte visninger"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "bruger"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "vis på betjeningspanel"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "vis i sidepanelet"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sortér felt"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "sortér omvendt"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "titel indeholder"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "indhold indeholder"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN er"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "korrespondent er"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "dokumenttype er"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "er i indbakke"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "har etiket"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "har en etiket"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "oprettet før"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "oprettet efter"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "oprettet år er"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "oprettet måned er"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "oprettet dag er"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "tilføjet før"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "tilføjet efter"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "ændret før"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "ændret efter"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "har ikke nogen etiket"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "har ikke ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "titel eller indhold indeholder"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "fuldtekst forespørgsel"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mere som dette"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "har etiketter i"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "regeltype"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "værdi"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtreringsregel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtreringsregler"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ugyldigt regulært udtryk: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ugyldig farve."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Filtype %(type)s understøttes ikke"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -444,87 +556,87 @@ msgstr "Adgangskode"
 msgid "Sign in"
 msgstr "Log ind"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engelsk (USA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tjekkisk"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dansk"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Tysk"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engelsk (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spansk"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Fransk"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiensk"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburgsk"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Hollandsk"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polsk"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugisisk (Brasilien)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugisisk"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Romansk"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russisk"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Svensk"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr ""
 
index e61bcb5641a0c75638c29b9144520eb5396a310a..446ff9672e9f53e6a43055e97ccdf4ce3083cc49 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-04 11:44\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-26 20:28\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumente"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Irgendein Wort"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Alle Wörter"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Exakte Übereinstimmung"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regulärer Ausdruck"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Ungenaues Wort"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatisch"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "Name"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "Zuweisungsmuster"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "Zuweisungsalgorithmus"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "Groß-/Kleinschreibung irrelevant"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "Korrespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "Korrespondenten"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "Farbe"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "Posteingangs-Tag"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit diesem Tag versehen."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "Tag"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "Tags"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "Dokumenttyp"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "Dokumenttypen"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "Pfad"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "Speicherpfad"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "Speicherpfade"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Nicht verschlüsselt"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Durch GNU Privacy Guard verschlüsselt"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "Titel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "Inhalt"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche verwendet."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "MIME-Typ"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "Prüfsumme"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Die Prüfsumme des originalen Dokuments."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "Archiv-Prüfsumme"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Die Prüfsumme des archivierten Dokuments."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "Erstellt"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "Geändert"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "Speichertyp"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "Hinzugefügt"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "Dateiname"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Aktueller Dateiname im Datenspeicher"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "Archiv-Dateiname"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Aktueller Dateiname im Archiv"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "Original-Dateiname"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Der Originalname der Datei beim Hochladen"
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "Archiv-Seriennummer"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "Dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "Dokumente"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "Debug"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "Information"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "Warnung"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "Fehler"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "Kritisch"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "Gruppe"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "Nachricht"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "Level"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "Protokoll"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "Protokoll"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "Gespeicherte Ansicht"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "Gespeicherte Ansichten"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "Benutzer"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "Auf Startseite zeigen"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "In Seitenleiste zeigen"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "Sortierfeld"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "Umgekehrte Sortierung"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "Titel enthält"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "Inhalt enthält"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN ist"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "Korrespondent ist"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "Dokumenttyp ist"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "Ist im Posteingang"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "Hat Tag"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "Hat irgendein Tag"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "Ausgestellt vor"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "Ausgestellt nach"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "Ausgestellt im Jahr"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "Ausgestellt im Monat"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "Ausgestellt am Tag"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "Hinzugefügt vor"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "Hinzugefügt nach"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "Geändert vor"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "Geändert nach"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "Hat nicht folgendes Tag"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "Dokument hat keine ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "Titel oder Inhalt enthält"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "Volltextsuche"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "Ähnliche Dokumente"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "hat Tags in"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN größer als"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN kleiner als"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "Speicherpfad ist"
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "Regeltyp"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "Wert"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "Filterregel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "Filterregeln"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "gestartet"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "Aufgaben ID"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery-ID für die ausgeführte Aufgabe"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Bestätigt"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Wenn die Aufgabe über das Frontend oder die API bestätigt wird"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Aufgabenname"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Name der Datei, für die die Aufgabe ausgeführt wurde"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Name der ausgeführten Aufgabe"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr "Aufgabe: Positionsargumente"
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr "JSON-Darstellung der Positionsargumente, die für die Aufgabe verwendet werden"
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr "Aufgabe: Benannte Argumente"
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr "JSON-Darstellung der benannten Argumente, die für die Aufgabe verwendet werden"
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Aufgabe: Status"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr "Aktueller Status der laufenden Aufgabe"
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr "Erstellungsdatum/-zeit"
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr "Zeitpunkt, an dem das Ergebnis der Aufgabe erstellt wurde (in UTC)"
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr "Startzeitpunk"
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr "Zeitpunkt, als die Aufgabe erstellt wurde (in UTC)"
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr "Abgeschlossen Zeitpunkt"
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr "Zeitpunkt, an dem die Aufgabe abgeschlossen wurde (in UTC)"
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr "Ergebnisse"
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Die von der Aufgabe zurückgegebenen Daten"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Kommentar zu diesem Dokument"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "Kommentar"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "Kommentare"
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ungültiger regulärer Ausdruck: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ungültige Farbe."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Dateityp %(type)s nicht unterstützt"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Ungültige Variable entdeckt."
 
@@ -444,87 +556,87 @@ msgstr "Kennwort"
 msgid "Sign in"
 msgstr "Anmelden"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Englisch (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Belarussisch"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tschechisch"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dänisch"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Deutsch"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Englisch (UK)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spanisch"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Französisch"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italienisch"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburgisch"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Niederländisch"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polnisch"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugiesisch (Brasilien)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugiesisch"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumänisch"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russisch"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slowenisch"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbisch"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Schwedisch"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Türkisch"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Vereinfachtes Chinesisch"
 
index 3b565f02e861e596caa326d858e645a7d9433792..5236e343382024de5061b96baf2377a67467ba9e 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documentos"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Cualquier palabra"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Todas las palabras"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Coincidencia exacta"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Expresión regular"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Palabra borrosa"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automático"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nombre"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "coincidencia"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "Algoritmo de coincidencia"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "es insensible"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "interlocutor"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "interlocutores"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "color"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "es etiqueta de bandeja"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Marca esta etiqueta como una etiqueta de bandeja: todos los documentos recién consumidos serán etiquetados con las etiquetas de bandeja."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etiqueta"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiquetas"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tipo de documento"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipos de documento"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "ruta"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "ruta de almacenamiento"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "rutas de almacenamiento"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Sin cifrar"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Cifrado con GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "título"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "contenido"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Los datos de texto en bruto del documento. Este campo se utiliza principalmente para las búsquedas."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "tipo MIME"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "Cadena de verificación"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "La cadena de verificación del documento original."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "cadena de comprobación del archivo"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "La cadena de verificación del documento archivado."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "creado"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificado"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tipo de almacenamiento"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "añadido"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nombre del archivo"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nombre de archivo actual en disco"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nombre de archivo"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nombre de archivo actual en disco"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "número de serie del archivo"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Posición de este documento en tu archivo físico de documentos."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "documento"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documentos"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "depuración"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "información"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "alerta"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "error"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "crítico"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupo"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "mensaje"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivel"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "log"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logs"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "vista guardada"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "vistas guardadas"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "usuario"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "mostrar en el panel de control"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "mostrar en barra lateral"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "campo de ordenación"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "ordenar al revés"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "el título contiene"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "el contenido contiene"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN es"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "interlocutor es"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "el tipo de documento es"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "está en la bandeja de entrada"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "tiene la etiqueta"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "tiene cualquier etiqueta"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "creado antes"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "creado después"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "el año de creación es"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "el mes de creación es"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "creado el día"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "agregado antes de"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "agregado después de"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificado después de"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificado antes de"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "no tiene la etiqueta"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "no tiene ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "el título o cuerpo contiene"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "consulta de texto completo"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "más contenido similar"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "tiene etiquetas en"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tipo de regla"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valor"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "regla de filtrado"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "reglas de filtrado"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Expresión irregular inválida: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Color inválido."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Tipo de fichero %(type)s no suportado"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Variable inválida."
 
@@ -444,87 +556,87 @@ msgstr "Contraseña"
 msgid "Sign in"
 msgstr "Iniciar sesión"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Inglés (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Bielorruso"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Checo"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danés"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Alemán"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Inglés (Gran Bretaña)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Español"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francés"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiano"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburgués"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Alemán"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polaco"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugués (Brasil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugués"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumano"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ruso"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Esloveno"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbio"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Sueco"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turco"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Chino simplificado"
 
index 8d817560ea562a0bb7270fe32a748fb9c02c2ed6..0d9293cd4134de898a3ed1478749eea37dc9e8bb 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-06 20:21\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumentit"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Mikä tahansa sana"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Kaikki sanat"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Tarkka osuma"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Säännöllinen lauseke (regex)"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Sumea sana"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automaattinen"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nimi"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "osuma"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "tunnistusalgoritmi"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "ei ole herkkä"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "yhteyshenkilö"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "yhteyshenkilöt"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "väri"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "on uusien tunniste"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Merkitsee tämän tunnisteen uusien tunnisteeksi: Kaikille vastasyötetyille tiedostoille annetaan tämä tunniste."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "tunniste"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "tunnisteet"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "asiakirjatyyppi"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "asiakirjatyypit"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "polku"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "tallennustilan polku"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "tallennustilan polut"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Salaamaton"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "GNU Privacy Guard -salattu"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "otsikko"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "sisältö"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Raaka vain teksti -muotoinen dokumentin sisältö. Kenttää käytetään pääasiassa hakutoiminnossa."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime-tyyppi"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "tarkistussumma"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Alkuperäisen dokumentin tarkistussumma."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arkistotarkastussumma"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Arkistoidun dokumentin tarkistussumma."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "luotu"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "muokattu"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tallennustilan tyyppi"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "lisätty"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "tiedostonimi"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Tiedostonimi tallennustilassa"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "arkistointitiedostonimi"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Tämänhetkinen arkistointitiedostoimi tallennustilassa"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arkistointisarjanumero"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Dokumentin sijainti fyysisessa dokumenttiarkistossa."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokumentti"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumentit"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "virheenjäljitys"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informaatio"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "varoitus"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "virhe"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kriittinen"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "ryhmä"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "viesti"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "taso"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "loki"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "lokit"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "tallennettu näkymä"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "tallennetut näkymät"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "käyttäjä"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "näytä etusivulla"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "näytä sivupaneelissa"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "lajittelukenttä"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "lajittele käänteisesti"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "otsikko sisältää"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "sisältö sisältää"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN on"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "yhteyshenkilö on"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "dokumenttityyppi on"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "on uusi"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "on tagattu"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "on mikä tahansa tagi"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "luotu ennen"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "luotu jälkeen"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "luotu vuonna"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "luotu kuukautena"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "luomispäivä on"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "lisätty ennen"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "lisätty jälkeen"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "muokattu ennen"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "muokattu jälkeen"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "ei ole tagia"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "ei ole ASN-numeroa"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "otsikko tai sisältö sisältää"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "fulltext-kysely"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "enemmän kuten tämä"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "sisältää tagit"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "sääntötyyppi"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "arvo"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "suodatussääntö"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "suodatussäännöt"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "aloitettu"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Virheellinen regex-lauseke: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Virheellinen väri."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Tiedostotyyppiä %(type)s ei tueta"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Virheellinen muuttuja havaittu."
 
@@ -444,87 +556,87 @@ msgstr "Salasana"
 msgid "Sign in"
 msgstr "Kirjaudu sisään"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Englanti (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "valkovenäjä"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tšekki"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Tanska"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Saksa"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Englanti (US)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Espanja"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Ranska"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italia"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburg"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Hollanti"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "puola"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "portugali (Brasilia)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "portugali"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "romania"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "venäjä"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovenia"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbia"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "ruotsi"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turkki"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Kiina (yksinkertaistettu)"
 
index 75b58e8845bcb2d4d47b7da3a451b04438329f80..f04e63dba6fd0210a9fc4edfd8e2930d87ea4183 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-07 21:41\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documents"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Un des mots"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Tous les mots"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Concordance exacte"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Expression régulière"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Mot approximatif"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatique"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nom"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "rapprochement"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algorithme de rapprochement"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "est insensible à la casse"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "correspondant"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "correspondants"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "couleur"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "est une étiquette de boîte de réception"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Marque cette étiquette comme étiquette de boîte de réception : ces étiquettes sont affectées à tous les documents nouvellement traités."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "étiquette"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "étiquettes"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "type de document"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "types de document"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "chemin"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "chemin de stockage"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "chemins de stockage"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Non chiffré"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Chiffré avec GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titre"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "contenu"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Les données brutes du document, en format texte uniquement. Ce champ est principalement utilisé pour la recherche."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "type mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "somme de contrôle"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "La somme de contrôle du document original."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "somme de contrôle de l'archive"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "La somme de contrôle du document archivé."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "créé le"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modifié"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "forme d'enregistrement :"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "date d'ajout"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nom du fichier"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nom du fichier courant en base de données"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nom de fichier de l'archive"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nom du fichier d'archive courant en base de données"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "numéro de série de l'archive"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Le classement de ce document dans votre archive de documents physiques."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "document"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documents"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "débogage"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informations"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "avertissement"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "erreur"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "critique"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "groupe"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "message"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "niveau"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "journal"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "journaux"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "vue enregistrée"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "vues enregistrées"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "utilisateur"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "montrer sur le tableau de bord"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "montrer dans la barre latérale"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "champ de tri"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "tri inverse"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "le titre contient"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "le contenu contient"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "le NSA est"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "le correspondant est"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "le type de document est"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "est dans la boîte de réception"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "porte l'étiquette"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "porte l'une des étiquettes"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "créé avant"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "créé après"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "l'année de création est"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "le mois de création est"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "le jour de création est"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "ajouté avant"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "ajouté après"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modifié avant"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modifié après"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "ne porte pas d'étiquette"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "ne porte pas de NSA"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "le titre ou le contenu contient"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "recherche en texte intégral"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "documents relatifs"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "porte une étiquette parmi"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "type de règle"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valeur"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "règle de filtrage"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "règles de filtrage"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "démarré"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Expression régulière incorrecte : %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Couleur incorrecte."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Type de fichier %(type)s non pris en charge"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Variable non valide détectée."
 
@@ -444,87 +556,87 @@ msgstr "Mot de passe"
 msgid "Sign in"
 msgstr "S'identifier"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Anglais (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Biélorusse"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tchèque"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danois"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Allemand"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Anglais (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Espagnol"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Français"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italien"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxembourgeois"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Néerlandais"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polonais"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugais (Brésil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugais"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Roumain"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russe"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovène"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbe"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Suédois"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turc"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Chinois simplifié"
 
index 4e72bc6040afd6325fb291b6aa6354fc6ff809f6..8f23c554fab0e3d368caac79e01acbe39358b963 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:06\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Hebrew\n"
 "Language: he_IL\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "מסמכים"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "מילה כלשהי"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "כל המילים"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "התאמה מדוייקת"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "ביטוי רגולרי"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "מילה מעורפלת"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "אוטומטי"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "שם"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "התאמה"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "אלגוריתם התאמה"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "אינו רגיש"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "מכותב"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "מכותבים"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "צבע"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "תגית דואר נכנס"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "מסמן תגית זו כתגית דואר נכנס: כל המסמכים החדשים שהתקבלו יתויגו עם תגית דואר נכנס."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "תגית"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "תגיות"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "סוג מסמך"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "סוגי מסמך"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "נתיב"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "נתיב אכסון"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "נתיבי אכסון"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "לא מוצפן"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "הוצפן באמצעות GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "כותרת"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "תוכן"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "הנתונים הגולמיים של המסמך, המכילים טקסט בלבד. שדה זה משמש בעיקר לצורך חיפוש."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "סוג mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "מחרוזת בדיקה"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "מחרוזת בדיקה של המסמך המקורי."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "מחרוזת בדיקה לארכיון"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "מחרוזת הבדיקה למסמך בארכיון."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "נוצר"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "נערך לאחרונה"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "סוג אחסון"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "התווסף"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "שם קובץ"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "שם קובץ נוכחי באחסון"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "שם קובץ בארכיון"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "שם קובץ ארכיוני נוכחי באחסון"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "מספר סידורי בארכיון"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "מיקומו של מסמך זה בארכיון המסמכים הפיזי שלך."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "מסמך"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "מסמכים"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "ניפוי שגיאות"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "מידע"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "אזהרה"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "שגיאה"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "קריטי"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "קבוצה"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "הודעה"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "רמה"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "יומן רישום"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "יומני רישום"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "תצוגה שמורה"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "תצוגות שמורות"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "משתמש"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "הצג בדשבורד"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "הצג בסרגל צידי"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "שדה המיון"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "מיין הפוך"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "כותרת מכילה"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "תוכן מכיל"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "מס\"ד הוא"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "מכותב הוא"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "סוג מסמך הוא"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "בתיבה הנכנסת"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ישנו תיוג"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ישנו כל תיוג"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "נוצר לפני"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "נוצר לאחר"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "נוצר בשנת"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "נוצר בחודש"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "נוצר ביום"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "הוסף לפני"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "הוסף אחרי"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "נערך לפני"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "נערך אחרי"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "אינו כולל את התיוג"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "אינו בעל מס\"ד"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "כותרת או תוכן מכילים"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "שאילתת טקסט מלא"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "עוד כמו זה"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "מכיל תגים ב-"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "סוג כלל"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "ערך"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "חוק סינון"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "חוקי סינון"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "ביטוי רגולרי בלתי חוקי: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "צבע לא חוקי."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "סוג קובץ %(type)s לא נתמך"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "משתנה לא חוקי זוהה."
 
@@ -444,87 +556,87 @@ msgstr "סיסמה"
 msgid "Sign in"
 msgstr "התחבר"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "אנגלית (ארה\"ב)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "בלרוסית"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "צ'כית"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "דנית"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "גרמנית"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "אנגלית (בריטניה)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "ספרדית"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "צרפתית"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "איטלקית"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "לוקסמבורגית"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "הולנדית"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "פולנית"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "פורטוגזית (ברזיל)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "פורטוגזית"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "רומנית"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "רוסית"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "סלובנית"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "סרבית"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "שוודית"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "טורקית"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "סינית מופשטת"
 
index d5b34f4e9e961bdccee11773453f8f694db21774..8e484555b8fe415d49085629fbe8a6265d53fbdd 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-09 12:27\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
 "Last-Translator: \n"
 "Language-Team: Croatian\n"
 "Language: hr_HR\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenti"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Bilo koja riječ"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Sve riječi"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Točno podudaranje"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Uobičajeni izraz"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Nejasna riječ"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatski"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "ime"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "podudarati"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritam podudaranja"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "ne razlikuje velika i mala slova"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "dopisnik"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "dopisnici"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "boja"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "oznaka ulazne pošte (inbox)"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Označava ovu oznaku kao oznaku ulazne pošte (inbox): Svi novopotrošeni dokumenti bit će označeni oznakama ulazne pošte (inbox)."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "oznaka"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "oznake"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "vrsta dokumenta"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "vrste dokumenta"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "putanja"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "putanja pohrane"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "putanje pohrane"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Nekriptirano"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Enkriptirano s GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "naslov"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "sadržaj"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Neobrađeni tekstualni podaci dokumenta. Ovo se polje koristi prvenstveno za pretraživanje."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "vrste mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrolni zbroj"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrolni zbroj originalnog dokumenta."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arhivski kontrolni zbroj"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrolni zbroj arhiviranog dokumenta."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "stvoreno"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificiran"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "vrsta pohrane"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "dodano"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "naziv datoteke"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Trenutni naziv pohranjene datoteke"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "naziv arhivirane datoteke"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Trenutni naziv arhivirane pohranjene datoteke"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arhivirani serijski broj"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Položaj ovog dokumenta u vašoj fizičkoj arhivi dokumenata."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenti"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "otklanjanje pogrešaka"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informacije"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "upozorenje"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "greška"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritično"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupa"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "poruka"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "razina"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "zapisnik"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "zapisnici"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "spremljen prikaz"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "spremljeni prikazi"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "korisnik"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "prikaži na nadzornoj ploči"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "prikaži u bočnoj traci"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sortiraj polje"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "obrnuto sortiranje"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "naslov sadrži"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "sadržaj sadrži"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN je"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "dopisnik je"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "vrsta dokumenta je"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "nalazi se u ulaznoj pošti"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ima oznaku"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ima bilo kakvu oznaku"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "stvoreni prije"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "stvoreno poslije"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "godina stvaranja je"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "mjesec stvaranja je"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dan stvaranja je"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "dodano prije"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "dodano poslije"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificirano prije"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificirano poslije"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "ne posjeduje oznaku"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "ne posjeduje ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "naziv ili sadržaj sadrži"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "upit za cijeli tekst"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "više poput ovog"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "sadrži oznake"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "vrsta pravila"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "vrijednost"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "pravilo filtera"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "pravila filtera"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "započeto"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Nevažeći regularni izraz: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Nevažeća boja."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Vrsta datoteke %(type)s nije podržana"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Otkrivena je nevaljana vrsta datoteke."
 
@@ -444,87 +556,87 @@ msgstr "Lozinka"
 msgid "Sign in"
 msgstr "Prijava"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engleski (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Bjeloruski"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Češki"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danski"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Njemački"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engleski (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Španjolski"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francuski"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Talijanski"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luksemburški"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Nizozemski"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Poljski"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugalski (Brazil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugalski"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumunjski"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ruski"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovenski"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Srpski"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Švedski"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turski"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Pojednostavljeni kineski"
 
index c827d96f0a0591f64bed2e06c0711fb4f247c391..92c0790a5a967943ed0e580b3f1ec36dcba07acc 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 11:24\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-12 10:50\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documenti"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Qualsiasi parola"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Tutte le parole"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Corrispondenza esatta"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Espressione regolare"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Parole fuzzy"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatico"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nome"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "corrispondenza"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritmo di corrispondenza"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "non distingue maiuscole e minuscole"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "corrispondente"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "corrispondenti"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "colore"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "è tag di arrivo"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati verranno taggati con questo tag."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "tag"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "tag"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tipo di documento"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipi di documento"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "percorso"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "percorso di archiviazione"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "percorsi di archiviazione"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Non criptato"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Criptato con GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titolo"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "contenuto"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "I dati grezzi o solo testo del documento. Questo campo è usato principalmente per la ricerca."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "tipo mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "checksum"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Il checksum del documento originale."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "checksum dell'archivio"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Il checksum del documento archiviato."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "creato il"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificato il"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tipo di storage"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "aggiunto il"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nome del file"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nome del file corrente nello storage"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "Nome file in archivio"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Il nome del file nell'archiviazione"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "nome file originale"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Il nome originale del file quando è stato caricato"
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "numero seriale dell'archivio"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Posizione di questo documento all'interno dell'archivio fisico."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "documento"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documenti"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "debug"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informazione"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "avvertimento"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "errore"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "critico"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "gruppo"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "messaggio"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "livello"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "logs"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "log"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "vista salvata"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "viste salvate"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "utente"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "mostra sul cruscotto"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "mostra nella barra laterale"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "campo di ordinamento"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "ordine invertito"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "il titolo contiene"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "il contenuto contiene"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN è"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "la corrispondenza è"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "il tipo di documento è"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "è in arrivo"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ha etichetta"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ha qualsiasi etichetta"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "creato prima del"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "creato dopo il"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "l'anno di creazione è"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "il mese di creazione è"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "il giorno di creazione è"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "aggiunto prima del"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "aggiunto dopo il"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificato prima del"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificato dopo"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "non ha tag"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "non ha ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "il titolo o il contenuto contiene"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "query fulltext"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "altro come questo"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "ha tag in"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN maggiore di"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN minore di"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "il percorso di archiviazione è"
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tipo di regola"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valore"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "regola filtro"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "regole filtro"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "avviato"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID Attività"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "commento"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "commenti"
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Espressione regolare non valida: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Colore non valido."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Il tipo di file %(type)s non è supportato"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Variabile non valida."
 
@@ -444,87 +556,87 @@ msgstr "Password"
 msgid "Sign in"
 msgstr "Accedi"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Inglese (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Bielorusso"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Ceco"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danese"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Tedesco"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Inglese (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spagnolo"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francese"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiano"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Lussemburghese"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Olandese"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polacco"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portoghese (Brasile)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portoghese"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumeno"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russo"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Sloveno"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbo"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Svedese"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turco"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Cinese semplificato"
 
index d9d85b76795a7cd493a69fb8cf51b812372185e3..e7c1b22343d4c3ba82bda945bc4d8a30eb0d3e5c 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
 "Last-Translator: \n"
 "Language-Team: Luxembourgish\n"
 "Language: lb_LU\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenter"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Iergendee Wuert"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "All d'Wierder"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Exakten Treffer"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regulären Ausdrock"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Ongenaut Wuert"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatesch"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "Numm"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "Zouweisungsmuster"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "Zouweisungsalgorithmus"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "Grouss-/Klengschreiwung ignoréieren"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "Korrespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "Korrespondenten"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "Faarf"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "Postaganks-Etikett"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Dës Etikett als Postaganks-Etikett markéieren: All nei importéiert Dokumenter kréien ëmmer dës Etikett zougewisen."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "Etikett"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "Etiketten"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "Dokumententyp"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "Dokumententypen"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "Pfad"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "Späicherpfad"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "Späicherpfaden"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Onverschlësselt"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Verschlësselt mat GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "Titel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "Inhalt"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "De réien Textinhalt vum Dokument. Dëst Feld gëtt primär fir d'Sich benotzt."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "MIME-Typ"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "Préifzomm"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "D'Préifzomm vum Original-Dokument."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "Archiv-Préifzomm"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "D'Préifzomm vum archivéierten Dokument."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "erstallt"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "verännert"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "Späichertyp"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "derbäigesat"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "Fichiersnumm"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Aktuellen Dateinumm am Späicher"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "Archiv-Dateinumm"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Aktuellen Dateinumm am Archiv"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "Archiv-Seriennummer"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "D'Positioun vun dësem Dokument am physeschen Dokumentenarchiv."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "Dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "Dokumenter"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "Fehlersiich"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "Informatioun"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "Warnung"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "Feeler"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritesch"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "Grupp"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "Message"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "Niveau"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "Protokoll"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "Protokoller"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "Gespäichert Usiicht"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "Gespäichert Usiichten"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "Benotzer"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "Op der Startsäit uweisen"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "An der Säiteleescht uweisen"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "Zortéierfeld"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "ëmgedréint zortéieren"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "Titel enthält"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "Inhalt enthält"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN ass"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "Korrespondent ass"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "Dokumententyp ass"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "ass am Postagank"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "huet Etikett"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "huet iergendeng Etikett"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "erstallt virun"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "erstallt no"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "Erstellungsjoer ass"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "Erstellungsmount ass"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "Erstellungsdag ass"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "dobäigesat virun"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "dobäigesat no"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "verännert virun"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "verännert no"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "huet dës Etikett net"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "huet keng ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "Titel oder Inhalt enthalen"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "Volltextsich"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "ähnlech Dokumenter"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "huet Etiketten an"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "Reegeltyp"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "Wäert"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "Filterreegel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "Filterreegelen"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ongëltege regulären Ausdrock: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ongëlteg Faarf."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Fichierstyp %(type)s net ënnerstëtzt"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Ongëlteg Zeechen detektéiert."
 
@@ -444,87 +556,87 @@ msgstr "Passwuert"
 msgid "Sign in"
 msgstr "Umellen"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Englesch (USA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Belarusesch"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tschechesch"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dänesch"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Däitsch"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Englesch (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spuenesch"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Franséisch"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italienesch"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Lëtzebuergesch"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Hollännesch"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polnesch"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugisesch (Brasilien)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugisesch"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumänesch"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russesch"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slowenesch"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbesch"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Schwedesch"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Tierkesch"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Chinesesch (Vereinfacht)"
 
index db1047e5bdd86924bebc9e41f8427216d8c95edb..4cf2fb4a58e29edf7f9428c3186b7da7f99af47d 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-27 09:51\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
 "Last-Translator: \n"
 "Language-Team: Dutch\n"
 "Language: nl_NL\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documenten"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Elk woord"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Alle woorden"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Exacte overeenkomst"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Reguliere expressie"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Gelijkaardig woord"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatisch"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "naam"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "Overeenkomst"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "Algoritme voor het bepalen van de overeenkomst"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "is niet hoofdlettergevoelig"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "correspondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "correspondenten"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "Kleur"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "is \"Postvak in\"-label"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Markeert dit label als een \"Postvak in\"-label: alle nieuw verwerkte documenten krijgen de \"Postvak in\"-labels."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "label"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "labels"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "documenttype"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "documenttypen"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "pad"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "opslag pad"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "opslag paden"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Niet versleuteld"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Versleuteld met GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "inhoud"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk gebruikt om te zoeken."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mimetype"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "checksum"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "De checksum van het oorspronkelijke document."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "archief checksum"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "De checksum van het gearchiveerde document."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "aangemaakt"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "gewijzigd"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "type opslag"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "toegevoegd"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "bestandsnaam"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Huidige bestandsnaam in opslag"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "Bestandsnaam in archief"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Huidige bestandsnaam in archief"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "serienummer in archief"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "De positie van dit document in je fysieke documentenarchief."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "document"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documenten"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "debug"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informatie"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "waarschuwing"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "fout"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritisch"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "groep"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "bericht"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "niveau"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "bericht"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "berichten"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "opgeslagen view"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "opgeslagen views"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "gebruiker"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "weergeven op dashboard"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "weergeven in zijbalk"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sorteerveld"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "omgekeerd sorteren"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "titel bevat"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "inhoud bevat"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN is"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "correspondent is"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "documenttype is"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "zit in \"Postvak in\""
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "heeft label"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "heeft één van de labels"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "aangemaakt voor"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "aangemaakt na"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "aangemaakt jaar is"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "aangemaakte maand is"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "aangemaakte dag is"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "toegevoegd voor"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "toegevoegd na"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "gewijzigd voor"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "gewijzigd na"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "heeft geen label"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "heeft geen ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "titel of inhoud bevat"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "inhoud doorzoeken"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "meer zoals dit"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "heeft tags in"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "type regel"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "waarde"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filterregel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filterregels"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "gestart"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ongeldige reguliere expressie: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ongeldig kleur."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Bestandstype %(type)s niet ondersteund"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Ongeldige variabele ontdekt."
 
@@ -444,87 +556,87 @@ msgstr "Wachtwoord"
 msgid "Sign in"
 msgstr "Aanmelden"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engels (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Wit-Russisch"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tsjechisch"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Deens"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Duits"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engels (Brits)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spaans"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Frans"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiaans"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburgs"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Nederlands"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Pools"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugees (Brazilië)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugees"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Roemeens"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russisch"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Sloveens"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Servisch"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Zweeds"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turks"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Chinees (vereenvoudigd)"
 
index d5a1a2b09631c013ad2a783939c0049ff2a20917..edd2901c24893179cda243913ebba7eb92d8dd33 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 08:59\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-29 08:29\n"
 "Last-Translator: \n"
 "Language-Team: Norwegian\n"
 "Language: no_NO\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenter"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Hvilket som helst ord"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Alle ord"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Eksakt match"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regulære uttrykk"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Fuzzy word"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatisk"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "navn"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "treff"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "samsvarende algoritme"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "er insensitiv"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korrespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korrespondenter"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "farge"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "er innboks tag"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Markerer dette merket som en innboks-tag: Alle nybrukte dokumenter vil bli merket med innboks-tagger."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "tagg"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "tagger"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "dokument type"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "dokumenttyper"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "sti"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "lagringssti"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "lagringsveier"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Ukryptert"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Kryptert med GNU Personvernvakt"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "tittel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "innhold"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Raw, tekstbare data fra dokumentet. Dette feltet brukes primært for søking."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime type"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "sjekksum"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Sjekksummen av det opprinnelige dokumentet."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arkiv sjekksum"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Sjekksummen av det arkiverte dokumentet."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "opprettet"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "endret"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "lagringstype"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "lagt til"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "filnavn"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Gjeldende filnavn i lagring"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "arkiver filnavn"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Gjeldende arkiv filnavn i lagring"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "opprinnelig filnavn"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Det opprinnelige filnavnet da den ble lastet opp"
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arkiver serienummer"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Dokumentets posisjon i ditt fysiske dokumentarkiv."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenter"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "feilsøk"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informasjon"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "advarsel"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "feil"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritisk"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "gruppe"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "melding"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivå"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "Logg"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logger"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "lagret visning"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "lagrede visninger"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "bruker"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "vis på dashbordet"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "vis i sidestolpen"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sorter felt"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "sorter på baksiden"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "tittelen inneholder"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "innholdet inneholder"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN er"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "tilsvarendet er"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "dokumenttype er"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "er i innboksen"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "har tagg"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "har en tag"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "opprettet før"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "opprettet etter"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "opprettet år er"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "opprettet måned er"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "opprettet dag er"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "lagt til før"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "lagt til etter"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "endret før"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "endret etter"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "har ikke tagg"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "har ikke ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "tittel eller innhold inneholder"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "full tekst spørring"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mer som dette"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "har tags i"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN større enn"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN mindre enn"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "lagringssti er"
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "Type regel"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "verdi"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtrer regel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtrer regler"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "startet"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "Oppgave ID"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery ID for oppgaven som ble kjørt"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Bekreftet"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Hvis oppgaven bekreftes via frontend eller API"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Oppgavenavn"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Navn på filen som oppgaven ble kjørt for"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Navn på Oppgaven som ble kjørt"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ugyldig regulært uttrykk: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ugyldig farge."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Filtype %(type)s støttes ikke"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Ugyldig variabel oppdaget."
 
@@ -444,87 +556,87 @@ msgstr "Passord"
 msgid "Sign in"
 msgstr "Logg inn"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engelsk (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Hviterussisk"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tsjekkisk"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dansk"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Tysk"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engelsk (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spansk"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Fransk"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiensk"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxembourgsk"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Nederlandsk"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polsk"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugisisk (Brasil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugisisk"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumensk"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russisk"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovenian"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbisk"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Svensk"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Tyrkisk"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Kinesisk forenklet"
 
index 29ca7559678efb85d315e6b00337668dfe0871d8..4167a48ec5c9559222006e89f4eb35dcf79fea9e 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-17 11:20\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-28 16:30\n"
 "Last-Translator: \n"
 "Language-Team: Polish\n"
 "Language: pl_PL\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenty"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Dowolne słowo"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Wszystkie słowa"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Dokładne dopasowanie"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Wyrażenie regularne"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Dopasowanie rozmyte"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatyczny"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nazwa"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "dopasowanie"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algorytm dopasowania"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "bez rozróżniania wielkości znaków"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korespondenci"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "kolor"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "jest tagiem skrzynki odbiorczej"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Zaznacza ten tag jako tag skrzynki odbiorczej: Wszystkie nowo przetworzone dokumenty będą oznaczone tagami skrzynki odbiorczej."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "znacznik"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "tagi"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "typ dokumentu"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "typy dokumentów"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "ścieżka"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "ścieżka przechowywania"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "ścieżki składowania"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Niezaszyfrowane"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Zaszyfrowane przy użyciu GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "tytuł"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "zawartość"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Surowe, tekstowe dane dokumentu. To pole jest używane głównie do wyszukiwania."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime type"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "suma kontrolna"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Suma kontrolna oryginalnego dokumentu."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "suma kontrolna archiwum"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Suma kontrolna zarchiwizowanego dokumentu."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "utworzono"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "zmodyfikowano"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "typ przechowywania"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "dodano"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nazwa pliku"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Aktualna nazwa pliku w pamięci"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nazwa pliku archiwum"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Aktualna nazwa pliku archiwum w pamięci"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "oryginalna nazwa pliku"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Oryginalna nazwa pliku, gdy został przesłany"
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "numer seryjny archiwum"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Pozycja tego dokumentu w archiwum dokumentów fizycznych."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenty"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "debugowanie"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informacja"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "ostrzeżenie"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "błąd"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "krytyczne"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupa"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "wiadomość"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "poziom"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "log"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logi"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "zapisany widok"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "zapisane widoki"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "użytkownik"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "pokaż na stronie głównej"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "pokaż na pasku bocznym"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "pole sortowania"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "sortuj malejąco"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "tytuł zawiera"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "zawartość zawiera"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "numer archiwum jest"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "korespondentem jest"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "typ dokumentu jest"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "jest w skrzynce odbiorczej"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ma tag"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ma dowolny tag"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "utworzony przed"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "utworzony po"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "rok utworzenia to"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "miesiąc utworzenia to"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dzień utworzenia to"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "dodany przed"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "dodany po"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "zmodyfikowany przed"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "zmodyfikowany po"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "nie ma tagu"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "nie ma numeru archiwum"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "tytuł lub zawartość zawiera"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "zapytanie pełnotekstowe"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "podobne dokumenty"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "ma znaczniki w"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN większy niż"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN mniejszy niż"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "ścieżką przechowywania jest"
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "typ reguły"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "wartość"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "reguła filtrowania"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "reguły filtrowania"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "start"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID zadania"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "ID Celery dla zadania, które zostało uruchomione"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Potwierdzono"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Jeśli zadanie jest potwierdzone przez frontend lub API"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Nazwa zadania"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Stan zadania"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Dane zwrócone przez zadanie"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Komentarz do dokumentu"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "komentarz"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "komentarze"
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Nieprawidłowe wyrażenie regularne: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Nieprawidłowy kolor."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Typ pliku %(type)s nie jest obsługiwany"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Wykryto nieprawidłową zmienną."
 
@@ -444,87 +556,87 @@ msgstr "Hasło"
 msgid "Sign in"
 msgstr "Zaloguj się"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Angielski (USA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Białoruski"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Czeski"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Duński"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Niemiecki"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Angielski (Wielka Brytania)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Hiszpański"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francuski"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Włoski"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luksemburski"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Holenderski"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polski"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugalski (Brazylia)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugalski"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumuński"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Rosyjski"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Słoweński"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Serbski"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Szwedzki"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turecki"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Chiński uproszczony"
 
index 4690bd84d5c6707fcdb6c59b5d8c911a55a3de57..1be9d6460291e1daeaf6deb997d2f96cbbb09f43 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documentos"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Qualquer palavra"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Todas as palavras"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Detecção exata"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Expressão regular"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Palavra difusa (fuzzy)"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automático"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nome"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "detecção"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritmo de detecção"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "diferencia maiúsculas de minúsculas"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "correspondente"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "correspondentes"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "cor"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "é etiqueta caixa de entrada"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Marca essa etiqueta como caixa de entrada: Todos os novos documentos consumidos terão as etiquetas de caixa de entrada."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etiqueta"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiquetas"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tipo de documento"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipos de documento"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Não encriptado"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Encriptado com GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "título"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "conteúdo"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "O conteúdo de texto bruto do documento. Esse campo é usado principalmente para busca."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "tipo mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "some de verificação"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "A soma de verificação original do documento."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "Soma de verificação de arquivamento."
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "A soma de verificação do documento arquivado."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "criado"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificado"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tipo de armazenamento"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "adicionado"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nome do arquivo"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nome do arquivo atual armazenado"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nome do arquivo para arquivamento"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nome do arquivo para arquivamento armazenado"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "número de sério de arquivamento"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "A posição deste documento no seu arquivamento físico."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "documento"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documentos"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "debug"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informação"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "aviso"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "erro"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "crítico"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupo"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "mensagem"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nível"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "log"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logs"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "visualização"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "visualizações"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "usuário"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "exibir no painel de controle"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "exibir no painel lateral"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "ordenar campo"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "odernar reverso"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "título contém"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "conteúdo contém"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "NSA é"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "correspondente é"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "tipo de documento é"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "é caixa de entrada"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "contém etiqueta"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "contém qualquer etiqueta"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "criado antes de"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "criado depois de"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "ano de criação é"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "mês de criação é"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dia de criação é"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "adicionado antes de"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "adicionado depois de"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificado antes de"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificado depois de"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "não tem etiqueta"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "não tem NSA"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "título ou conteúdo contém"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "pesquisa de texto completo"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mais como este"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "contém etiqueta em"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tipo de regra"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valor"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "regra de filtragem"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "regras de filtragem"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Expressão regular inválida: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Cor inválida."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Tipo de arquivo %(type)s não suportado"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -444,87 +556,87 @@ msgstr "Senha"
 msgid "Sign in"
 msgstr "Entrar"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Inglês (EUA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Tcheco"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dinamarquês"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Alemão"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Inglês (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Espanhol"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francês"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiano"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburguês"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Holandês"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polonês"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Português (Brasil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Português"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Romeno"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russo"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Sueco"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr ""
 
index f805a7e6ba411f6b88680d16895b99ddb78d3ba2..4f3b0e9e381ed680f9f0cea0c4dc572269e61871 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese\n"
 "Language: pt_PT\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documentos"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Qualquer palavra"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Todas as palavras"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Detecção exata"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Expressão regular"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Palavra difusa (fuzzy)"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automático"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nome"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "correspondência"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritmo correspondente"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "é insensível"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "correspondente"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "correspondentes"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "cor"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "é etiqueta de novo"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Marca esta etiqueta como uma etiqueta de entrada. Todos os documentos recentemente consumidos serão etiquetados com a etiqueta de entrada."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etiqueta"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiquetas"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tipo de documento"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipos de documento"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Não encriptado"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Encriptado com GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "título"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "conteúdo"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Os dados de texto, em cru, do documento. Este campo é utilizado principalmente para pesquisar."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "tipo mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "soma de verificação"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "A soma de verificação do documento original."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arquivar soma de verificação"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "A soma de verificação do documento arquivado."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "criado"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificado"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tipo de armazenamento"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "adicionado"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nome de ficheiro"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nome do arquivo atual no armazenamento"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nome do ficheiro de arquivo"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nome do arquivo atual em no armazenamento"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "numero de série de arquivo"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "A posição do documento no seu arquivo físico de documentos."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "documento"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documentos"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "depurar"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informação"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "aviso"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "erro"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "crítico"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupo"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "mensagem"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nível"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "registo"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "registos"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "vista guardada"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "vistas guardadas"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "utilizador"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "exibir no painel de controlo"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "mostrar na navegação lateral"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "ordenar campo"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "ordenar inversamente"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "o título contém"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "o conteúdo contém"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "O NSA é"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "o correspondente é"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "o tipo de documento é"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "está na entrada"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "tem etiqueta"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "tem qualquer etiqueta"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "criado antes"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "criado depois"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "ano criada é"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "mês criado é"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dia criado é"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "adicionada antes"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "adicionado depois de"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificado antes de"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificado depois de"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "não tem etiqueta"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "não possui um NSA"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "título ou conteúdo contém"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "consulta de texto completo"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mais como este"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "tem etiquetas em"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tipo de regra"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valor"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "regra de filtragem"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "regras de filtragem"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Expressão regular inválida: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Cor invalida."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Tipo de arquivo %(type)s não suportado"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -444,87 +556,87 @@ msgstr "Palavra-passe"
 msgid "Sign in"
 msgstr "Iniciar sessão"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Inglês (EUA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Checo"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Dinamarquês"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Deutsch"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Inglês (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Espanhol"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Français"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiano"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburguês"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Nederlandse"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polaco"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Português (Brasil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Português"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Romeno"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Russo"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Sueco"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr ""
 
index c1297a8b3545bf0175d2f9d729c821b7f83d12be..017ac914441671371f14a7ad170967ee6c8692fb 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
 "Last-Translator: \n"
 "Language-Team: Romanian\n"
 "Language: ro_RO\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Documente"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Orice cuvânt"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Toate cuvintele"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Potrivire exactă"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Expresie regulată"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Mod neatent"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automat"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "nume"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "potrivire"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritm de potrivire"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "nu ține cont de majuscule"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "corespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "corespondenți"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "culoare"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "este etichetă inbox"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Marchează aceasta eticheta ca etichetă inbox: Toate documentele nou consumate primesc aceasta eticheta."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etichetă"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etichete"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tip de document"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipuri de document"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Necriptat"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Criptat cu GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titlu"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "conținut"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Textul brut al documentului. Acest camp este folosit in principal pentru căutare."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "tip MIME"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "sumă de control"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Suma de control a documentului original."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "suma de control a arhivei"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Suma de control a documentului arhivat."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "creat"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "modificat"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tip de stocare"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "adăugat"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "nume fișier"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Numele curent al fișierului stocat"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "nume fișier arhiva"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Numele curent al arhivei stocate"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "număr serial in arhiva"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Poziția acestui document in arhiva fizica."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "document"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "documente"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "depanare"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informații"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "avertizare"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "eroare"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "critic"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grup"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "mesaj"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivel"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "jurnal"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "jurnale"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "vizualizare"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "vizualizări"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "utilizator"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "afișează pe tabloul de bord"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "afișează in bara laterala"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sortează camp"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "sortează invers"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "titlul conține"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "conținutul conține"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "Avizul prealabil de expediție este"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "corespondentul este"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "tipul documentului este"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "este în inbox"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "are eticheta"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "are orice eticheta"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "creat înainte de"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "creat după"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "anul creării este"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "luna creării este"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "ziua creării este"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "adăugat înainte de"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "adăugat după"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "modificat înainte de"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "modificat după"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "nu are etichetă"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "nu are aviz prealabil de expediție"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "titlul sau conținutul conține"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "query fulltext"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mai multe ca aceasta"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "are etichete în"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tip de regula"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "valoare"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "regulă de filtrare"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "reguli de filtrare"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Expresie regulată invalida: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Culoare invalidă."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Tip de fișier %(type)s nesuportat"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -444,87 +556,87 @@ msgstr "Parolă"
 msgid "Sign in"
 msgstr "Conectare"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engleză (Americană)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Cehă"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Daneză"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Germană"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engleză (Britanică)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spaniolă"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Franceză"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italiană"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luxemburgheză"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Olandeză"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Poloneză"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugheză (Brazilia)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugheză"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Română"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Rusă"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Suedeză"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr ""
 
index d5b2009712cfecf10af8d2bd475c9ce30ac22423..3134f11696ae0a2cfc17fbc12b0ee2def22e6539 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 16:12\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Russian\n"
 "Language: ru_RU\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Документы"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Любые слова"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Все слова"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Точное соответствие"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Регулярное выражение"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "\"Нечёткий\" режим"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Автоматически"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "имя"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "соответствие"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "алгоритм сопоставления"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "без учёта регистра"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "корреспондент"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "корреспонденты"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "цвет"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "это входящий тег"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Отметить этот тег как «Входящий»: все вновь добавленные документы будут помечены тегами «Входящие»."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "тег"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "теги"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "тип документа"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "типы документов"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "путь"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "путь к хранилищу"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "пути хранения"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "не зашифровано"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Зашифровано с помощью GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "заголовок"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "содержимое"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Это поле используется в основном для поиска."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "тип Mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "контрольная сумма"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Контрольная сумма оригинального документа."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "контрольная сумма архива"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Контрольная сумма архивного документа."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "создано"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "изменено"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "тип хранилища"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "добавлено"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "имя файла"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Текущее имя файла в хранилище"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "имя файла архива"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Текущее имя файла архива в хранилище"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "архивный номер (АН)"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Позиция этого документа в вашем физическом архиве документов."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "документ"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "документы"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "отладка"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "информация"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "предупреждение"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "ошибка"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "критическая"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "группа"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "сообщение"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "уровень"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "журнал"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "логи"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "сохранённое представление"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "сохраненные представления"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "пользователь"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "показать на панели"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "показать в боковой панели"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "Поле сортировки"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "обратная сортировка"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "заголовок содержит"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "содержимое содержит"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "АН"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "корреспондент"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "тип документа"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "во входящих"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "есть тег"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "есть любой тег"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "создан до"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "создан после"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "год создания"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "месяц создания"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "день создания"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "добавлен до"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "добавлен после"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "изменен до"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "изменен после"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "не имеет тега"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "не имеет архивного номера"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "Название или содержимое включает"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "полнотекстовый запрос"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "больше похожих"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "имеет теги в"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "Тип правила"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "значение"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "Правило фильтрации"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "правила фильтрации"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "запущено"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "неверное регулярное выражение: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Неверный цвет."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Тип файла %(type)s не поддерживается"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Обнаружена неверная переменная."
 
@@ -444,87 +556,87 @@ msgstr "Пароль"
 msgid "Sign in"
 msgstr "Вход"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Английский (США)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Белорусский"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Чешский"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Датский"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Немецкий"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Английский (Великобритании)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Испанский"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Французский"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Итальянский"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Люксембургский"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Датский"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Польский"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Португальский (Бразилия)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Португальский"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Румынский"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Русский"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Словенский"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Сербский"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Шведский"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Турецкий"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Китайский упрощенный"
 
index f1e408407f56ce46201a9af72a6e1a4acb7757a8..2320afcd0846c44640f7d968021435b216559d27 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-25 12:46\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Slovenian\n"
 "Language: sl_SI\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenti"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Katerakoli beseda"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Vse besede"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Točno ujemanje"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regularni izraz"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Fuzzy beseda"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Samodejno"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "ime"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "ujemanje"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritem ujemanja"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "brez razlikovanje velikosti črk"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "dopisnik"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "dopisniki"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "barva"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "je vhodna oznaka"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Označi to oznako kot vhodno oznako: vsi na novo obdelani dokumenti bodo označeni z vhodno oznako."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "oznaka"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "oznake"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "vrsta dokumenta"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "vrste dokumentov"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "pot"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "pot do shrambe"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "poti do shrambe"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Nešifrirano"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Šifrirano z GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "naslov"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "vsebina"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Neobdelani besedilni podatki dokumenta. To polje se uporablja predvsem za iskanje."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "vrsta mime"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrolna vsota"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrolna vsota izvirnega dokumenta."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arhivska kontrolna vsota"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrolna vsota arhiviranega dokumenta."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "ustvarjeno"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "spremenjeno"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "vrsta shrambe"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "dodano"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "ime datoteke"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Trenutno ime dokumenta v shrambi"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "ime arhivske datoteke"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Trenutno ime arhivske datoteke v shrambi"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arhivska serijska številka"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Položaj tega dokumenta v vašem fizičnem arhivu dokumentov."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenti"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "razhroščevanje"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informacija"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "opozorilo"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "napaka"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritično"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "skupina"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "sporočilo"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivo"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "dnevnik"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "dnevniki"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "shranjeni pogled"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "shranjeni pogledi"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "uporabnik"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "prikaži na pregledni plošči"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "prikaži v stranski vrstici"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "polje za razvrščanje"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "razvrsti obratno"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "naslov vsebuje"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "vsebina vsebuje"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN je"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "dopisnik je"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "vrsta dokumenta je"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "je v prejetem"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ima oznako"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ima katero koli oznako"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "ustvarjeno pred"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "ustvarjeno po"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "leto nastanka"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "mesec nastanka"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dan nastanka"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "dodano pred"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "dodano po"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "spremenjeno pred"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "spremenjeno po"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "nima oznake"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "nima ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "naslov ali vsebina vsebujeta"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "polnobesedilna poizvedba"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "več takih"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "ima oznake"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "vrsta pravila"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "vrednost"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtriraj pravilo"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtriraj pravila"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "zagnano"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Neveljaven splošen izraz: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Napačna barva."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Vrsta datoteke %(type)s ni podprta"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Zaznani neveljavni znaki."
 
@@ -444,87 +556,87 @@ msgstr "Geslo"
 msgid "Sign in"
 msgstr "Prijava"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Angleščina (ZDA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Beloruščina"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Češčina"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danščina"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Nemščina"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Angleščina (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Španščina"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francoščina"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italijanščina"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luksemburški"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Nizozemščina"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Poljščina"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugalščina (Brazilija)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugalščina"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Romunščina"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ruščina"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovenščina"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Srbščina"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Švedščina"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turščina"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Poenostavljena kitajščina"
 
index ca01c8d1eebcaafa46f67512e9d6316d3ce697d9..c7c5415de26cb849058b8c355810e8f94a617e2c 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-04 23:55\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-12 13:08\n"
 "Last-Translator: \n"
 "Language-Team: Serbian (Latin)\n"
 "Language: sr_CS\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokumenta"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Bilo koja reč"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Sve reči"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Tačno podudaranje"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Regularni izraz"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Fuzzy reč"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatski"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "naziv"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "poklapanje"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "algoritam podudaranja"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "bez razlike veliko/malo slovo"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korespodent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korespodenti"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "boja"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "je oznaka prijemnog sandučeta"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Označava ovu oznaku kao oznaku prijemnog sandučeta (inbox): Svi novoobrađeni dokumenti će biti označeni oznakama prijemnog sandučeta (inbox)."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "oznaka"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "oznake"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "tip dokumenta"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "tipovi dokumenta"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "putanja"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "putanja skladišta"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "putanja skladišta"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Nešifrovano"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Šifrovano pomoću GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "naslov"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "sadržaj"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Neobrađeni tekstualni podaci dokumenta. Ovo se polje koristi prvenstveno za pretraživanje."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime tip"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrolna suma"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrolna suma originalnog dokumenta."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arhivni checksum"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrolna suma arhivnog dokumenta."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "kreirano"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "izmenjeno"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "tip skladišta"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "dodato"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "naziv fajla"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Trenutni naziv sačuvane datoteke"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "naziv fajla arhive"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Trenutni naziv arhivirane sačuvane datoteke"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "originalno ime fajla"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Originalni naziv fajla kada je otpremljen"
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arhivski serijski broj"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Položaj ovog dokumenta u vašoj fizičkoj arhivi dokumenata."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokumenta"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "okloni greške"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "informacija"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "upozorenje"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "grеška"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritično"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupa"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "poruka"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivo"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "log"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "logovi"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "sačuvani prikaz"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "sačuvani prikazi"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "korisnik"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "prikaži na kontrolnoj tabli"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "prikaži u bočnoj traci"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "polje za sortiranje"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "obrnuto sortiranje"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "naslov sadrži"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "sadržaj sadrži"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN je"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "korespodent je"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "tip dokumenta je"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "je u prijemnog sandučetu"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "ima oznaku"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "ima bilo koju oznaku"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "kreiran pre"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "kreiran posle"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "godina kreiranja je"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "mesec kreiranja je"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "dan kreiranja je"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "dodat pre"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "dodat posle"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "izmenjen pre"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "izmenjen posle"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "nema oznaku"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "nema ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "naslov i sadržaj sadrži"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "upit za ceo tekst"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "više ovakvih"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "ima oznake u"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN veći od"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN manji od"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "putanja skladišta je"
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "tip pravila"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "vrednost"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filter pravilo"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filter pravila"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "pokrenuto"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID Zadatka"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery ID za zadatak koji je pokrenut"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Potvrđeno"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Ako je zadatak potvrđen preko frontenda ili API-ja"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Ime zadatka"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Naziv fajla za koji je zadatak pokrenut"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Naziv zadatka koji je bio pokrenut"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr "Pozicioni argumenti zadatka"
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr "JSON prikaz pozicionih argumenata koji se koriste sa zadatkom"
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr "Argumenti zadatka"
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr "JSON prikaz imenovanih argumenata koji se koriste sa zadatkom"
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Stanje zadatka"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr "Trenutno stanje zadatka koji se izvršava"
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr "Datum i vreme kreiranja"
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr "Polje datuma i vremena kada je rezultat zadatka kreiran u UTC"
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr "Datum i vreme početka"
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr "Polje datuma i vremena kada je zadatak pokrenut u UTC"
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr "Datum i vreme završetka"
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr "Polje datuma i vremena kada je zadatak završen u UTC"
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr "Podaci o rezultatu"
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Podaci koje vraća zadatak"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Komentar za dokument"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "komentar"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "komentari"
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Nevažeći regularni izraz: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Nevažeća boja."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Vrsta datoteke %(type)s nije podržana"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Otkrivena je nevažeća promenljiva."
 
@@ -444,87 +556,87 @@ msgstr "Lozinka"
 msgid "Sign in"
 msgstr "Prijavite se"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engleski (US)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Beloruski"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Češki"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danski"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Nemački"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engleski (UK)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Španski"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Francuski"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italijanski"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Luksemburški"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Holandski"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Poljski"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugalski (Brazil)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugalski"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumunski"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ruski"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovenački"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Srpski"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Švedski"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Turski"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Kineski pojednostavljen"
 
index 4ab73df084b0eda4b7f4428b8eb1edaeb06b1cb6..32c79fec7dddb4aead6060835285023f27fda5dc 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Dokument"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Valfritt ord"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Alla ord"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Exakt matchning"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Reguljära uttryck"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Ungefärligt ord"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Automatisk"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "namn"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "träff"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "matchande algoritm"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "är ej skiftlägeskänsligt"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "korrespondent"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "korrespondenter"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "färg"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "är inkorgsetikett"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Markerar denna etikett som en inkorgsetikett: Alla nyligen konsumerade dokument kommer att märkas med inkorgsetiketter."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etikett"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiketter"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "dokumenttyp"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "dokumenttyper"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Okrypterad"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "Krypterad med GNU Privacy Guard"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "titel"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "innehåll"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Dokumentets obearbetade textdata. Detta fält används främst för sökning."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "MIME-typ"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "kontrollsumma"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Kontrollsumman för originaldokumentet."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arkivera kontrollsumma"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Kontrollsumman för det arkiverade dokumentet."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "skapad"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "ändrad"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "lagringstyp"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "tillagd"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "filnamn"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Nuvarande filnamn i lagringsutrymmet"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "arkivfilnamn"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Nuvarande arkivfilnamn i lagringsutrymmet"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "serienummer (arkivering)"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Placeringen av detta dokument i ditt fysiska dokumentarkiv."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "dokument"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "dokument"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "felsök"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr ""
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "varning"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "fel"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritisk"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grupp"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "meddelande"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "nivå"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "logg"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "loggar"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "sparad vy"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "sparade vyer"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "användare"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "visa på kontrollpanelen"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "visa i sidofältet"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "sortera fält"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "sortera omvänt"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "titel innehåller"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "innehåll innehåller"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN är"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "korrespondent är"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "dokumenttyp är"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "är i inkorgen"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "har etikett"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "har någon etikett"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "skapad före"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "skapad efter"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "skapat år är"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "skapad månad är"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "skapad dag är"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "tillagd före"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "tillagd efter"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "ändrad före"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "ändrad efter"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "har inte etikett"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "har inte ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "titel eller innehåll innehåller"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "fulltextfråga"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "mer som detta"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr ""
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "regeltyp"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "värde"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtrera regel"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtrera regler"
 
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
 msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Ogiltigt reguljärt uttryck: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Ogiltig färg."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Filtypen %(type)s stöds inte"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -444,87 +556,87 @@ msgstr "Lösenord"
 msgid "Sign in"
 msgstr "Logga in"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "Engelska (USA)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr ""
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr ""
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Tyska"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "Engelska (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "Spanska"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Franska"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "Italienska"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr ""
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Holländska"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polska"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portugisiska (Brasilien)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portugisiska"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Rumänska"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Ryska"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "Svenska"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr ""
 
index 78b4d6f700cb14ab47484ee77ee6a84377936e07..6e972d7fc0887dc9ba84b8b66fa575093250c159 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-01 19:02\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Turkish\n"
 "Language: tr_TR\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "Belgeler"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "Herhangi bir kelime"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "Tüm Kelimeler"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "Tam eşleşme"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "Düzenli ifade"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "Fuzzy Kelime"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "Otomatik"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "ad"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "eşleme"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "eşleştirme algoritması"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "duyarsızdır"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "muhabir"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "muhabirler"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "renk"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "gelen kutu etiketidir"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "Bu etiketi, gelen kutusu etiketi olarak işaretle: Yeni aktarılan tüm dokümanlar gelen kutusu etiketi ile etiketlendirileceklerdir."
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "etiket"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "etiketler"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "belge türü"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "belge türleri"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr ""
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "Şifresiz"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "GNU Gizlilik Koruması ile şifrelendirilmiştir"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "başlık"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "içerik"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "Belgenin ham, yalnızca metin verileri. Bu alan öncelikle arama için kullanılır."
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime türü"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "sağlama toplamı"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "Orjinal belgenin sağlama toplamı."
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "arşiv sağlama toplamı"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "Arşivlenen belgenin sağlama toplamı."
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "oluşturuldu"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "değiştirilmiş"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "depolama türü"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "eklendi"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "dosya adı"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "Depolamadaki geçerli dosya adı"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "arşiv dosya adı"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "Depolamadaki geçerli arşiv dosya adı"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "arşiv seri numarası"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "Bu belgenin fiziksel belge arşivinizdeki posizyonu."
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "belge"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "belgeler"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "hata ayıklama"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "bilgi"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "uyarı"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "hata"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "kritik"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "grup"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "mesaj"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "seviye"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "günlük"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "günlükler"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "kaydedilen görünüm"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "kaydedilen görünümler"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "kullanıcı"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "kontrol paneli'nde göster"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "kenar çubuğunda göster"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "alanı sıralama"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "tersine sırala"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "başlık içerir"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "içerik içerir"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN ise"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "muhabir ise"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "belge türü ise"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "gelen kutusunun içerisindedir"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "etiketine sahip"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "herhangi bir etiketine sahip"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "bu tarihten önce oluşturuldu"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "bu tarihten sonra oluşturuldu"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "oluşturma yili ise"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "oluşturma ayı ise"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "oluşturma günü ise"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "bu tarihten önce eklendi"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "bu tarihten sonra eklendi"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "bu tarihten önce değiştirldi"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "bu tarihten sonra değiştirldi"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "etikete sahip değil"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "ASN'e sahip değil"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "başlik veya içerik içerir"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "tam metin sorgulama"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "buna benzer daha"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "içerisinde etiketine sahip"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "kural türü"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "değer"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "filtreleme kuralı"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "filtreleme kuralları"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "başladı"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "Hatalı Düzenli İfade: %(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "Geçersiz renk."
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "Dosya türü %(type)s desteklenmiyor"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "Geçersiz değişken algılandı."
 
@@ -444,87 +556,87 @@ msgstr "Parola"
 msgid "Sign in"
 msgstr "Oturum aç"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "İngilizce (Birleşik Devletler)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "Belarusça"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "Çekçe"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "Danca"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "Almanca"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "İngilizce (GB)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "İspanyolca"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "Fransızca"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "İtalyanca"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "Lüksemburgca"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "Hollandaca"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "Polonyaca"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "Portekizce (Brezilya)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "Portekizce"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "Romence"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "Rusça"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "Slovakça"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "Sırpça"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "İsveççe"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "Türkçe"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "Basitleştirilmiş Çince"
 
index 2a76b6cf37e622a3fbfb154e8ddbe79ad9f7a2df..67fc56899f59b197a6c863438b10884e7c7501e6 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-15 04:02\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
@@ -21,378 +21,490 @@ msgstr ""
 msgid "Documents"
 msgstr "文档"
 
-#: documents/models.py:29
+#: documents/models.py:32
 msgid "Any word"
 msgstr "任意单词"
 
-#: documents/models.py:30
+#: documents/models.py:33
 msgid "All words"
 msgstr "所有单词"
 
-#: documents/models.py:31
+#: documents/models.py:34
 msgid "Exact match"
 msgstr "精确匹配"
 
-#: documents/models.py:32
+#: documents/models.py:35
 msgid "Regular expression"
 msgstr "正则表达式"
 
-#: documents/models.py:33
+#: documents/models.py:36
 msgid "Fuzzy word"
 msgstr "模糊单词"
 
-#: documents/models.py:34
+#: documents/models.py:37
 msgid "Automatic"
 msgstr "自动"
 
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
 #: paperless_mail/models.py:80
 msgid "name"
 msgstr "名称"
 
-#: documents/models.py:39
+#: documents/models.py:42
 msgid "match"
 msgstr "匹配"
 
-#: documents/models.py:42
+#: documents/models.py:45
 msgid "matching algorithm"
 msgstr "匹配算法"
 
-#: documents/models.py:47
+#: documents/models.py:50
 msgid "is insensitive"
 msgstr "忽略大小写"
 
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
 msgid "correspondent"
 msgstr "联系人"
 
-#: documents/models.py:61
+#: documents/models.py:64
 msgid "correspondents"
 msgstr "联系人"
 
-#: documents/models.py:66
+#: documents/models.py:69
 msgid "color"
 msgstr "颜色"
 
-#: documents/models.py:69
+#: documents/models.py:72
 msgid "is inbox tag"
 msgstr "收件箱标签"
 
-#: documents/models.py:72
+#: documents/models.py:75
 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
 msgstr "将此标签标记为收件箱标签:所有新处理的文档将被标记为收件箱标签。"
 
-#: documents/models.py:78
+#: documents/models.py:81
 msgid "tag"
 msgstr "标签"
 
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
 msgid "tags"
 msgstr "标签"
 
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
 msgid "document type"
 msgstr "文档类型"
 
-#: documents/models.py:85
+#: documents/models.py:88
 msgid "document types"
 msgstr "文档类型"
 
-#: documents/models.py:90
+#: documents/models.py:93
 msgid "path"
 msgstr "路径"
 
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
 msgid "storage path"
 msgstr "保存路径"
 
-#: documents/models.py:97
+#: documents/models.py:100
 msgid "storage paths"
 msgstr "保存路径"
 
-#: documents/models.py:105
+#: documents/models.py:108
 msgid "Unencrypted"
 msgstr "未加密"
 
-#: documents/models.py:106
+#: documents/models.py:109
 msgid "Encrypted with GNU Privacy Guard"
 msgstr "使用 GNU 隐私防护(GPG)加密"
 
-#: documents/models.py:127
+#: documents/models.py:130
 msgid "title"
 msgstr "标题"
 
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
 msgid "content"
 msgstr "内容"
 
-#: documents/models.py:142
+#: documents/models.py:145
 msgid "The raw, text-only data of the document. This field is primarily used for searching."
 msgstr "文档的原始、纯文本的数据。这个字段主要用于搜索。"
 
-#: documents/models.py:147
+#: documents/models.py:150
 msgid "mime type"
 msgstr "mime 类型"
 
-#: documents/models.py:157
+#: documents/models.py:160
 msgid "checksum"
 msgstr "校验和"
 
-#: documents/models.py:161
+#: documents/models.py:164
 msgid "The checksum of the original document."
 msgstr "原始文档的校验和。"
 
-#: documents/models.py:165
+#: documents/models.py:168
 msgid "archive checksum"
 msgstr "存档校验和"
 
-#: documents/models.py:170
+#: documents/models.py:173
 msgid "The checksum of the archived document."
 msgstr "已归档文档的校验和。"
 
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
 msgid "created"
 msgstr "已创建"
 
-#: documents/models.py:176
+#: documents/models.py:179
 msgid "modified"
 msgstr "已修改"
 
-#: documents/models.py:183
+#: documents/models.py:186
 msgid "storage type"
 msgstr "存储类型"
 
-#: documents/models.py:191
+#: documents/models.py:194
 msgid "added"
 msgstr "已添加"
 
-#: documents/models.py:198
+#: documents/models.py:201
 msgid "filename"
 msgstr "文件名"
 
-#: documents/models.py:204
+#: documents/models.py:207
 msgid "Current filename in storage"
 msgstr "当前存储中的文件名"
 
-#: documents/models.py:208
+#: documents/models.py:211
 msgid "archive filename"
 msgstr "归档文件名"
 
-#: documents/models.py:214
+#: documents/models.py:217
 msgid "Current archive filename in storage"
 msgstr "当前存储中的归档文件名"
 
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
 msgid "archive serial number"
 msgstr "归档序列号"
 
-#: documents/models.py:224
+#: documents/models.py:237
 msgid "The position of this document in your physical document archive."
 msgstr "此文档在您的物理文档归档中的位置。"
 
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
 msgid "document"
 msgstr "文档"
 
-#: documents/models.py:231
+#: documents/models.py:244
 msgid "documents"
 msgstr "文档"
 
-#: documents/models.py:318
+#: documents/models.py:331
 msgid "debug"
 msgstr "调试"
 
-#: documents/models.py:319
+#: documents/models.py:332
 msgid "information"
 msgstr "信息"
 
-#: documents/models.py:320
+#: documents/models.py:333
 msgid "warning"
 msgstr "警告"
 
-#: documents/models.py:321
+#: documents/models.py:334
 msgid "error"
 msgstr "错误"
 
-#: documents/models.py:322
+#: documents/models.py:335
 msgid "critical"
 msgstr "严重"
 
-#: documents/models.py:325
+#: documents/models.py:338
 msgid "group"
 msgstr "用户组"
 
-#: documents/models.py:327
+#: documents/models.py:340
 msgid "message"
 msgstr "消息"
 
-#: documents/models.py:330
+#: documents/models.py:343
 msgid "level"
 msgstr "等级"
 
-#: documents/models.py:339
+#: documents/models.py:352
 msgid "log"
 msgstr "日志"
 
-#: documents/models.py:340
+#: documents/models.py:353
 msgid "logs"
 msgstr "日志"
 
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
 msgid "saved view"
 msgstr "保存的视图"
 
-#: documents/models.py:351
+#: documents/models.py:364
 msgid "saved views"
 msgstr "保存的视图"
 
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
 msgid "user"
 msgstr "用户"
 
-#: documents/models.py:357
+#: documents/models.py:370
 msgid "show on dashboard"
 msgstr "在仪表盘显示"
 
-#: documents/models.py:360
+#: documents/models.py:373
 msgid "show in sidebar"
 msgstr "在侧边栏显示"
 
-#: documents/models.py:364
+#: documents/models.py:377
 msgid "sort field"
 msgstr "排序字段"
 
-#: documents/models.py:369
+#: documents/models.py:382
 msgid "sort reverse"
 msgstr "反向排序"
 
-#: documents/models.py:374
+#: documents/models.py:387
 msgid "title contains"
 msgstr "标题包含"
 
-#: documents/models.py:375
+#: documents/models.py:388
 msgid "content contains"
 msgstr "内容包含"
 
-#: documents/models.py:376
+#: documents/models.py:389
 msgid "ASN is"
 msgstr "ASN 为"
 
-#: documents/models.py:377
+#: documents/models.py:390
 msgid "correspondent is"
 msgstr "联系人是"
 
-#: documents/models.py:378
+#: documents/models.py:391
 msgid "document type is"
 msgstr "文档类型是"
 
-#: documents/models.py:379
+#: documents/models.py:392
 msgid "is in inbox"
 msgstr "在收件箱中"
 
-#: documents/models.py:380
+#: documents/models.py:393
 msgid "has tag"
 msgstr "有标签"
 
-#: documents/models.py:381
+#: documents/models.py:394
 msgid "has any tag"
 msgstr "有任意标签"
 
-#: documents/models.py:382
+#: documents/models.py:395
 msgid "created before"
 msgstr "在此时间之前创建"
 
-#: documents/models.py:383
+#: documents/models.py:396
 msgid "created after"
 msgstr "在此时间之后创建"
 
-#: documents/models.py:384
+#: documents/models.py:397
 msgid "created year is"
 msgstr "创建年份是"
 
-#: documents/models.py:385
+#: documents/models.py:398
 msgid "created month is"
 msgstr "创建月份是"
 
-#: documents/models.py:386
+#: documents/models.py:399
 msgid "created day is"
 msgstr "创建日期是"
 
-#: documents/models.py:387
+#: documents/models.py:400
 msgid "added before"
 msgstr "添加早于"
 
-#: documents/models.py:388
+#: documents/models.py:401
 msgid "added after"
 msgstr "添加晚于"
 
-#: documents/models.py:389
+#: documents/models.py:402
 msgid "modified before"
 msgstr "修改早于"
 
-#: documents/models.py:390
+#: documents/models.py:403
 msgid "modified after"
 msgstr "修改晚于"
 
-#: documents/models.py:391
+#: documents/models.py:404
 msgid "does not have tag"
 msgstr "没有标签"
 
-#: documents/models.py:392
+#: documents/models.py:405
 msgid "does not have ASN"
 msgstr "没有 ASN"
 
-#: documents/models.py:393
+#: documents/models.py:406
 msgid "title or content contains"
 msgstr "标题或内容包含"
 
-#: documents/models.py:394
+#: documents/models.py:407
 msgid "fulltext query"
 msgstr "全文检索"
 
-#: documents/models.py:395
+#: documents/models.py:408
 msgid "more like this"
 msgstr "更多类似内容"
 
-#: documents/models.py:396
+#: documents/models.py:409
 msgid "has tags in"
 msgstr "有标签包含于"
 
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
 msgid "rule type"
 msgstr "规则类型"
 
-#: documents/models.py:408
+#: documents/models.py:424
 msgid "value"
 msgstr "值"
 
-#: documents/models.py:411
+#: documents/models.py:427
 msgid "filter rule"
 msgstr "过滤规则"
 
-#: documents/models.py:412
+#: documents/models.py:428
 msgid "filter rules"
 msgstr "过滤规则"
 
-#: documents/models.py:521
-msgid "started"
-msgstr "已开始"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
 
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr "无效的正则表达式:%(error)s"
 
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
 msgid "Invalid color."
 msgstr "无效的颜色"
 
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr "不支持文件类型 %(type)s"
 
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
 msgid "Invalid variable detected."
 msgstr "检测到无效变量。"
 
@@ -444,87 +556,87 @@ msgstr "密码"
 msgid "Sign in"
 msgstr "登录"
 
-#: paperless/settings.py:339
+#: paperless/settings.py:378
 msgid "English (US)"
 msgstr "英语(美国)"
 
-#: paperless/settings.py:340
+#: paperless/settings.py:379
 msgid "Belarusian"
 msgstr "白俄罗斯语"
 
-#: paperless/settings.py:341
+#: paperless/settings.py:380
 msgid "Czech"
 msgstr "捷克语"
 
-#: paperless/settings.py:342
+#: paperless/settings.py:381
 msgid "Danish"
 msgstr "丹麦语"
 
-#: paperless/settings.py:343
+#: paperless/settings.py:382
 msgid "German"
 msgstr "德语"
 
-#: paperless/settings.py:344
+#: paperless/settings.py:383
 msgid "English (GB)"
 msgstr "英语(英国)"
 
-#: paperless/settings.py:345
+#: paperless/settings.py:384
 msgid "Spanish"
 msgstr "西班牙语"
 
-#: paperless/settings.py:346
+#: paperless/settings.py:385
 msgid "French"
 msgstr "法语"
 
-#: paperless/settings.py:347
+#: paperless/settings.py:386
 msgid "Italian"
 msgstr "意大利语"
 
-#: paperless/settings.py:348
+#: paperless/settings.py:387
 msgid "Luxembourgish"
 msgstr "卢森堡语"
 
-#: paperless/settings.py:349
+#: paperless/settings.py:388
 msgid "Dutch"
 msgstr "荷兰语"
 
-#: paperless/settings.py:350
+#: paperless/settings.py:389
 msgid "Polish"
 msgstr "波兰语"
 
-#: paperless/settings.py:351
+#: paperless/settings.py:390
 msgid "Portuguese (Brazil)"
 msgstr "葡萄牙语 (巴西)"
 
-#: paperless/settings.py:352
+#: paperless/settings.py:391
 msgid "Portuguese"
 msgstr "葡萄牙语"
 
-#: paperless/settings.py:353
+#: paperless/settings.py:392
 msgid "Romanian"
 msgstr "罗马尼亚语"
 
-#: paperless/settings.py:354
+#: paperless/settings.py:393
 msgid "Russian"
 msgstr "俄语"
 
-#: paperless/settings.py:355
+#: paperless/settings.py:394
 msgid "Slovenian"
 msgstr "斯洛语尼亚语"
 
-#: paperless/settings.py:356
+#: paperless/settings.py:395
 msgid "Serbian"
 msgstr "塞尔维亚语"
 
-#: paperless/settings.py:357
+#: paperless/settings.py:396
 msgid "Swedish"
 msgstr "瑞典语"
 
-#: paperless/settings.py:358
+#: paperless/settings.py:397
 msgid "Turkish"
 msgstr "土耳其语"
 
-#: paperless/settings.py:359
+#: paperless/settings.py:398
 msgid "Chinese Simplified"
 msgstr "简体中文"
 
index 456e15745562eb9563fcb3831c301373143331fb..c11e434892982938a350009a1a8fe430e4b78adc 100644 (file)
@@ -8,6 +8,7 @@ import tempfile
 from typing import Final
 from typing import Optional
 from typing import Set
+from typing import Tuple
 from urllib.parse import urlparse
 
 from celery.schedules import crontab
@@ -65,6 +66,44 @@ def __get_path(key: str, default: str) -> str:
     return os.path.abspath(os.path.normpath(os.environ.get(key, default)))
 
 
+def _parse_redis_url(env_redis: Optional[str]) -> Tuple[str]:
+    """
+    Gets the Redis information from the environment or a default and handles
+    converting from incompatible django_channels and celery formats.
+
+    Returns a tuple of (celery_url, channels_url)
+    """
+
+    # Not set, return a compatible default
+    if env_redis is None:
+        return ("redis://localhost:6379", "redis://localhost:6379")
+
+    if "unix" in env_redis.lower():
+        # channels_redis socket format, looks like:
+        # "unix:///path/to/redis.sock"
+        _, path = env_redis.split(":")
+        # Optionally setting a db number
+        if "?db=" in env_redis:
+            path, number = path.split("?db=")
+            return (f"redis+socket:{path}?virtual_host={number}", env_redis)
+        else:
+            return (f"redis+socket:{path}", env_redis)
+
+    elif "+socket" in env_redis.lower():
+        # celery socket style, looks like:
+        # "redis+socket:///path/to/redis.sock"
+        _, path = env_redis.split(":")
+        if "?virtual_host=" in env_redis:
+            # Virtual host (aka db number)
+            path, number = path.split("?virtual_host=")
+            return (env_redis, f"unix:{path}?db={number}")
+        else:
+            return (env_redis, f"unix:{path}")
+
+    # Not a socket
+    return (env_redis, env_redis)
+
+
 # NEVER RUN WITH DEBUG IN PRODUCTION.
 DEBUG = __get_boolean("PAPERLESS_DEBUG", "NO")
 
@@ -182,7 +221,9 @@ ASGI_APPLICATION = "paperless.asgi.application"
 STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", BASE_URL + "static/")
 WHITENOISE_STATIC_PREFIX = "/static/"
 
-_REDIS_URL = os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")
+_CELERY_REDIS_URL, _CHANNELS_REDIS_URL = _parse_redis_url(
+    os.getenv("PAPERLESS_REDIS", None),
+)
 
 # TODO: what is this used for?
 TEMPLATES = [
@@ -205,7 +246,7 @@ CHANNEL_LAYERS = {
     "default": {
         "BACKEND": "channels_redis.core.RedisChannelLayer",
         "CONFIG": {
-            "hosts": [_REDIS_URL],
+            "hosts": [_CHANNELS_REDIS_URL],
             "capacity": 2000,  # default 100
             "expiry": 15,  # default 60
         },
@@ -468,7 +509,7 @@ TASK_WORKERS = __get_int("PAPERLESS_TASK_WORKERS", 1)
 
 WORKER_TIMEOUT: Final[int] = __get_int("PAPERLESS_WORKER_TIMEOUT", 1800)
 
-CELERY_BROKER_URL = _REDIS_URL
+CELERY_BROKER_URL = _CELERY_REDIS_URL
 CELERY_TIMEZONE = TIME_ZONE
 
 CELERY_WORKER_HIJACK_ROOT_LOGGER = False
@@ -513,7 +554,7 @@ CELERY_BEAT_SCHEDULE_FILENAME = os.path.join(DATA_DIR, "celerybeat-schedule.db")
 CACHES = {
     "default": {
         "BACKEND": "django.core.cache.backends.redis.RedisCache",
-        "LOCATION": _REDIS_URL,
+        "LOCATION": _CHANNELS_REDIS_URL,
     },
 }
 
index fed4079e2c86381b978a9bcd668112e1d8df71c3..71926542d685e3da89dc85906c732872fcaa3346 100644 (file)
@@ -3,6 +3,7 @@ from unittest import mock
 from unittest import TestCase
 
 from paperless.settings import _parse_ignore_dates
+from paperless.settings import _parse_redis_url
 from paperless.settings import default_threads_per_worker
 
 
@@ -82,3 +83,59 @@ class TestIgnoreDateParsing(TestCase):
                 self.assertGreaterEqual(default_threads, 1)
 
                 self.assertLessEqual(default_workers * default_threads, i)
+
+    def test_redis_socket_parsing(self):
+        """
+        GIVEN:
+            - Various Redis connection URI formats
+        WHEN:
+            - The URI is parsed
+        THEN:
+            - Socket based URIs are translated
+            - Non-socket URIs are unchanged
+            - None provided uses default
+        """
+
+        for input, expected in [
+            # Nothing is set
+            (None, ("redis://localhost:6379", "redis://localhost:6379")),
+            # celery style
+            (
+                "redis+socket:///run/redis/redis.sock",
+                (
+                    "redis+socket:///run/redis/redis.sock",
+                    "unix:///run/redis/redis.sock",
+                ),
+            ),
+            # redis-py / channels-redis style
+            (
+                "unix:///run/redis/redis.sock",
+                (
+                    "redis+socket:///run/redis/redis.sock",
+                    "unix:///run/redis/redis.sock",
+                ),
+            ),
+            # celery style with db
+            (
+                "redis+socket:///run/redis/redis.sock?virtual_host=5",
+                (
+                    "redis+socket:///run/redis/redis.sock?virtual_host=5",
+                    "unix:///run/redis/redis.sock?db=5",
+                ),
+            ),
+            # redis-py / channels-redis style with db
+            (
+                "unix:///run/redis/redis.sock?db=10",
+                (
+                    "redis+socket:///run/redis/redis.sock?virtual_host=10",
+                    "unix:///run/redis/redis.sock?db=10",
+                ),
+            ),
+            # Just a host with a port
+            (
+                "redis://myredishost:6379",
+                ("redis://myredishost:6379", "redis://myredishost:6379"),
+            ),
+        ]:
+            result = _parse_redis_url(input)
+            self.assertTupleEqual(expected, result)
index a57573e7a344ece175bc67a695d549b1a36c3c35..a7372072884b77b5754e2c34b0009444227bdabf 100644 (file)
@@ -29,6 +29,8 @@ from paperless.consumers import StatusConsumer
 from paperless.views import FaviconView
 from paperless.views import GroupViewSet
 from paperless.views import UserViewSet
+from paperless_mail.views import MailAccountViewSet
+from paperless_mail.views import MailRuleViewSet
 from rest_framework.authtoken import views
 from rest_framework.routers import DefaultRouter
 
@@ -43,6 +45,8 @@ api_router.register(r"storage_paths", StoragePathViewSet)
 api_router.register(r"tasks", TasksViewSet, basename="tasks")
 api_router.register(r"users", UserViewSet, basename="users")
 api_router.register(r"groups", GroupViewSet, basename="groups")
+api_router.register(r"mail_accounts", MailAccountViewSet)
+api_router.register(r"mail_rules", MailRuleViewSet)
 
 
 urlpatterns = [
index d196c358db2fa07d5fe56807100ce467497a2ea9..4778e14a68ef275eb484e2c744816826e73a877d 100644 (file)
@@ -1,7 +1,7 @@
 from typing import Final
 from typing import Tuple
 
-__version__: Final[Tuple[int, int, int]] = (1, 9, 2)
+__version__: Final[Tuple[int, int, int]] = (1, 10, 2)
 # Version string like X.Y.Z
 __full_version_str__: Final[str] = ".".join(map(str, __version__))
 # Version string like X.Y
index 3b488b153410653eb6790b709aecc03e67a3c008..ce5341e4e64a8efb4182ec48d8f18ea750524c44 100644 (file)
@@ -56,6 +56,7 @@ class MailRuleAdmin(admin.ModelAdmin):
                     "filter_body",
                     "filter_attachment_filename",
                     "maximum_age",
+                    "consumption_scope",
                     "attachment_type",
                 ),
             },
@@ -65,8 +66,8 @@ class MailRuleAdmin(admin.ModelAdmin):
             {
                 "description": _(
                     "The action applied to the mail. This action is only "
-                    "performed when documents were consumed from the mail. "
-                    "Mails without attachments will remain entirely untouched.",
+                    "performed when the mail body or attachments were "
+                    "consumed from the mail.",
                 ),
                 "fields": ("action", "action_parameter"),
             },
index 1c5d656e087be469b4082620a759bf916ba0e816..719400e76f9d8e35dfdc19fedea06076f5503b86 100644 (file)
@@ -1,8 +1,17 @@
 from django.apps import AppConfig
+from django.conf import settings
 from django.utils.translation import gettext_lazy as _
+from paperless_mail.signals import mail_consumer_declaration
 
 
 class PaperlessMailConfig(AppConfig):
     name = "paperless_mail"
 
     verbose_name = _("Paperless mail")
+
+    def ready(self):
+        from documents.signals import document_consumer_declaration
+
+        if settings.TIKA_ENABLED:
+            document_consumer_declaration.connect(mail_consumer_declaration)
+        AppConfig.ready(self)
index 145aebec4c859981a11317d16a65e4ae8f4b3e0f..9ac03db6e44aa119b7f2f4172cda5e85a840a421 100644 (file)
@@ -350,9 +350,16 @@ class MailAccountHandler(LoggingMixin):
 
         return total_processed_files
 
-    def handle_message(self, message, rule) -> int:
-        if not message.attachments:
-            return 0
+    def handle_message(self, message, rule: MailRule) -> int:
+        processed_elements = 0
+
+        # Skip Message handling when only attachments are to be processed but
+        # message doesn't have any.
+        if (
+            not message.attachments
+            and rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY
+        ):
+            return processed_elements
 
         self.log(
             "debug",
@@ -365,8 +372,41 @@ class MailAccountHandler(LoggingMixin):
         tag_ids = [tag.id for tag in rule.assign_tags.all()]
         doc_type = rule.assign_document_type
 
-        processed_attachments = 0
+        if (
+            rule.consumption_scope == MailRule.ConsumptionScope.EML_ONLY
+            or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING
+        ):
+            processed_elements += self.process_eml(
+                message,
+                rule,
+                correspondent,
+                tag_ids,
+                doc_type,
+            )
+
+        if (
+            rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY
+            or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING
+        ):
+            processed_elements += self.process_attachments(
+                message,
+                rule,
+                correspondent,
+                tag_ids,
+                doc_type,
+            )
+
+        return processed_elements
 
+    def process_attachments(
+        self,
+        message: MailMessage,
+        rule: MailRule,
+        correspondent,
+        tag_ids,
+        doc_type,
+    ):
+        processed_attachments = 0
         for att in message.attachments:
 
             if (
@@ -436,5 +476,59 @@ class MailAccountHandler(LoggingMixin):
                     f"since guessed mime type {mime_type} is not supported "
                     f"by paperless",
                 )
-
         return processed_attachments
+
+    def process_eml(
+        self,
+        message: MailMessage,
+        rule: MailRule,
+        correspondent,
+        tag_ids,
+        doc_type,
+    ):
+        os.makedirs(settings.SCRATCH_DIR, exist_ok=True)
+        _, temp_filename = tempfile.mkstemp(
+            prefix="paperless-mail-",
+            dir=settings.SCRATCH_DIR,
+            suffix=".eml",
+        )
+        with open(temp_filename, "wb") as f:
+            # Move "From"-header to beginning of file
+            # TODO: This ugly workaround is needed because the parser is
+            #   chosen only by the mime_type detected via magic
+            #   (see documents/consumer.py "mime_type = magic.from_file")
+            #   Unfortunately magic sometimes fails to detect the mime
+            #   type of .eml files correctly as message/rfc822 and instead
+            #   detects text/plain.
+            #   This also effects direct file consumption of .eml files
+            #   which are not treated with this workaround.
+            from_element = None
+            for i, header in enumerate(message.obj._headers):
+                if header[0] == "From":
+                    from_element = i
+            if from_element:
+                new_headers = [message.obj._headers.pop(from_element)]
+                new_headers += message.obj._headers
+                message.obj._headers = new_headers
+
+            f.write(message.obj.as_bytes())
+
+        self.log(
+            "info",
+            f"Rule {rule}: "
+            f"Consuming eml from mail "
+            f"{message.subject} from {message.from_}",
+        )
+
+        consume_file.delay(
+            path=temp_filename,
+            override_filename=pathvalidate.sanitize_filename(
+                message.subject + ".eml",
+            ),
+            override_title=message.subject,
+            override_correspondent_id=correspondent.id if correspondent else None,
+            override_document_type_id=doc_type.id if doc_type else None,
+            override_tag_ids=tag_ids,
+        )
+        processed_elements = 1
+        return processed_elements
diff --git a/src/paperless_mail/migrations/0016_mailrule_consumption_scope.py b/src/paperless_mail/migrations/0016_mailrule_consumption_scope.py
new file mode 100644 (file)
index 0000000..ea54bce
--- /dev/null
@@ -0,0 +1,32 @@
+# Generated by Django 4.0.4 on 2022-07-11 22:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("paperless_mail", "0015_alter_mailrule_action"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="mailrule",
+            name="consumption_scope",
+            field=models.PositiveIntegerField(
+                choices=[
+                    (1, "Only process attachments."),
+                    (
+                        2,
+                        "Process full Mail (with embedded attachments in file) as .eml",
+                    ),
+                    (
+                        3,
+                        "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents",
+                    ),
+                ],
+                default=1,
+                verbose_name="consumption scope",
+            ),
+        ),
+    ]
index 4c0a1a5573af97f4fd67e29d529df94e3e01d95c..a7267cc06bf7088aeacb2d5ccec9046873658a32 100644 (file)
@@ -56,6 +56,14 @@ class MailRule(models.Model):
         verbose_name = _("mail rule")
         verbose_name_plural = _("mail rules")
 
+    class ConsumptionScope(models.IntegerChoices):
+        ATTACHMENTS_ONLY = 1, _("Only process attachments.")
+        EML_ONLY = 2, _("Process full Mail (with embedded attachments in file) as .eml")
+        EVERYTHING = 3, _(
+            "Process full Mail (with embedded attachments in file) as .eml "
+            "+ process attachments as separate documents",
+        )
+
     class AttachmentProcessing(models.IntegerChoices):
         ATTACHMENTS_ONLY = 1, _("Only process attachments.")
         EVERYTHING = 2, _("Process all files, including 'inline' " "attachments.")
@@ -145,6 +153,12 @@ class MailRule(models.Model):
         ),
     )
 
+    consumption_scope = models.PositiveIntegerField(
+        _("consumption scope"),
+        choices=ConsumptionScope.choices,
+        default=ConsumptionScope.ATTACHMENTS_ONLY,
+    )
+
     action = models.PositiveIntegerField(
         _("action"),
         choices=MailAction.choices,
diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py
new file mode 100644 (file)
index 0000000..d50217f
--- /dev/null
@@ -0,0 +1,333 @@
+import os
+import re
+from html import escape
+from io import BytesIO
+from io import StringIO
+
+import requests
+from bleach import clean
+from bleach import linkify
+from django.conf import settings
+from documents.parsers import DocumentParser
+from documents.parsers import make_thumbnail_from_pdf
+from documents.parsers import ParseError
+from humanfriendly import format_size
+from imap_tools import MailMessage
+from tika import parser
+
+
+class MailDocumentParser(DocumentParser):
+    """
+    This parser uses imap_tools to parse .eml files, generates pdf using
+    gotenbergs and sends the html part to a local tika server for text extraction.
+    """
+
+    gotenberg_server = settings.TIKA_GOTENBERG_ENDPOINT
+    tika_server = settings.TIKA_ENDPOINT
+
+    logging_name = "paperless.parsing.mail"
+    _parsed = None
+
+    def get_parsed(self, document_path) -> MailMessage:
+        if not self._parsed:
+            try:
+                with open(document_path, "rb") as eml:
+                    self._parsed = MailMessage.from_bytes(eml.read())
+            except Exception as err:
+                raise ParseError(
+                    f"Could not parse {document_path}: {err}",
+                )
+            if not self._parsed.from_values:
+                self._parsed = None
+                raise ParseError(
+                    f"Could not parse {document_path}: Missing 'from'",
+                )
+
+        return self._parsed
+
+    def get_thumbnail(self, document_path, mime_type, file_name=None):
+        if not self.archive_path:
+            self.archive_path = self.generate_pdf(document_path)
+
+        return make_thumbnail_from_pdf(
+            self.archive_path,
+            self.tempdir,
+            self.logging_group,
+        )
+
+    def extract_metadata(self, document_path, mime_type):
+        result = []
+
+        try:
+            mail = self.get_parsed(document_path)
+        except ParseError as e:
+            self.log(
+                "warning",
+                f"Error while fetching document metadata for " f"{document_path}: {e}",
+            )
+            return result
+
+        for key, value in mail.headers.items():
+            value = ", ".join(i for i in value)
+
+            result.append(
+                {
+                    "namespace": "",
+                    "prefix": "header",
+                    "key": key,
+                    "value": value,
+                },
+            )
+
+        result.append(
+            {
+                "namespace": "",
+                "prefix": "",
+                "key": "attachments",
+                "value": ", ".join(
+                    f"{attachment.filename}"
+                    f"({format_size(attachment.size, binary=True)})"
+                    for attachment in mail.attachments
+                ),
+            },
+        )
+
+        result.append(
+            {
+                "namespace": "",
+                "prefix": "",
+                "key": "date",
+                "value": mail.date.strftime("%Y-%m-%d %H:%M:%S %Z"),
+            },
+        )
+
+        result.sort(key=lambda item: (item["prefix"], item["key"]))
+        return result
+
+    def parse(self, document_path, mime_type, file_name=None):
+        def strip_text(text: str):
+            text = re.sub(r"\s+", " ", text)
+            text = re.sub(r"(\n *)+", "\n", text)
+            return text.strip()
+
+        mail = self.get_parsed(document_path)
+
+        self.text = f"Subject: {mail.subject}\n\n"
+        self.text += f"From: {mail.from_values.full}\n\n"
+        self.text += f"To: {', '.join(address.full for address in mail.to_values)}\n\n"
+        if len(mail.cc_values) >= 1:
+            self.text += (
+                f"CC: {', '.join(address.full for address in mail.cc_values)}\n\n"
+            )
+        if len(mail.bcc_values) >= 1:
+            self.text += (
+                f"BCC: {', '.join(address.full for address in mail.bcc_values)}\n\n"
+            )
+        if len(mail.attachments) >= 1:
+            att = []
+            for a in mail.attachments:
+                att.append(f"{a.filename} ({format_size(a.size, binary=True)})")
+
+            self.text += f"Attachments: {', '.join(att)}\n\n"
+
+        if mail.html != "":
+            self.text += "HTML content: " + strip_text(self.tika_parse(mail.html))
+
+        self.text += f"\n\n{strip_text(mail.text)}"
+
+        self.date = mail.date
+        self.archive_path = self.generate_pdf(document_path)
+
+    def tika_parse(self, html: str):
+        self.log("info", "Sending content to Tika server")
+
+        try:
+            parsed = parser.from_buffer(html, self.tika_server)
+        except Exception as err:
+            raise ParseError(
+                f"Could not parse content with tika server at "
+                f"{self.tika_server}: {err}",
+            )
+        if parsed["content"]:
+            return parsed["content"]
+        else:
+            return ""
+
+    def generate_pdf(self, document_path):
+        pdf_collection = []
+        url_merge = self.gotenberg_server + "/forms/pdfengines/merge"
+        pdf_path = os.path.join(self.tempdir, "merged.pdf")
+        mail = self.get_parsed(document_path)
+
+        pdf_collection.append(("1_mail.pdf", self.generate_pdf_from_mail(mail)))
+
+        if mail.html == "":
+            with open(pdf_path, "wb") as file:
+                file.write(pdf_collection[0][1])
+                file.close()
+            return pdf_path
+        else:
+            pdf_collection.append(
+                (
+                    "2_html.pdf",
+                    self.generate_pdf_from_html(mail.html, mail.attachments),
+                ),
+            )
+
+        files = {}
+        for name, content in pdf_collection:
+            files[name] = (name, BytesIO(content))
+        headers = {}
+        try:
+            response = requests.post(url_merge, files=files, headers=headers)
+            response.raise_for_status()  # ensure we notice bad responses
+        except Exception as err:
+            raise ParseError(f"Error while converting document to PDF: {err}")
+
+        with open(pdf_path, "wb") as file:
+            file.write(response.content)
+            file.close()
+
+        return pdf_path
+
+    @staticmethod
+    def mail_to_html(mail: MailMessage) -> StringIO:
+        data = {}
+
+        def clean_html(text: str):
+            if isinstance(text, list):
+                text = "\n".join([str(e) for e in text])
+            if type(text) != str:
+                text = str(text)
+            text = escape(text)
+            text = clean(text)
+            text = linkify(text, parse_email=True)
+            text = text.replace("\n", "<br>")
+            return text
+
+        data["subject"] = clean_html(mail.subject)
+        if data["subject"] != "":
+            data["subject_label"] = "Subject"
+        data["from"] = clean_html(mail.from_values.full)
+        if data["from"] != "":
+            data["from_label"] = "From"
+        data["to"] = clean_html(", ".join(address.full for address in mail.to_values))
+        if data["to"] != "":
+            data["to_label"] = "To"
+        data["cc"] = clean_html(", ".join(address.full for address in mail.cc_values))
+        if data["cc"] != "":
+            data["cc_label"] = "CC"
+        data["bcc"] = clean_html(", ".join(address.full for address in mail.bcc_values))
+        if data["bcc"] != "":
+            data["bcc_label"] = "BCC"
+
+        att = []
+        for a in mail.attachments:
+            att.append(f"{a.filename} ({format_size(a.size, binary=True)})")
+        data["attachments"] = clean_html(", ".join(att))
+        if data["attachments"] != "":
+            data["attachments_label"] = "Attachments"
+
+        data["date"] = clean_html(mail.date.astimezone().strftime("%Y-%m-%d %H:%M"))
+        data["content"] = clean_html(mail.text.strip())
+
+        html = StringIO()
+
+        from django.template.loader import render_to_string
+
+        rendered = render_to_string("email_msg_template.html", context=data)
+
+        html.write(rendered)
+        html.seek(0)
+
+        return html
+
+    def generate_pdf_from_mail(self, mail):
+
+        url = self.gotenberg_server + "/forms/chromium/convert/html"
+        self.log("info", "Converting mail to PDF")
+
+        css_file = os.path.join(os.path.dirname(__file__), "templates/output.css")
+
+        with open(css_file, "rb") as css_handle:
+
+            files = {
+                "html": ("index.html", self.mail_to_html(mail)),
+                "css": ("output.css", css_handle),
+            }
+            headers = {}
+            data = {
+                "marginTop": "0.1",
+                "marginBottom": "0.1",
+                "marginLeft": "0.1",
+                "marginRight": "0.1",
+                "paperWidth": "8.27",
+                "paperHeight": "11.7",
+                "scale": "1.0",
+            }
+            try:
+                response = requests.post(
+                    url,
+                    files=files,
+                    headers=headers,
+                    data=data,
+                )
+                response.raise_for_status()  # ensure we notice bad responses
+            except Exception as err:
+                raise ParseError(f"Error while converting document to PDF: {err}")
+
+        return response.content
+
+    @staticmethod
+    def transform_inline_html(html, attachments):
+        def clean_html_script(text: str):
+            compiled_open = re.compile(re.escape("<script"), re.IGNORECASE)
+            text = compiled_open.sub("<div hidden ", text)
+
+            compiled_close = re.compile(re.escape("</script"), re.IGNORECASE)
+            text = compiled_close.sub("</div", text)
+            return text
+
+        html_clean = clean_html_script(html)
+        files = []
+
+        for a in attachments:
+            name_cid = "cid:" + a.content_id
+            name_clean = "".join(e for e in name_cid if e.isalnum())
+            files.append((name_clean, BytesIO(a.payload)))
+            html_clean = html_clean.replace(name_cid, name_clean)
+
+        files.append(("index.html", StringIO(html_clean)))
+
+        return files
+
+    def generate_pdf_from_html(self, orig_html, attachments):
+        url = self.gotenberg_server + "/forms/chromium/convert/html"
+        self.log("info", "Converting html to PDF")
+
+        files = {}
+        for name, file in self.transform_inline_html(orig_html, attachments):
+            files[name] = (name, file)
+
+        headers = {}
+        data = {
+            "marginTop": "0.1",
+            "marginBottom": "0.1",
+            "marginLeft": "0.1",
+            "marginRight": "0.1",
+            "paperWidth": "8.27",
+            "paperHeight": "11.7",
+            "scale": "1.0",
+        }
+        try:
+            response = requests.post(
+                url,
+                files=files,
+                headers=headers,
+                data=data,
+            )
+            response.raise_for_status()  # ensure we notice bad responses
+        except Exception as err:
+            raise ParseError(f"Error while converting document to PDF: {err}")
+
+        return response.content
diff --git a/src/paperless_mail/serialisers.py b/src/paperless_mail/serialisers.py
new file mode 100644 (file)
index 0000000..5944656
--- /dev/null
@@ -0,0 +1,110 @@
+from documents.serialisers import CorrespondentField
+from documents.serialisers import DocumentTypeField
+from documents.serialisers import TagsField
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from rest_framework import serializers
+
+
+class ObfuscatedPasswordField(serializers.Field):
+    """
+    Sends *** string instead of password in the clear
+    """
+
+    def to_representation(self, value):
+        return "*" * len(value)
+
+    def to_internal_value(self, data):
+        return data
+
+
+class MailAccountSerializer(serializers.ModelSerializer):
+    password = ObfuscatedPasswordField()
+
+    class Meta:
+        model = MailAccount
+        depth = 1
+        fields = [
+            "id",
+            "name",
+            "imap_server",
+            "imap_port",
+            "imap_security",
+            "username",
+            "password",
+            "character_set",
+        ]
+
+    def update(self, instance, validated_data):
+        if "password" in validated_data:
+            if len(validated_data.get("password").replace("*", "")) == 0:
+                validated_data.pop("password")
+        super().update(instance, validated_data)
+        return instance
+
+    def create(self, validated_data):
+        mail_account = MailAccount.objects.create(**validated_data)
+        return mail_account
+
+
+class AccountField(serializers.PrimaryKeyRelatedField):
+    def get_queryset(self):
+        return MailAccount.objects.all().order_by("-id")
+
+
+class MailRuleSerializer(serializers.ModelSerializer):
+    account = AccountField(required=True)
+    action_parameter = serializers.CharField(
+        allow_null=True,
+        required=False,
+        default="",
+    )
+    assign_correspondent = CorrespondentField(allow_null=True, required=False)
+    assign_tags = TagsField(many=True, allow_null=True, required=False)
+    assign_document_type = DocumentTypeField(allow_null=True, required=False)
+    order = serializers.IntegerField(required=False)
+
+    class Meta:
+        model = MailRule
+        depth = 1
+        fields = [
+            "id",
+            "name",
+            "account",
+            "folder",
+            "filter_from",
+            "filter_subject",
+            "filter_body",
+            "filter_attachment_filename",
+            "maximum_age",
+            "action",
+            "action_parameter",
+            "assign_title_from",
+            "assign_tags",
+            "assign_correspondent_from",
+            "assign_correspondent",
+            "assign_document_type",
+            "order",
+            "attachment_type",
+        ]
+
+    def update(self, instance, validated_data):
+        super().update(instance, validated_data)
+        return instance
+
+    def create(self, validated_data):
+        if "assign_tags" in validated_data:
+            assign_tags = validated_data.pop("assign_tags")
+        mail_rule = MailRule.objects.create(**validated_data)
+        if assign_tags:
+            mail_rule.assign_tags.set(assign_tags)
+        return mail_rule
+
+    def validate(self, attrs):
+        if (
+            attrs["action"] == MailRule.MailAction.TAG
+            or attrs["action"] == MailRule.MailAction.MOVE
+        ) and attrs["action_parameter"] is None:
+            raise serializers.ValidationError("An action parameter is required.")
+
+        return attrs
diff --git a/src/paperless_mail/signals.py b/src/paperless_mail/signals.py
new file mode 100644 (file)
index 0000000..c870335
--- /dev/null
@@ -0,0 +1,14 @@
+def get_parser(*args, **kwargs):
+    from .parsers import MailDocumentParser
+
+    return MailDocumentParser(*args, **kwargs)
+
+
+def mail_consumer_declaration(sender, **kwargs):
+    return {
+        "parser": get_parser,
+        "weight": 20,
+        "mime_types": {
+            "message/rfc822": ".eml",
+        },
+    }
diff --git a/src/paperless_mail/templates/email_msg_template.html b/src/paperless_mail/templates/email_msg_template.html
new file mode 100644 (file)
index 0000000..a226669
--- /dev/null
@@ -0,0 +1,48 @@
+{% autoescape off %}
+<!doctype html>
+<html>
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <link href="output.css" rel="stylesheet">
+</head>
+
+<body class="bg-white w-screen flex flex-col items-center">
+  <div class="container max-w-4xl">
+    <!-- Header -->
+    <div class="grid gap-x-2 bg-slate-200 p-4">
+
+      <div class="col-start-9 col-span-4 row-start-1 text-right">{{ date }}</div>
+
+      <div class="col-start-1 row-start-1 text-slate-400 text-right">{{ from_label }}</div>
+      <div class="col-start-2 col-span-7 row-start-1">{{ from }}</div>
+
+      <div class="col-start-1 row-start-2 text-slate-400 text-right">{{ subject_label }}</div>
+      <div class=" col-start-2 col-span-10 row-start-2 font-bold">{{ subject }}</div>
+
+      <div class="col-start-1 row-start-3 text-slate-400 text-right">{{ to_label }}</div>
+      <div class="col-start-2 col-span-10 row-start-3 text-sm my-0.5">{{ to }}</div>
+
+      <div class="col-start-1 row-start-4 text-slate-400 text-right">{{ cc_label }}</div>
+      <div class="col-start-2 col-span-10 row-start-4 text-sm my-0.5">{{ cc }}</div>
+
+      <div class="col-start-1 row-start-5 text-slate-400 text-right">{{ bcc_label }}</div>
+      <div class="col-start-2 col-span-10 row-start-5" text-sm my-0.5>{{ bcc }}</div>
+
+                       <div class="col-start-1 row-start-6      text-slate-400 text-right">{{ attachments_label }}</div>
+      <div class="col-start-2 col-span-10 row-start-6">{{ attachments }}</div>
+    </div>
+
+    <!-- Separator-->
+    <div class="border-t border-solid border-b w-full h-[1px] box-content border-black mb-5 bg-slate-200"></div>
+
+    <!-- Content-->
+    <div class="w-full break-words">{{ content }}</div>
+       </div>
+
+</body>
+
+</html>
+
+{% endautoescape %}
diff --git a/src/paperless_mail/templates/input.css b/src/paperless_mail/templates/input.css
new file mode 100644 (file)
index 0000000..b5c61c9
--- /dev/null
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/paperless_mail/templates/output.css b/src/paperless_mail/templates/output.css
new file mode 100644 (file)
index 0000000..fa51c75
--- /dev/null
@@ -0,0 +1,706 @@
+/*
+! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com
+*/
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+  box-sizing: border-box;
+  /* 1 */
+  border-width: 0;
+  /* 2 */
+  border-style: solid;
+  /* 2 */
+  border-color: #e5e7eb;
+  /* 2 */
+}
+
+::before,
+::after {
+  --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+*/
+
+html {
+  line-height: 1.5;
+  /* 1 */
+  -webkit-text-size-adjust: 100%;
+  /* 2 */
+  -moz-tab-size: 4;
+  /* 3 */
+  -o-tab-size: 4;
+     tab-size: 4;
+  /* 3 */
+  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  /* 4 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+  margin: 0;
+  /* 1 */
+  line-height: inherit;
+  /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+  height: 0;
+  /* 1 */
+  color: inherit;
+  /* 2 */
+  border-top-width: 1px;
+  /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-size: inherit;
+  font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+  color: inherit;
+  text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  /* 1 */
+  font-size: 1em;
+  /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+  font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+  text-indent: 0;
+  /* 1 */
+  border-color: inherit;
+  /* 2 */
+  border-collapse: collapse;
+  /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit;
+  /* 1 */
+  font-size: 100%;
+  /* 1 */
+  line-height: inherit;
+  /* 1 */
+  color: inherit;
+  /* 1 */
+  margin: 0;
+  /* 2 */
+  padding: 0;
+  /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+  text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+  -webkit-appearance: button;
+  /* 1 */
+  background-color: transparent;
+  /* 2 */
+  background-image: none;
+  /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+  outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+  box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+  vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+  -webkit-appearance: textfield;
+  /* 1 */
+  outline-offset: -2px;
+  /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  /* 1 */
+  font: inherit;
+  /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+  display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+  margin: 0;
+}
+
+fieldset {
+  margin: 0;
+  padding: 0;
+}
+
+legend {
+  padding: 0;
+}
+
+ol,
+ul,
+menu {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+  resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+  opacity: 1;
+  /* 1 */
+  color: #9ca3af;
+  /* 2 */
+}
+
+input:-ms-input-placeholder, textarea:-ms-input-placeholder {
+  opacity: 1;
+  /* 1 */
+  color: #9ca3af;
+  /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+  opacity: 1;
+  /* 1 */
+  color: #9ca3af;
+  /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+  cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+  cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+   This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+  display: block;
+  /* 1 */
+  vertical-align: middle;
+  /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+  max-width: 100%;
+  height: auto;
+}
+
+/*
+Ensure the default browser behavior of the `hidden` attribute.
+*/
+
+[hidden] {
+  display: none;
+}
+
+*, ::before, ::after {
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+}
+
+.container {
+  width: 100%;
+}
+
+@media (min-width: 640px) {
+  .container {
+    max-width: 640px;
+  }
+}
+
+@media (min-width: 768px) {
+  .container {
+    max-width: 768px;
+  }
+}
+
+@media (min-width: 1024px) {
+  .container {
+    max-width: 1024px;
+  }
+}
+
+@media (min-width: 1280px) {
+  .container {
+    max-width: 1280px;
+  }
+}
+
+@media (min-width: 1536px) {
+  .container {
+    max-width: 1536px;
+  }
+}
+
+.col-span-2 {
+  grid-column: span 2 / span 2;
+}
+
+.col-span-8 {
+  grid-column: span 8 / span 8;
+}
+
+.col-span-10 {
+  grid-column: span 10 / span 10;
+}
+
+.col-span-3 {
+  grid-column: span 3 / span 3;
+}
+
+.col-span-4 {
+  grid-column: span 4 / span 4;
+}
+
+.col-span-7 {
+  grid-column: span 7 / span 7;
+}
+
+.col-start-11 {
+  grid-column-start: 11;
+}
+
+.col-start-1 {
+  grid-column-start: 1;
+}
+
+.col-start-2 {
+  grid-column-start: 2;
+}
+
+.col-start-10 {
+  grid-column-start: 10;
+}
+
+.col-start-9 {
+  grid-column-start: 9;
+}
+
+.row-start-1 {
+  grid-row-start: 1;
+}
+
+.row-start-2 {
+  grid-row-start: 2;
+}
+
+.row-start-3 {
+  grid-row-start: 3;
+}
+
+.row-start-4 {
+  grid-row-start: 4;
+}
+
+.row-start-5 {
+  grid-row-start: 5;
+}
+
+.row-start-6 {
+  grid-row-start: 6;
+}
+
+.my-1 {
+  margin-top: 0.25rem;
+  margin-bottom: 0.25rem;
+}
+
+.my-0\.5 {
+  margin-top: 0.125rem;
+  margin-bottom: 0.125rem;
+}
+
+.my-0 {
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+
+.mb-5 {
+  margin-bottom: 1.25rem;
+}
+
+.box-content {
+  box-sizing: content-box;
+}
+
+.flex {
+  display: flex;
+}
+
+.grid {
+  display: grid;
+}
+
+.h-\[1px\] {
+  height: 1px;
+}
+
+.w-screen {
+  width: 100vw;
+}
+
+.w-full {
+  width: 100%;
+}
+
+.max-w-4xl {
+  max-width: 56rem;
+}
+
+.grid-cols-12 {
+  grid-template-columns: repeat(12, minmax(0, 1fr));
+}
+
+.grid-rows-5 {
+  grid-template-rows: repeat(5, minmax(0, 1fr));
+}
+
+.flex-col {
+  flex-direction: column;
+}
+
+.items-center {
+  align-items: center;
+}
+
+.gap-x-2 {
+  -moz-column-gap: 0.5rem;
+       column-gap: 0.5rem;
+}
+
+.whitespace-pre-line {
+  white-space: pre-line;
+}
+
+.break-words {
+  overflow-wrap: break-word;
+}
+
+.border-t {
+  border-top-width: 1px;
+}
+
+.border-b {
+  border-bottom-width: 1px;
+}
+
+.border-solid {
+  border-style: solid;
+}
+
+.border-black {
+  --tw-border-opacity: 1;
+  border-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.bg-white {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+
+.bg-slate-200 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(226 232 240 / var(--tw-bg-opacity));
+}
+
+.p-4 {
+  padding: 1rem;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-sm {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.font-bold {
+  font-weight: 700;
+}
+
+.text-slate-400 {
+  --tw-text-opacity: 1;
+  color: rgb(148 163 184 / var(--tw-text-opacity));
+}
+
+.text-blue-600 {
+  --tw-text-opacity: 1;
+  color: rgb(37 99 235 / var(--tw-text-opacity));
+}
+
+.underline {
+  -webkit-text-decoration-line: underline;
+          text-decoration-line: underline;
+}
diff --git a/src/paperless_mail/templates/package-lock.json b/src/paperless_mail/templates/package-lock.json
new file mode 100644 (file)
index 0000000..9d7a08b
--- /dev/null
@@ -0,0 +1,1260 @@
+{
+  "name": "phail-html",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "devDependencies": {
+        "tailwindcss": "^3.0.24"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-node": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^7.0.0",
+        "acorn-walk": "^7.0.0",
+        "xtend": "^4.0.2"
+      }
+    },
+    "node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/arg": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+      "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
+      "dev": true
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chokidar/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true,
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+      "dev": true
+    },
+    "node_modules/detective": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+      "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+      "dev": true,
+      "dependencies": {
+        "acorn-node": "^1.6.1",
+        "defined": "^1.0.0",
+        "minimist": "^1.1.1"
+      },
+      "bin": {
+        "detective": "bin/detective.js"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true
+    },
+    "node_modules/dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "node_modules/fast-glob": {
+      "version": "3.2.11",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "dev": true,
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/lilconfig": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+      "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+      "dev": true,
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.12",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
+      "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.1",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+      "dev": true,
+      "dependencies": {
+        "camelcase-css": "^2.0.1"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >= 16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "dev": true,
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-nested": {
+      "version": "5.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+      "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+      "dev": true,
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.6"
+      },
+      "engines": {
+        "node": ">=12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2.14"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+      "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.8.1",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tailwindcss": {
+      "version": "3.0.24",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
+      "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
+      "dev": true,
+      "dependencies": {
+        "arg": "^5.0.1",
+        "chokidar": "^3.5.3",
+        "color-name": "^1.1.4",
+        "detective": "^5.2.0",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.2.11",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "lilconfig": "^2.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.12",
+        "postcss-js": "^4.0.0",
+        "postcss-load-config": "^3.1.4",
+        "postcss-nested": "5.0.6",
+        "postcss-selector-parser": "^6.0.10",
+        "postcss-value-parser": "^4.2.0",
+        "quick-lru": "^5.1.1",
+        "resolve": "^1.22.0"
+      },
+      "bin": {
+        "tailwind": "lib/cli.js",
+        "tailwindcss": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=12.13.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.9"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    }
+  },
+  "dependencies": {
+    "@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
+    "acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true
+    },
+    "acorn-node": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.0.0",
+        "acorn-walk": "^7.0.0",
+        "xtend": "^4.0.2"
+      }
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "arg": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+      "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true
+    },
+    "braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "requires": {
+        "fill-range": "^7.0.1"
+      }
+    },
+    "camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "requires": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        }
+      }
+    },
+    "color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true
+    },
+    "defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+      "dev": true
+    },
+    "detective": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+      "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+      "dev": true,
+      "requires": {
+        "acorn-node": "^1.6.1",
+        "defined": "^1.0.0",
+        "minimist": "^1.1.1"
+      }
+    },
+    "didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true
+    },
+    "dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "3.2.11",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        }
+      }
+    },
+    "fastq": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "requires": {
+        "to-regex-range": "^5.0.1"
+      }
+    },
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "optional": true
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "requires": {
+        "is-glob": "^4.0.3"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-core-module": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3"
+      }
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true
+    },
+    "lilconfig": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+      "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+      "dev": true
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "requires": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      }
+    },
+    "minimist": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "dev": true
+    },
+    "nanoid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+      "dev": true
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true
+    },
+    "postcss": {
+      "version": "8.4.12",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
+      "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
+      "dev": true,
+      "requires": {
+        "nanoid": "^3.3.1",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "postcss-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+      "dev": true,
+      "requires": {
+        "camelcase-css": "^2.0.1"
+      }
+    },
+    "postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "dev": true,
+      "requires": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      }
+    },
+    "postcss-nested": {
+      "version": "5.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+      "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+      "dev": true,
+      "requires": {
+        "postcss-selector-parser": "^6.0.6"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "requires": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
+    },
+    "quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true
+    },
+    "readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "resolve": {
+      "version": "1.22.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+      "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+      "dev": true,
+      "requires": {
+        "is-core-module": "^2.8.1",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      }
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true
+    },
+    "supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true
+    },
+    "tailwindcss": {
+      "version": "3.0.24",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
+      "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
+      "dev": true,
+      "requires": {
+        "arg": "^5.0.1",
+        "chokidar": "^3.5.3",
+        "color-name": "^1.1.4",
+        "detective": "^5.2.0",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.2.11",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "lilconfig": "^2.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.12",
+        "postcss-js": "^4.0.0",
+        "postcss-load-config": "^3.1.4",
+        "postcss-nested": "5.0.6",
+        "postcss-selector-parser": "^6.0.10",
+        "postcss-value-parser": "^4.2.0",
+        "quick-lru": "^5.1.1",
+        "resolve": "^1.22.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "requires": {
+        "is-number": "^7.0.0"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true
+    },
+    "yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "dev": true
+    }
+  }
+}
diff --git a/src/paperless_mail/templates/package.json b/src/paperless_mail/templates/package.json
new file mode 100644 (file)
index 0000000..48785a0
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "devDependencies": {
+    "tailwindcss": "^3.0.24"
+  }
+}
diff --git a/src/paperless_mail/templates/tailwind.config.js b/src/paperless_mail/templates/tailwind.config.js
new file mode 100644 (file)
index 0000000..1e01796
--- /dev/null
@@ -0,0 +1,7 @@
+module.exports = {
+       content: ['./*.html'],
+       theme: {
+               extend: {},
+       },
+       plugins: [],
+}
diff --git a/src/paperless_mail/tests/samples/broken.eml b/src/paperless_mail/tests/samples/broken.eml
new file mode 100644 (file)
index 0000000..3e03caf
--- /dev/null
@@ -0,0 +1 @@
+This is not a valid eml.
diff --git a/src/paperless_mail/tests/samples/first.pdf b/src/paperless_mail/tests/samples/first.pdf
new file mode 100644 (file)
index 0000000..4f74613
Binary files /dev/null and b/src/paperless_mail/tests/samples/first.pdf differ
diff --git a/src/paperless_mail/tests/samples/html.eml b/src/paperless_mail/tests/samples/html.eml
new file mode 100644 (file)
index 0000000..97747ce
--- /dev/null
@@ -0,0 +1,11599 @@
+Return-Path: <someone@example.de>
+Delivered-To: someoneelse@example.de
+Received: from mail.example.de
+       by mail.example.de with LMTP id KDcHIQh8fmPHVQAAFx6lBw
+       for <someoneelse@example.de>; Sat, 15 Oct 2022 09:23:20 +0000
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.de;
+       s=2018; t=1665825800;
+       h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
+        to:to:cc:mime-version:mime-version:content-type:content-type;
+       bh=/6OzHOWcwCHrfo1mlk+KcsiTCkt9lN5CEU2AETZBM/M=;
+       b=AM/Q8Xlmh5jmccjofuedENG9dk1K9ItOL7CBtRhQlTEkjJqb1e1WgrT86SZmU5K9WTVerX
+       b0GgndG9xavsCSsaKrZX9rIbozFVY1+pr80sl+sZB/UbUFlr2C4/CALwUBveC6H+HcAJUR
+       uRQycv5zuGm8XAXdo28oFWxCKcAsE0Vs+b8UNs5Qd0VJY9inquLKXHlvLYx+ivnkg/yPCZ
+       ZiOfv4+Ljfxh3oq6vjN0G7pHmANn1U3MmTLivgGLocl+PPxOCCzHeRp38gJQi3NC75JA/B
+       4bSJxwjV0ghnq5z7RG/Yo8d9zlB8l7z31PwCNzbPy/bJVC2EFBvHdhVqow==
+Content-Type: multipart/mixed; boundary="------------6FpezQEQZc7E309m0sKHeaNu"
+Message-ID: <a9215c39-5464-8dbf-bb8a-c9fa95eee30f@example.de>
+Date: Sat, 15 Oct 2022 11:23:19 +0200
+MIME-Version: 1.0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
+ Thunderbird/102.4.0
+To: someone@example.de
+From: Name <someone@example.de>
+Content-Language: en-US
+X-Last-TLS-Session-Version: TLSv1.3
+Subject: HTML Message
+
+This is a multi-part message in MIME format.
+--------------6FpezQEQZc7E309m0sKHeaNu
+Content-Type: multipart/alternative;
+ boundary="------------Ny4NE0BVNKgkbFGTIy1tAjo6"
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6
+Content-Type: text/plain; charset=UTF-8; format=flowed
+Content-Transfer-Encoding: 7bit
+
+Some Text
+
+and an embedded image.
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6
+Content-Type: multipart/related;
+ boundary="------------UpACVYsiyWaYgeZ6U0yeiTdy"
+
+--------------UpACVYsiyWaYgeZ6U0yeiTdy
+Content-Type: text/html; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+<html>
+  <head>
+
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  </head>
+       <body>
+               <p>Some Text</p>
+               <p>
+                       <img src="cid:part1.pNdUSz0s.D3NqVtPg@example.de" alt="Has to be rewritten to work..">
+                       <img src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png" alt="This image should not be shown.">
+               </p>
+
+               <p>and an embedded image.<br>
+               </p>
+               <p id="changeme">Paragraph unchanged.</p>
+               <scRipt>
+                               document.getElementById("changeme").innerHTML = "Paragraph changed via Java Script.";
+               </script>
+       </body>
+</html>
+--------------UpACVYsiyWaYgeZ6U0yeiTdy
+Content-Type: image/png; name="IntM6gnXFm00FEV5.png"
+Content-Disposition: inline; filename="IntM6gnXFm00FEV5.png"
+Content-Id: <part1.pNdUSz0s.D3NqVtPg@example.de>
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAIAAABIE/2UAAAACXBIWXMAAA7EAAAOxAGVKw4b
+AAAbQ0lEQVR4nO18eZxcVZX/+Z773qvq6iUbWSCsgsiu4BIEcQGRURAEHXWcGcdlXGB+I86o
+g/7QQUHA+aGiAdFxHFTAARRlU0RBRFRAcRRkE4iShLBFkpBOd1fVe/ee7++Pe191JzRJE0Bi
+Zk76U13dqXr93vede873fM+5BZLyv/YY02f6BDZR+19cJrfsmT6Bp9MohIDC+AMgQqEg/UAR
+xB8E674V/4PiS7zQx0AwqW3u/iICEYLjTpHcAEIKgPR93bdu7vElXrBBSBJCCg0iYiKW/hOT
+LZjN0F9IAiB7cSVaDCiMjiIgkByFmGRtbW649EABIHXkjaE1RWGICE1UIPr4oXVzw6UHSswn
+8QnFAMRwIwRVjKQIImb/Q/wlPjEzVfXeC6RkmalzVBHVuJ5EhICIQDBZnt4c4m7yg9oAmJmI
+mBkAoy1dvmRNNUqIRCdixCFFoEkX0+aAS1wHqK0XXMwMgm7VvfDSb3VDVxSAigkoTsQJYrB5
+bJKWzQMXxn8kY4YhIQBQ+VKdXvvza7/z/UtNQQqNgJgwQpNS9GQOs1ngQgqEwoohEThKVXa8
+lo/45V+46AuLV9/74xuvycRZMIJQo5CW3j4pf/mzx2U8MQscNF6kWaAz18hO+cKpdy65UxwX
+L1kM1IQXlhhwSlCTHPbPHhcAwphwoSIgjBwNY4289b2ff/+Cyy7QlsuK/IHlD3bNuywTQUrQ
+EE6ei0T+fHGJ+TglICFjciGM7LLKGsWNS276zFdOtz5YIaJYtepRA4MZhca6un78KvLPlb9M
+5G8pPlBCYDt0WcjN99xy7Mf/cenK+/qm9XVDaUIoKKCQgNU5qKbAfzb8JS59Su0IFFIkPZKk
+TCS10VSlstI13aiMffKMk+/9433N6QMdX4m6omgsWbpkrNPO8ywlr1QyCmVyn9k0cUlENAaC
++osQIHIT9IATqVdTtyyzhi5bvvSYD//DbUvubM7s74SuukKoAhkZGTNv0cmICdXk45zBpohL
+nSqiWyQXMYLkhCuLcUJIGq1TdfIiW75y+Uf/7aM//eV1zFlZgLooKZhRVIIE9nLQ49Dcnm2K
+uPRuJ0jCjDRIEAZIIE3EIoMjQmU+hOFypGjkP7vr568//q+uvPVHfXP7jSEXOC/iTUSoEJFc
+FYAjMxG3Id1uU4y7URQwiUUdYmh0IqQoCVULBohAg1hp5WDf4CU/veS4U457NBsbmjWtqioR
+MlABAQyJByMqLoyEuLbH0Xc3RVykV/sTESMhRKgiIqBRI6MNpSvyYN1P/sep37zywrZWzb5m
+VfrobQB6eWqC7CAWZZkJQExaH22KuFDiNcGEEmOt0EhAKEYRQEsri6J564N3fPJzJ193889c
+v+NAFoLH2oEjiv5rKXgkNMb19dmmiEtMPSY0Ee3xN+89SDWK0AHOXfzTS04589SlK5b1zerv
+sPIMOUAjXK2wQMREVMwCoEZuINhOsGcSF46H2FjsMarzIkIQJqI9lQ2auXbVrsz6mv0r/YoT
+Tzvxe9de0c18MbPZDl0qANBEVU2oUWegAUrSOReCJ8m0tjjxr0/qOM8kLhh/TN2KqBOYiFJs
+Ys8LUlaVZciy/p/ddtPC80+/9sZr+6f3qZNSSqrAnBMVMQpRF4WoYSY5ffqMPMshEICgmrDu
+kEzaJ3lm/aVuB1JiAEhn2cvTJhAxM4JaZA8+8vDCr5518VWXjbjVfbNapVRmXjLV4JRQgoCp
+qYlo7S+iCvHeb731/L6+hnkCAJEoENJffuy5PaO4MN5ReFBIF6MJSaEJQVWvnh5NF4Q/+PUP
+P/rpExY/fG9r5mAfmiSVTuEkEKIAidpZ6guNoKsoTDJozkyMVApJBZKbYJPQvdeqa2rdGRRI
+yr6kCDQETwmCqtlo3vPwH/79/C9f9MPvdLNyYM600kpnDkxLIh02ZvXHXGBK955bzd1SBcFX
+WUPZKzYpCtpkHvOnxiWeQjoRMlZwWcyfFKScKt3KN1t9XrrfvemK077wmdsX3dGc0UKuPhjU
+xUtJEnY8LCE14xl3AApBB7XKD7UGVRDqmAZhlG02lXW0lr+QUKUZIDRCIm9hJ1SDrdZvl961
+8ILP/uAnV1bm++cOdqwUIJgJJVNEajbuIOPfJ/wOoDAEm94/bZ899yGo0DTFkNzNLAL8jPvL
+Wv3ACBAQfCVGwjyD5FmujQt/fNkpnzt1SXtR/7RWJkXHOnQgxDlHMzGJBGf93Cz6Qqj87P7Z
+L9j9BUKIquiEOlyAmvut894/BS6saWvU6evkk5xFRES1sqq0smg2lq5c9sWvf/nbV14aMhuY
+PhBYCQOgqeUTTEmI1m2x+vpjdhaRqDbVvROBBB+222G7vqxJi0FdKFAhhCaqYozZ60+PS13r
+pP5eTeKSmmjGThUCOK057bKfX/6ps/7tdw/c09iiZWrqTUWZQrOIGOtQndRL1MevBVtJ4ZdC
+CEWhZVnt+uxdBlwrlMFBCRKkxHmG5L2PJTB/Yn8Z76PHhjHIEEo0tKr8Z88940vnfXEU7YG5
+Q6M2QkUfGhGKyE9Rt4rWaSr3/CX+MvpLzFAKsRDmDM0GaWaZcxG5GHQt6izPWN0YuazQ6CkO
+VIj40ouYIDSK1k33/Phf/9+Jt//+rmyoxTzrBHNosQpBpBco41FiJotQTUg7AtIgJpZR1NQg
+ldIUIfhpzf49tt2NInA0NQicZLGTnwDZOFweq6ROtIl9z8d7FwGN6ppmkcKqgGKVVK2ieeGP
+zj/+08ePWac1c6BDH2KeDXCiomZMIalmOzUcE0piCAWa2iUWfwQFCkhgf6O1x3P2AACo0ZSq
+qmKaBIaN1l/WYhxrX/bEF6zvXawnuiiAIIi3MkjVZvuz55xx5jlfzFvImwMd86aRvMchHsbU
+AY4XmD35fnxwUOqLi4sVUfg0QB3Ud8Jzdn3OjJkz4h1yzkn8X01N/HUgfgK4TOov6/xm/f6S
+bmfUUARmFVyAyr+c9OHzr754aKuZlVnHShcvuZ6gjDM8E7xxrUtYt/lDYcpRZNTjyBx5Z3T4
+uTvv1cpawXt1Lg5/RKgx6f2cIi4TL368UVOP3PTmBx7vvQkdYdSog7Ebyizn8pUPfui0j1x3
+6w1DW03vqhcycwhmGhupvXZ6T3HbgIpUZyzEcsIAKoVl6HetvXbeM5bRE3GYdO1PGRcmR0hA
+KIQSR0seC5asXR/LBCfqDaRUvps387seuPt9H3vfbUvvKGa2Ar0GQ4wHoJrFBWNKAmpQwrAB
+/lbXE9pjALECYhm2mT3/gH0OoJiq9q5FdcNq//pekY7em1UzETIuUQji1M1agUZSfToRzQiS
+cyoimWL12PD//fQJNy29PZ830GaZCxolc0JpWRBHRsYFIUFB7IlsQGVjLR1EIhBzdZZrp9M9
+7FWHzhuaU1Zl4lATurcbj0sSeCgkzSyIXzmy6re3/1ZSdFxrkq0HQapWo7xcI9gtSx+qDjvH
+nfqhG377i/7ZgyO+SxUEayCHUQkVUUIsBs9YYyMV2+u11FLqddwgFAllGGi0XnPga0Tg1EU/
+wgTbeFzGPaVk5Suv4b8X33z6BQuHuSbQKycmCpH6OymhLo4liFUWLFTircBJ55580U++M21W
+SztlXylNy03QVYooRAM0KKggoKKZAWuVho+PSyLTdCwF3sQy5DJmu87feadtdgpGVbehY0wN
+l3F9JGVK8eYrC5dfdfkNv7mhHTqaaWrycvz1iMw+gRWZOI3mEQaK/qtv/NG5F/3XjLkzu1VX
+gUxUzAQwxFlaEOkLQNTfxgn+eq2nXRJmMIo6c9VoddjBr5meDQTvVcfHMyelHVPFZfxtEFC8
+WLPRt3TF0ht/84vhsZHLr/4u4EytDrB12oZEMh4viUJRGCyDu+ehe888+wsuzwKJzJnFSkfq
+GEJJi4dITfn0THphfD1WMz8PJTIn6rth+y23ffmCl3WqTu5y1sVHL7JsZHwZfxtFVAga+K3L
+vr34gfvQ1G9c9I37Rx6opOpVxnWgETC12euBAQYNlfqTzjjp1ntuzZq5kSEEOGf1yUbBIabS
+3lfv2ZT8JVVNoIOZOMn9muo9b/n7PbfezXyFEGdkesn6SfjL+J80hhAIGbH2Tbf8d8gsG8zv
+XPy7q268Ond5t+z44M3MzJjIVFxIkaRKYMiy/Cc3/+y6X/20mN5XiQVlarAiMfA0l4LJ59ym
+YjWdZzDLXVaNls/acvvXv/qoQN8oGqIT+P6U7XH9hazHW0nNdNGSRYuWLEJDK3jX78779nlL
+Hr0vi52HtdedUMRIEwAm7IbOOd88Zw1Hq8IHkACdBJJJeAbrcnnDp91bVfVXGoyJSxJw1IzK
+sfC6Q47YophFI8TBaWwtTd5wfUK4pEulxJyTqfvd3b9bPTactbK2tRuDzVvuuHnh2QuLrKjK
+SiZuYorMkwQQLBRa3HLXrb+65abGYNHVMoiZiAmpNQFMNGVq/pIWQx2TUpgeJ0q5Oj9Wzuwf
+evUrXiUUB0doSK+UJ+SQjxt3U7YnBOLpb7njlsoqgi5z7W53aIvp3/nuxd/78RWNZsPoRWK9
+HEdUxgckDXbeReeOVKOSa7AQG8P1zg6wDiw9dW0D1pt1SoBEeKhQEZFABFoV3v32d++67XNC
+8IDGSoipdf9U+EsPIFWMofPw8P0h76og90VmRQXrDvlPfOXk+9sPBvH0XgkxUlCJmFogTeX2
+h+685pZrbcgCrQjNzCOjOBMXM9ETOM8aGJG4sklHc0IHceZNzRqqYbi73x77vuP175SQZ5JJ
+ECWyuFrjwn2SuNR5lzHjlFX3/gfvLxqF95WESLkNuS5btezE009aMbJSnVpitwIRHzyFCtx9
+z91ruiOSqxmVqgRItQmhBfJE/CVdGcREaDAqPUOWxx6s9KN1zNuO7pOm+B7qBDxoeIJ3Yf3+
+AhFRaFVWyx9erqrJY+MfpBX9xQWXXbDwnDOQZZ5lZIBqdHAWghL3LP79aLsNOMT6IMZd1KOl
+mBBBZQr5IomTAjEgCCyIRwZPE3GrVw6/6dVvfOmeL/VVlasm/QrBGJhU/yftLz0+Ek/6oRUP
+Rbmorsok3uIuyplbz/qvSy74zk8vdnnR9aUQsOi3Uor9fsm9LssMluqX1JdAVJ6Sj0zdXxI6
+EUSjBCIYg4p2R8v9n/+S97/9WOn4gjmgBAWpA1Dnu6covkAkhADghuuvX7FyRV4UKUhGwFQM
+VqJyQ/kHTzzuwh9+M28UY2U3mEFYFHlJv/yRR5g7E6lHfZ4iS+UCBZKLSsfm9M0+9YOnzBma
+o3SZZiKisSqX3hinbLAun2jr85dEnIWddjelJ60HMkQgWnkTl83bfv5qP/z5s89YumqpNlwQ
+T9I5HWmPLXlgmeaZ1Z2JqdraPIVpLpP1hSbnomgmmQtORnns3/6f5265R6iYFQ1RiKZ5BYqK
+OHL9w91TxqVX70TCkDdyVUUcuYg3QMSMuWusWTM6fdbM/V6+/+/uu+vDJx73yIqHVZOr+8pX
+wTRTSx2aKUPTawelod1UTI7LD8xIBzgIQjt88L3//I7XvbXqVA4qEqOYpQ2vcEAGKKcQvjaM
+i9QUVqEkd9zhWQP9A+1OR1Wjqh7jgxKNZvPW2297z9+9d8G+Cy770fe+dOGXszzrdjshmMud
+OoQQIHW3cYpW+wssSWP1o8S2WIAZmMGtfvjRV+530NFvfI/zmklGBZUCM6FJTVpSmJyKYjEF
+XOr/h4B77bFbf2tQJDd1Qb2pN1FlQ0NXmvLomjUXn3fBsW89eto2c8++6vxLb7rE9bluGAMr
+xyqn5Ua1JzIpnJiwqDkx7Q0Mgsh85kx9s501QvePo39z0FtOOvoTmc8oJoVBCSjonKgDHKmo
+uWQ87lOFCygki7wYHBgSi3WhReJhVDqIDzP6hy75/uVrxtpvOOzIPz704Jlnf2l1dw0yV/mS
+PmQSIwKmvrxZl1yExhBrMdbBTA1gXrnVD6x+7UGHL/zY57eeNd9o6mDiI8mOyp3GtScTqdJT
+6C8AaQPNwW223NoC03iEQEXEsatommsSHGhccu2V73rzW1+4216/vvWW0876rFOHQmfNmukr
+n0JDGimcAk1JFRcJMUhQmpppsKR3qq7WN73qrz7+/hN85b33RZalida6/qD01k8iRk+wnN6g
+vwjN2GBzzozZoRNg0NQwp5l5p85TqsoNFj/59fVzZsw46pWvNeC711xx6723DbWmz5u7Jb04
+giKmScbbYMJOW5ujBCc9MOE0U8qqP658yyF//cUPn7lFcws1NFwuAojWLSXUmWECV6rhfrK4
+TJCyxcwy5HvsvKeDc3BOtCauNWeFUOXRNSuvvuaHh73iNbNnzV4+uuIHN1zVb83B1oCE6Nsw
+WEpLGzrB+mMmaDB1AOGCNiRHx9DmP77lmOOPOR5BG5L15UWETjVOtvSUnSdr69MxKVTVTDML
+fsELXjRzYLpVIW3hp0CYBa1UO8qcbGX51y44d9ZWc56/+15jvn3Vz68p1XbcYcdQeo20B/Wk
+JWpqsrakWMuME0cVzFdVDteUolrVHeLAmScsPOk9H29qAxRYzZsRY5JLLaSngkCuDxfU9VHw
+Yaetdtxh22eVnTKr291qKIJ0M2nnLIxDLr9z2R9uvueOQ/Y/MGtldy9ZdN1tP9tj9z1bfX3m
+TUCrpXBhr1SqOy2S4KhbGD01x5qNLHS77dWjBy448KunfeXwBYeFTmi6LFMwdrRq+p3G5aag
+e248LmvJwgDJftc68rVHWmWMXUASwszgAa8QY6Z4tL3mljtv323H5wwMtoZHVv/qV7/cZaed
+m1lfhARJGlICSULpQUOoKkmrHUYgqtrUorumM60xdNzRHzrrkwv33WVBOVIVzOOJOxenR3qV
+ci+uPwUOs/5+QNyXLLm6KnSOfOlhe+/+/DVj3ZA7L95QebU+r31V1nYcbpRFQx9aumyrrbYb
+zPty86MjK+b2z9lxm12rtmbIxLqMG2YIo0aaF7OUOvXew2mc3BV14tzo6Fjn4fCK3V75vbOu
++MBR7x+yweAtbzWsIalvWwvjIoDGoflxN39acOnhk5BR573NbEx/+5F/4ypRE8lQihdHNVET
+UTWFiN1//zLAOZcVWfHwQw81WOz7wn19p1JKrnASlEFJpWn8fBqaU/G+cqpq0pCswRxj1nlk
+9MW7L/jsJ0474+TTt91iK+9LFXXOCUit9ySlRYfxSbCNSDwbgUtqdkBEtVE0u1X70P0P3nv7
+3apHOy7LvaZQIXGcv/JZo1i8bOnw2KjmDR9k7uwtFe6Nr3vDlrPnhU4FEzGv4pVeEQReJACB
+DArNoCjNr6nCqnLr1tx/OOpdZ5/472942RF9LFh5BydU1opwIm+1OE/W22KnSJCmYOubZ4hD
+9BYnQokGGwNF/yeOPf5t//Lu0XqcxIkBDqLOudLK0sogQZAFL/NmbQVi1tDM5+6259U3XNls
+9XVCGSTEcl2gACiaaSZd6451C8mfv/PeRxx8+MEHHLj1jPndbkfKsuUKJRgIx+QdQgp04vx6
+XErj9/NpxyVReAMdJXNZqPz+e7zsUx855b0nvb9vehHQIQFk0XPUKR3vuW/R6tUjc2bOPfCA
+V4xVo4PF4KsP+otrfnl16avgYIJcMwhoqLqV0R4dXrNla9bhBx121CFH7rPH3rPcDJMQur4P
+/ZKJAjRIHBekSJxuiel4YxTipwKXWJEaqRIAiKgia3faB7/4kHce8Xdfu/jrnB4ELjaMBAy0
+aVtMX/LA0lXLVx74isN23mbnUJZmnDNvbt5slOzm2hS6ql3SW+iGmYPTd91pl7133/ule+/3
+0r1ekonrWln5KkOWuUJSey4l8tTDnDBs+/SBsgFcYmsGYk5KwpE5FCEAyE445qNDfc1PfuuU
+6TNmS4dZlokTs87MLWb94NqrChSHH3xYgXys7LSazSu//8PVo6OtGY01y9c00JzRP23reVu+
+4TVHHfySA+fNmjfkhoJYtyxNrHBF7LFDIGneS6zu9kqq/0CKYryj9qfGRYSxQqyjW1zZ6qBZ
+sA+8458W29Lzzr9wxsBsOPUhZI1i0eJFK+9b+YLdn3vAC/frdjqtwWnfv/4Hl115WaPRGOqb
+9qbD//LZW+304hct2GX+swezQRHSe9/pClxDCxGhxQ+fSDNhJmJIH0WhiaykD8t6OjERWatV
+OBkuHJ9HjqeSij4LIVjouuqsr33p65edt9I/qgMu0HdH2/Onz/vGyf+557Z7hUrvXX3/mz/w
+xgdX3T+AgYUf+/yhL/qLeFyTYD6NACK1NnsH71W/WOcH1Lv8pH7+9C2l9c4FpcoDSPpOTRFI
+AKpa+OLD7/zgCf/0r9PywfaKsT7p0wqvP/T1e2//vM5YRxvZ+Zeff9+KZYHhr498y6tfdEhZ
+llVVmZkYXJZDHTSNGgqk7qv2dEsBRCc8Sl0N9Z4/jcb1mVl6TBMLNsFCCN12OTy2Zphjv1z8
+m6M/c+z8g7Y/9INHLKmWDY+u9t5fd/v1Ox6+y6zD5u79thf8fsWScixUpbfoaSFMPBTX+Z6e
+0IzGdR9p6bTqquFpsfXHlwk3pp5P6607CDJRoBgb7ey13e5n/fPnXFvuXHRnA40iawyXaz7/
+tc8NV6s63fabD33js2ZuW414V7g0V8U0F1kP1PaCRc8HJjgD1n3EY17ylNsTUF3XauZHdSzT
+LM+n9Q1pJVWojn3X+0YeGVn0h0WNonH6uQuv/sVVLtf99ljwple+ueyWTtMgZ6wSpzif80zZ
+E9s3MZ4voyymQooZM2Sefv4W8+fN2+ruuxbNnDXnPy/+6rTZQ6jklPd/arvp21RjFfJ4F9b6
+nMbNBBcR6cklIhJgAGCg0QIbRb7D9jv86Pprr/jtVZ28Ld1w+L5H7LPD3n7Eq4PXbiaF1Buo
+yLUA2tRsY/bZkFSoWQgSnDqIKmAM0GLbHbb/6ufPcXO0GCzQ5nv/9hilCJUwbz7Topfi4qE2
+TVBk4z7/JfINAK6ONRSqywI5Z/vZ/XP6p08bGFk2/Jcvf/M+2z4vBEMTcK7p+uUJdR2fUdu4
+z8VJLWJAUReX3gcADy9/2MrQWdU+4Hn7Hf/ej3S7nbg1MT70ujlP7TU8HbZxuPSEw3pUnswz
+N9wdvvSiS9kO2ai++03vmtOYqaZS97nTfvjx6Z5N2p7UPj4gfuiZCMWpsgoHLNh/oNX3rHnb
+vWrBq7plp3A5VEUosPSZI3BPL4F/imz99dHklmqW3vtoQqUEcxTBsB9poVloJiagxrJYEMQo
+6kA3YUP8pmsbh0vaSJbKOaaNpSahpBenBXOkycm6/6kWBU+JnGez9JeEQvrG1F1VE5HY1gcE
+kjZWACJpJ1eadd9kOctE+/+PsA04/7ZXkgAAAABJRU5ErkJggg==
+
+--------------UpACVYsiyWaYgeZ6U0yeiTdy--
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6--
+--------------6FpezQEQZc7E309m0sKHeaNu
+Content-Type: text/plain; charset=UTF-8; name="600+kbfile.txt"
+Content-Disposition: attachment; filename="600+kbfile.txt"
+Content-Transfer-Encoding: base64
+
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCg==
+
+--------------6FpezQEQZc7E309m0sKHeaNu--
diff --git a/src/paperless_mail/tests/samples/html.eml.html b/src/paperless_mail/tests/samples/html.eml.html
new file mode 100644 (file)
index 0000000..a73be6f
--- /dev/null
@@ -0,0 +1,45 @@
+<!doctype html>
+<html>
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <link href="output.css" rel="stylesheet">
+</head>
+
+<body class="bg-white w-screen flex flex-col items-center">
+  <div class="container max-w-4xl">
+    <!-- Header -->
+    <div class="grid gap-x-2 bg-slate-200 p-4">
+
+      <div class="col-start-9 col-span-4 row-start-1 text-right">2022-10-15 09:23</div>
+
+      <div class="col-start-1 row-start-1 text-slate-400 text-right">From</div>
+      <div class="col-start-2 col-span-7 row-start-1">Name &lt;<a href="mailto:someone@example.de">someone@example.de</a>&gt;</div>
+
+      <div class="col-start-1 row-start-2 text-slate-400 text-right">Subject</div>
+      <div class=" col-start-2 col-span-10 row-start-2 font-bold">HTML Message</div>
+
+      <div class="col-start-1 row-start-3 text-slate-400 text-right">To</div>
+      <div class="col-start-2 col-span-10 row-start-3 text-sm my-0.5"><a href="mailto:someone@example.de">someone@example.de</a></div>
+
+      <div class="col-start-1 row-start-4 text-slate-400 text-right"></div>
+      <div class="col-start-2 col-span-10 row-start-4 text-sm my-0.5"></div>
+
+      <div class="col-start-1 row-start-5 text-slate-400 text-right"></div>
+      <div class="col-start-2 col-span-10 row-start-5" text-sm my-0.5></div>
+
+                       <div class="col-start-1 row-start-6      text-slate-400 text-right">Attachments</div>
+      <div class="col-start-2 col-span-10 row-start-6">IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)</div>
+    </div>
+
+    <!-- Separator-->
+    <div class="border-t border-solid border-b w-full h-[1px] box-content border-black mb-5 bg-slate-200"></div>
+
+    <!-- Content-->
+    <div class="w-full break-words">Some Text<br><br>and an embedded image.</div>
+       </div>
+
+</body>
+
+</html>
diff --git a/src/paperless_mail/tests/samples/html.eml.pdf b/src/paperless_mail/tests/samples/html.eml.pdf
new file mode 100644 (file)
index 0000000..de4aeb0
Binary files /dev/null and b/src/paperless_mail/tests/samples/html.eml.pdf differ
diff --git a/src/paperless_mail/tests/samples/html.eml.pdf.webp b/src/paperless_mail/tests/samples/html.eml.pdf.webp
new file mode 100644 (file)
index 0000000..ab7cd85
Binary files /dev/null and b/src/paperless_mail/tests/samples/html.eml.pdf.webp differ
diff --git a/src/paperless_mail/tests/samples/sample.html b/src/paperless_mail/tests/samples/sample.html
new file mode 100644 (file)
index 0000000..584cd5d
--- /dev/null
@@ -0,0 +1,19 @@
+ <html>
+    <head>
+      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    </head>
+    <body>
+      <p>Some Text</p>
+      <p>
+                               <img src="cid:part1.pNdUSz0s.D3NqVtPg@example.de" alt="Has to be rewritten to work..">
+                               <img src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png" alt="This image should not be shown.">
+                       </p>
+
+      <p>and an embedded image.<br>
+      </p>
+      <p id="changeme">Paragraph unchanged.</p>
+      <scRipt>
+          document.getElementById("changeme").innerHTML = "Paragraph changed via Java Script.";
+      </script>
+    </body>
+  </html>
diff --git a/src/paperless_mail/tests/samples/sample.html.pdf b/src/paperless_mail/tests/samples/sample.html.pdf
new file mode 100644 (file)
index 0000000..24c2dbf
Binary files /dev/null and b/src/paperless_mail/tests/samples/sample.html.pdf differ
diff --git a/src/paperless_mail/tests/samples/sample.html.pdf.webp b/src/paperless_mail/tests/samples/sample.html.pdf.webp
new file mode 100644 (file)
index 0000000..5341576
Binary files /dev/null and b/src/paperless_mail/tests/samples/sample.html.pdf.webp differ
diff --git a/src/paperless_mail/tests/samples/sample.png b/src/paperless_mail/tests/samples/sample.png
new file mode 100644 (file)
index 0000000..162aada
Binary files /dev/null and b/src/paperless_mail/tests/samples/sample.png differ
diff --git a/src/paperless_mail/tests/samples/second.pdf b/src/paperless_mail/tests/samples/second.pdf
new file mode 100644 (file)
index 0000000..2955c8d
Binary files /dev/null and b/src/paperless_mail/tests/samples/second.pdf differ
diff --git a/src/paperless_mail/tests/samples/simple_text.eml b/src/paperless_mail/tests/samples/simple_text.eml
new file mode 100644 (file)
index 0000000..ae5cc57
--- /dev/null
@@ -0,0 +1,25 @@
+Return-Path: <mail@someserver.de>
+Delivered-To: mail@someserver.de
+Received: from mail.someserver.org ([::1])
+       by e1acdba3bd07 with LMTP
+       id KBKZGD2YR2NTCgQAjubtDA
+       (envelope-from <mail@someserver.de>)
+       for <mail@someserver.de>; Wed, 10 Oct 2022 11:40:46 +0200
+Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2BC9064C1616
+       for <some@one.de>; Wed, 12 Oct 2022 21:40:46 +0200 (CEST)
+Message-ID: <6e99e34d-e20a-80c4-ea61-d8234b612be9@someserver.de>
+Date: Wed, 12 Oct 2022 21:40:43 +0200
+MIME-Version: 1.0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
+ Thunderbird/102.3.1
+Content-Language: en-US
+To: some@one.de
+Cc: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de
+Bcc: fdf@fvf.de
+From: Some One <mail@someserver.de>
+Content-Type: text/plain; charset=UTF-8; format=flowed
+Content-Transfer-Encoding: 7bit
+X-Last-TLS-Session-Version: TLSv1.3
+Subject: Simple Text Mail
+
+This is just a simple Text Mail.
diff --git a/src/paperless_mail/tests/samples/simple_text.eml.pdf b/src/paperless_mail/tests/samples/simple_text.eml.pdf
new file mode 100644 (file)
index 0000000..678e6df
Binary files /dev/null and b/src/paperless_mail/tests/samples/simple_text.eml.pdf differ
diff --git a/src/paperless_mail/tests/samples/simple_text.eml.pdf.webp b/src/paperless_mail/tests/samples/simple_text.eml.pdf.webp
new file mode 100644 (file)
index 0000000..614aeee
Binary files /dev/null and b/src/paperless_mail/tests/samples/simple_text.eml.pdf.webp differ
diff --git a/src/paperless_mail/tests/test_api.py b/src/paperless_mail/tests/test_api.py
new file mode 100644 (file)
index 0000000..d20ab5c
--- /dev/null
@@ -0,0 +1,429 @@
+from django.contrib.auth.models import User
+from documents.models import Correspondent
+from documents.models import DocumentType
+from documents.models import Tag
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from rest_framework.test import APITestCase
+
+
+class TestAPIMailAccounts(APITestCase):
+    ENDPOINT = "/api/mail_accounts/"
+
+    def setUp(self):
+        super().setUp()
+
+        self.user = User.objects.create_superuser(username="temp_admin")
+        self.client.force_authenticate(user=self.user)
+
+    def test_get_mail_accounts(self):
+        """
+        GIVEN:
+            - Configured mail accounts
+        WHEN:
+            - API call is made to get mail accounts
+        THEN:
+            - Configured mail accounts are provided
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        response = self.client.get(self.ENDPOINT)
+
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.data["count"], 1)
+        returned_account1 = response.data["results"][0]
+
+        self.assertEqual(returned_account1["name"], account1.name)
+        self.assertEqual(returned_account1["username"], account1.username)
+        self.assertEqual(
+            returned_account1["password"],
+            "*" * len(account1.password),
+        )
+        self.assertEqual(returned_account1["imap_server"], account1.imap_server)
+        self.assertEqual(returned_account1["imap_port"], account1.imap_port)
+        self.assertEqual(returned_account1["imap_security"], account1.imap_security)
+        self.assertEqual(returned_account1["character_set"], account1.character_set)
+
+    def test_create_mail_account(self):
+        """
+        WHEN:
+            - API request is made to add a mail account
+        THEN:
+            - A new mail account is created
+        """
+
+        account1 = {
+            "name": "Email1",
+            "username": "username1",
+            "password": "password1",
+            "imap_server": "server.example.com",
+            "imap_port": 443,
+            "imap_security": MailAccount.ImapSecurity.SSL,
+            "character_set": "UTF-8",
+        }
+
+        response = self.client.post(
+            self.ENDPOINT,
+            data=account1,
+        )
+
+        self.assertEqual(response.status_code, 201)
+
+        returned_account1 = MailAccount.objects.get(name="Email1")
+
+        self.assertEqual(returned_account1.name, account1["name"])
+        self.assertEqual(returned_account1.username, account1["username"])
+        self.assertEqual(returned_account1.password, account1["password"])
+        self.assertEqual(returned_account1.imap_server, account1["imap_server"])
+        self.assertEqual(returned_account1.imap_port, account1["imap_port"])
+        self.assertEqual(returned_account1.imap_security, account1["imap_security"])
+        self.assertEqual(returned_account1.character_set, account1["character_set"])
+
+    def test_delete_mail_account(self):
+        """
+        GIVEN:
+            - Existing mail account
+        WHEN:
+            - API request is made to delete a mail account
+        THEN:
+            - Account is deleted
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        response = self.client.delete(
+            f"{self.ENDPOINT}{account1.pk}/",
+        )
+
+        self.assertEqual(response.status_code, 204)
+
+        self.assertEqual(len(MailAccount.objects.all()), 0)
+
+    def test_update_mail_account(self):
+        """
+        GIVEN:
+            - Existing mail accounts
+        WHEN:
+            - API request is made to update mail account
+        THEN:
+            - The mail account is updated, password only updated if not '****'
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        response = self.client.patch(
+            f"{self.ENDPOINT}{account1.pk}/",
+            data={
+                "name": "Updated Name 1",
+                "password": "******",
+            },
+        )
+
+        self.assertEqual(response.status_code, 200)
+
+        returned_account1 = MailAccount.objects.get(pk=account1.pk)
+        self.assertEqual(returned_account1.name, "Updated Name 1")
+        self.assertEqual(returned_account1.password, account1.password)
+
+        response = self.client.patch(
+            f"{self.ENDPOINT}{account1.pk}/",
+            data={
+                "name": "Updated Name 2",
+                "password": "123xyz",
+            },
+        )
+
+        self.assertEqual(response.status_code, 200)
+
+        returned_account2 = MailAccount.objects.get(pk=account1.pk)
+        self.assertEqual(returned_account2.name, "Updated Name 2")
+        self.assertEqual(returned_account2.password, "123xyz")
+
+
+class TestAPIMailRules(APITestCase):
+    ENDPOINT = "/api/mail_rules/"
+
+    def setUp(self):
+        super().setUp()
+
+        self.user = User.objects.create_superuser(username="temp_admin")
+        self.client.force_authenticate(user=self.user)
+
+    def test_get_mail_rules(self):
+        """
+        GIVEN:
+            - Configured mail accounts and rules
+        WHEN:
+            - API call is made to get mail rules
+        THEN:
+            - Configured mail rules are provided
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        rule1 = MailRule.objects.create(
+            name="Rule1",
+            account=account1,
+            folder="INBOX",
+            filter_from="from@example.com",
+            filter_subject="subject",
+            filter_body="body",
+            filter_attachment_filename="file.pdf",
+            maximum_age=30,
+            action=MailRule.MailAction.MARK_READ,
+            assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+            assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+            order=0,
+            attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+        )
+
+        response = self.client.get(self.ENDPOINT)
+
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.data["count"], 1)
+        returned_rule1 = response.data["results"][0]
+
+        self.assertEqual(returned_rule1["name"], rule1.name)
+        self.assertEqual(returned_rule1["account"], account1.pk)
+        self.assertEqual(returned_rule1["folder"], rule1.folder)
+        self.assertEqual(returned_rule1["filter_from"], rule1.filter_from)
+        self.assertEqual(returned_rule1["filter_subject"], rule1.filter_subject)
+        self.assertEqual(returned_rule1["filter_body"], rule1.filter_body)
+        self.assertEqual(
+            returned_rule1["filter_attachment_filename"],
+            rule1.filter_attachment_filename,
+        )
+        self.assertEqual(returned_rule1["maximum_age"], rule1.maximum_age)
+        self.assertEqual(returned_rule1["action"], rule1.action)
+        self.assertEqual(returned_rule1["assign_title_from"], rule1.assign_title_from)
+        self.assertEqual(
+            returned_rule1["assign_correspondent_from"],
+            rule1.assign_correspondent_from,
+        )
+        self.assertEqual(returned_rule1["order"], rule1.order)
+        self.assertEqual(returned_rule1["attachment_type"], rule1.attachment_type)
+
+    def test_create_mail_rule(self):
+        """
+        GIVEN:
+            - Configured mail account exists
+        WHEN:
+            - API request is made to add a mail rule
+        THEN:
+            - A new mail rule is created
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        tag = Tag.objects.create(
+            name="t",
+        )
+
+        correspondent = Correspondent.objects.create(
+            name="c",
+        )
+
+        document_type = DocumentType.objects.create(
+            name="dt",
+        )
+
+        rule1 = {
+            "name": "Rule1",
+            "account": account1.pk,
+            "folder": "INBOX",
+            "filter_from": "from@example.com",
+            "filter_subject": "subject",
+            "filter_body": "body",
+            "filter_attachment_filename": "file.pdf",
+            "maximum_age": 30,
+            "action": MailRule.MailAction.MARK_READ,
+            "assign_title_from": MailRule.TitleSource.FROM_SUBJECT,
+            "assign_correspondent_from": MailRule.CorrespondentSource.FROM_NOTHING,
+            "order": 0,
+            "attachment_type": MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+            "action_parameter": "parameter",
+            "assign_tags": [tag.pk],
+            "assign_correspondent": correspondent.pk,
+            "assign_document_type": document_type.pk,
+        }
+
+        response = self.client.post(
+            self.ENDPOINT,
+            data=rule1,
+        )
+
+        self.assertEqual(response.status_code, 201)
+
+        response = self.client.get(self.ENDPOINT)
+
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.data["count"], 1)
+        returned_rule1 = response.data["results"][0]
+
+        self.assertEqual(returned_rule1["name"], rule1["name"])
+        self.assertEqual(returned_rule1["account"], account1.pk)
+        self.assertEqual(returned_rule1["folder"], rule1["folder"])
+        self.assertEqual(returned_rule1["filter_from"], rule1["filter_from"])
+        self.assertEqual(returned_rule1["filter_subject"], rule1["filter_subject"])
+        self.assertEqual(returned_rule1["filter_body"], rule1["filter_body"])
+        self.assertEqual(
+            returned_rule1["filter_attachment_filename"],
+            rule1["filter_attachment_filename"],
+        )
+        self.assertEqual(returned_rule1["maximum_age"], rule1["maximum_age"])
+        self.assertEqual(returned_rule1["action"], rule1["action"])
+        self.assertEqual(
+            returned_rule1["assign_title_from"],
+            rule1["assign_title_from"],
+        )
+        self.assertEqual(
+            returned_rule1["assign_correspondent_from"],
+            rule1["assign_correspondent_from"],
+        )
+        self.assertEqual(returned_rule1["order"], rule1["order"])
+        self.assertEqual(returned_rule1["attachment_type"], rule1["attachment_type"])
+        self.assertEqual(returned_rule1["action_parameter"], rule1["action_parameter"])
+        self.assertEqual(
+            returned_rule1["assign_correspondent"],
+            rule1["assign_correspondent"],
+        )
+        self.assertEqual(
+            returned_rule1["assign_document_type"],
+            rule1["assign_document_type"],
+        )
+        self.assertEqual(returned_rule1["assign_tags"], rule1["assign_tags"])
+
+    def test_delete_mail_rule(self):
+        """
+        GIVEN:
+            - Existing mail rule
+        WHEN:
+            - API request is made to delete a mail rule
+        THEN:
+            - Rule is deleted
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        rule1 = MailRule.objects.create(
+            name="Rule1",
+            account=account1,
+            folder="INBOX",
+            filter_from="from@example.com",
+            filter_subject="subject",
+            filter_body="body",
+            filter_attachment_filename="file.pdf",
+            maximum_age=30,
+            action=MailRule.MailAction.MARK_READ,
+            assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+            assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+            order=0,
+            attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+        )
+
+        response = self.client.delete(
+            f"{self.ENDPOINT}{rule1.pk}/",
+        )
+
+        self.assertEqual(response.status_code, 204)
+
+        self.assertEqual(len(MailRule.objects.all()), 0)
+
+    def test_update_mail_rule(self):
+        """
+        GIVEN:
+            - Existing mail rule
+        WHEN:
+            - API request is made to update mail rule
+        THEN:
+            - The mail rule is updated
+        """
+
+        account1 = MailAccount.objects.create(
+            name="Email1",
+            username="username1",
+            password="password1",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        rule1 = MailRule.objects.create(
+            name="Rule1",
+            account=account1,
+            folder="INBOX",
+            filter_from="from@example.com",
+            filter_subject="subject",
+            filter_body="body",
+            filter_attachment_filename="file.pdf",
+            maximum_age=30,
+            action=MailRule.MailAction.MARK_READ,
+            assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+            assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+            order=0,
+            attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+        )
+
+        response = self.client.patch(
+            f"{self.ENDPOINT}{rule1.pk}/",
+            data={
+                "name": "Updated Name 1",
+                "action": MailRule.MailAction.DELETE,
+            },
+        )
+
+        self.assertEqual(response.status_code, 200)
+
+        returned_rule1 = MailRule.objects.get(pk=rule1.pk)
+        self.assertEqual(returned_rule1.name, "Updated Name 1")
+        self.assertEqual(returned_rule1.action, MailRule.MailAction.DELETE)
diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py
new file mode 100644 (file)
index 0000000..e022679
--- /dev/null
@@ -0,0 +1,688 @@
+import datetime
+import os
+from unittest import mock
+
+from django.test import TestCase
+from documents.parsers import ParseError
+from paperless_mail.parsers import MailDocumentParser
+
+
+class TestParser(TestCase):
+    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
+    def setUp(self) -> None:
+        self.parser = MailDocumentParser(logging_group=None)
+
+    def tearDown(self) -> None:
+        self.parser.cleanup()
+
+    def test_get_parsed_missing_file(self):
+        """
+        GIVEN:
+            - Fresh parser
+        WHEN:
+            - A nonexistent file should be parsed
+        THEN:
+            - An Exception is thrown
+        """
+        # Check if exception is raised when parsing fails.
+        self.assertRaises(
+            ParseError,
+            self.parser.get_parsed,
+            os.path.join(self.SAMPLE_FILES, "na"),
+        )
+
+    def test_get_parsed_broken_file(self):
+        """
+        GIVEN:
+            - Fresh parser
+        WHEN:
+            - A faulty file should be parsed
+        THEN:
+            - An Exception is thrown
+        """
+        # Check if exception is raised when the mail is faulty.
+        self.assertRaises(
+            ParseError,
+            self.parser.get_parsed,
+            os.path.join(self.SAMPLE_FILES, "broken.eml"),
+        )
+
+    def test_get_parsed_simple_text_mail(self):
+        """
+        GIVEN:
+            - Fresh parser
+        WHEN:
+            - A .eml file should be parsed
+        THEN:
+            - The content of the mail should be available in the parse result.
+        """
+        # Parse Test file and check relevant content
+        parsed1 = self.parser.get_parsed(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+        )
+
+        self.assertEqual(parsed1.date.year, 2022)
+        self.assertEqual(parsed1.date.month, 10)
+        self.assertEqual(parsed1.date.day, 12)
+        self.assertEqual(parsed1.date.hour, 21)
+        self.assertEqual(parsed1.date.minute, 40)
+        self.assertEqual(parsed1.date.second, 43)
+        self.assertEqual(parsed1.date.tzname(), "UTC+02:00")
+        self.assertEqual(parsed1.from_, "mail@someserver.de")
+        self.assertEqual(parsed1.subject, "Simple Text Mail")
+        self.assertEqual(parsed1.text, "This is just a simple Text Mail.\n")
+        self.assertEqual(parsed1.to, ("some@one.de",))
+
+    def test_get_parsed_reparse(self):
+        """
+        GIVEN:
+            - An E-Mail was parsed
+        WHEN:
+            - Another .eml file should be parsed
+        THEN:
+            - The parser should not retry to parse and return the old results
+        """
+        # Parse Test file and check relevant content
+        parsed1 = self.parser.get_parsed(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+        )
+        # Check if same parsed object as before is returned, even if another file is given.
+        parsed2 = self.parser.get_parsed(
+            os.path.join(os.path.join(self.SAMPLE_FILES, "html.eml")),
+        )
+        self.assertEqual(parsed1, parsed2)
+
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+    @mock.patch("paperless_mail.parsers.make_thumbnail_from_pdf")
+    def test_get_thumbnail(
+        self,
+        mock_make_thumbnail_from_pdf: mock.MagicMock,
+        mock_generate_pdf: mock.MagicMock,
+    ):
+        """
+        GIVEN:
+            - An E-Mail was parsed
+        WHEN:
+            - The Thumbnail is requested
+        THEN:
+            - The parser should call the functions which generate the thumbnail
+        """
+        mocked_return = "Passing the return value through.."
+        mock_make_thumbnail_from_pdf.return_value = mocked_return
+
+        mock_generate_pdf.return_value = "Mocked return value.."
+
+        thumb = self.parser.get_thumbnail(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+            "message/rfc822",
+        )
+        self.assertEqual(
+            self.parser.archive_path,
+            mock_make_thumbnail_from_pdf.call_args_list[0].args[0],
+        )
+        self.assertEqual(
+            self.parser.tempdir,
+            mock_make_thumbnail_from_pdf.call_args_list[0].args[1],
+        )
+        self.assertEqual(mocked_return, thumb)
+
+    @mock.patch("documents.loggers.LoggingMixin.log")
+    def test_extract_metadata_fail(self, m: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - Metadata extraction is triggered for nonexistent file
+        THEN:
+            - A log warning should be generated
+        """
+        # Validate if warning is logged when parsing fails
+        self.assertEqual([], self.parser.extract_metadata("na", "message/rfc822"))
+        self.assertEqual("warning", m.call_args[0][0])
+
+    def test_extract_metadata(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - Metadata extraction is triggered
+        THEN:
+            - metadata is returned
+        """
+        # Validate Metadata parsing returns the expected results
+        metadata = self.parser.extract_metadata(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+            "message/rfc822",
+        )
+
+        self.assertIn(
+            {"namespace": "", "prefix": "", "key": "attachments", "value": ""},
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "",
+                "key": "date",
+                "value": "2022-10-12 21:40:43 UTC+02:00",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "content-language",
+                "value": "en-US",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "content-type",
+                "value": "text/plain; charset=UTF-8; format=flowed",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "date",
+                "value": "Wed, 12 Oct 2022 21:40:43 +0200",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "delivered-to",
+                "value": "mail@someserver.de",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "from",
+                "value": "Some One <mail@someserver.de>",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "message-id",
+                "value": "<6e99e34d-e20a-80c4-ea61-d8234b612be9@someserver.de>",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "mime-version",
+                "value": "1.0",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "received",
+                "value": "from mail.someserver.org ([::1])\n\tby e1acdba3bd07 with LMTP\n\tid KBKZGD2YR2NTCgQAjubtDA\n\t(envelope-from <mail@someserver.de>)\n\tfor <mail@someserver.de>; Wed, 10 Oct 2022 11:40:46 +0200, from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2BC9064C1616\n\tfor <some@one.de>; Wed, 12 Oct 2022 21:40:46 +0200 (CEST)",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "return-path",
+                "value": "<mail@someserver.de>",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "subject",
+                "value": "Simple Text Mail",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {"namespace": "", "prefix": "header", "key": "to", "value": "some@one.de"},
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "user-agent",
+                "value": "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n Thunderbird/102.3.1",
+            },
+            metadata,
+        )
+        self.assertIn(
+            {
+                "namespace": "",
+                "prefix": "header",
+                "key": "x-last-tls-session-version",
+                "value": "TLSv1.3",
+            },
+            metadata,
+        )
+
+    def test_parse_na(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - parsing is attempted with nonexistent file
+        THEN:
+            - Exception is thrown
+        """
+        # Check if exception is raised when parsing fails.
+        self.assertRaises(
+            ParseError,
+            self.parser.parse,
+            os.path.join(self.SAMPLE_FILES, "na"),
+            "message/rfc822",
+        )
+
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.tika_parse")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+    def test_parse_html_eml(self, n, mock_tika_parse: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - parsing is done with html mail
+        THEN:
+            - Tika is called, parsed information from non html parts is available
+        """
+        # Validate parsing returns the expected results
+        text_expected = "Subject: HTML Message\n\nFrom: Name <someone@example.de>\n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return\n\nSome Text and an embedded image."
+        mock_tika_parse.return_value = "tika return"
+
+        self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822")
+
+        self.assertEqual(text_expected, self.parser.text)
+        self.assertEqual(
+            datetime.datetime(
+                2022,
+                10,
+                15,
+                11,
+                23,
+                19,
+                tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
+            ),
+            self.parser.date,
+        )
+
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+    def test_parse_simple_eml(self, n):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - parsing is done with non html mail
+        THEN:
+            - parsed information is available
+        """
+        # Validate parsing returns the expected results
+
+        self.parser.parse(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+            "message/rfc822",
+        )
+        text_expected = "Subject: Simple Text Mail\n\nFrom: Some One <mail@someserver.de>\n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n\n\nThis is just a simple Text Mail."
+        self.assertEqual(text_expected, self.parser.text)
+        self.assertEqual(
+            datetime.datetime(
+                2022,
+                10,
+                12,
+                21,
+                40,
+                43,
+                tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
+            ),
+            self.parser.date,
+        )
+
+        # Just check if file exists, the unittest for generate_pdf() goes deeper.
+        self.assertTrue(os.path.isfile(self.parser.archive_path))
+
+    @mock.patch("paperless_mail.parsers.parser.from_buffer")
+    def test_tika_parse_unsuccessful(self, mock_from_buffer: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing fails
+        THEN:
+            - the parser should return an empty string
+        """
+        # Check unsuccessful parsing
+        mock_from_buffer.return_value = {"content": None}
+        parsed = self.parser.tika_parse(None)
+        self.assertEqual("", parsed)
+
+    @mock.patch("paperless_mail.parsers.parser.from_buffer")
+    def test_tika_parse(self, mock_from_buffer: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing is called
+        THEN:
+            - a web request to tika shall be done and the reply es returned
+        """
+        html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+        expected_text = "Some Text"
+
+        # Check successful parsing
+        mock_from_buffer.return_value = {"content": expected_text}
+        parsed = self.parser.tika_parse(html)
+        self.assertEqual(expected_text, parsed.strip())
+        mock_from_buffer.assert_called_with(html, self.parser.tika_server)
+
+    @mock.patch("paperless_mail.parsers.parser.from_buffer")
+    def test_tika_parse_exception(self, mock_from_buffer: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing is called and an exception is thrown on the request
+        THEN:
+            - a ParseError Exception is thrown
+        """
+        html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+
+        # Check ParseError
+        def my_side_effect():
+            raise Exception("Test")
+
+        mock_from_buffer.side_effect = my_side_effect
+        self.assertRaises(ParseError, self.parser.tika_parse, html)
+
+    def test_tika_parse_unreachable(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing is called but tika is not available
+        THEN:
+            - a ParseError Exception is thrown
+        """
+        html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+
+        # Check if exception is raised when Tika cannot be reached.
+        self.parser.tika_server = ""
+        self.assertRaises(ParseError, self.parser.tika_parse, html)
+
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+    def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation is requested but gotenberg can not be reached
+        THEN:
+            - a ParseError Exception is thrown
+        """
+        m.return_value = b""
+        n.return_value = b""
+
+        # Check if exception is raised when the pdf can not be created.
+        self.parser.gotenberg_server = ""
+        self.assertRaises(
+            ParseError,
+            self.parser.generate_pdf,
+            os.path.join(self.SAMPLE_FILES, "html.eml"),
+        )
+
+    def test_generate_pdf_exception(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation is requested but parsing throws an exception
+        THEN:
+            - a ParseError Exception is thrown
+        """
+        # Check if exception is raised when the mail can not be parsed.
+        self.assertRaises(
+            ParseError,
+            self.parser.generate_pdf,
+            os.path.join(self.SAMPLE_FILES, "broken.eml"),
+        )
+
+    @mock.patch("paperless_mail.parsers.requests.post")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+    def test_generate_pdf(
+        self,
+        mock_generate_pdf_from_html: mock.MagicMock,
+        mock_generate_pdf_from_mail: mock.MagicMock,
+        mock_post: mock.MagicMock,
+    ):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation is requested
+        THEN:
+            - gotenberg is called and the resulting file is returned
+        """
+        mock_generate_pdf_from_mail.return_value = b"Mail Return"
+        mock_generate_pdf_from_html.return_value = b"HTML Return"
+
+        mock_response = mock.MagicMock()
+        mock_response.content = b"Content"
+        mock_post.return_value = mock_response
+        pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml"))
+        self.assertTrue(os.path.isfile(pdf_path))
+
+        mock_generate_pdf_from_mail.assert_called_once_with(
+            self.parser.get_parsed(None),
+        )
+        mock_generate_pdf_from_html.assert_called_once_with(
+            self.parser.get_parsed(None).html,
+            self.parser.get_parsed(None).attachments,
+        )
+        self.assertEqual(
+            self.parser.gotenberg_server + "/forms/pdfengines/merge",
+            mock_post.call_args.args[0],
+        )
+        self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+        self.assertEqual(
+            b"Mail Return",
+            mock_post.call_args.kwargs["files"]["1_mail.pdf"][1].read(),
+        )
+        self.assertEqual(
+            b"HTML Return",
+            mock_post.call_args.kwargs["files"]["2_html.pdf"][1].read(),
+        )
+
+        mock_response.raise_for_status.assert_called_once()
+
+        with open(pdf_path, "rb") as file:
+            self.assertEqual(b"Content", file.read())
+
+    def test_mail_to_html(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - conversion from eml to html is requested
+        THEN:
+            - html should be returned
+        """
+        mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+        html_handle = self.parser.mail_to_html(mail)
+        html_received = html_handle.read()
+
+        with open(
+            os.path.join(self.SAMPLE_FILES, "html.eml.html"),
+        ) as html_expected_handle:
+            html_expected = html_expected_handle.read()
+
+            self.assertHTMLEqual(html_expected, html_received)
+
+    @mock.patch("paperless_mail.parsers.requests.post")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.mail_to_html")
+    def test_generate_pdf_from_mail(
+        self,
+        mock_mail_to_html: mock.MagicMock,
+        mock_post: mock.MagicMock,
+    ):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - conversion of PDF from .eml is requested
+        THEN:
+            - gotenberg should be called with valid intermediary html files, the resulting pdf is returned
+        """
+        mock_response = mock.MagicMock()
+        mock_response.content = b"Content"
+        mock_post.return_value = mock_response
+
+        mock_mail_to_html.return_value = "Testresponse"
+
+        mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+        retval = self.parser.generate_pdf_from_mail(mail)
+        self.assertEqual(b"Content", retval)
+
+        mock_mail_to_html.assert_called_once_with(mail)
+        self.assertEqual(
+            self.parser.gotenberg_server + "/forms/chromium/convert/html",
+            mock_post.call_args.args[0],
+        )
+        self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+        self.assertEqual(
+            {
+                "marginTop": "0.1",
+                "marginBottom": "0.1",
+                "marginLeft": "0.1",
+                "marginRight": "0.1",
+                "paperWidth": "8.27",
+                "paperHeight": "11.7",
+                "scale": "1.0",
+            },
+            mock_post.call_args.kwargs["data"],
+        )
+        self.assertEqual(
+            "Testresponse",
+            mock_post.call_args.kwargs["files"]["html"][1],
+        )
+        self.assertEqual(
+            "output.css",
+            mock_post.call_args.kwargs["files"]["css"][0],
+        )
+
+        mock_response.raise_for_status.assert_called_once()
+
+    def test_transform_inline_html(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - transforming of html content from an email with an inline image attachment is requested
+        THEN:
+            - html is returned and sanitized
+        """
+
+        class MailAttachmentMock:
+            def __init__(self, payload, content_id):
+                self.payload = payload
+                self.content_id = content_id
+
+        result = None
+
+        with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+            with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+                html = html_file.read()
+                png = png_file.read()
+                attachments = [
+                    MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+                ]
+                result = self.parser.transform_inline_html(html, attachments)
+
+        resulting_html = result[-1][1].read()
+        self.assertTrue(result[-1][0] == "index.html")
+        self.assertIn(result[0][0], resulting_html)
+        self.assertNotIn("<script", resulting_html.lower())
+
+    @mock.patch("paperless_mail.parsers.requests.post")
+    def test_generate_pdf_from_html(self, mock_post: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - generating pdf from html with inline attachments is attempted
+        THEN:
+            - gotenberg is called with the correct parameters and the resulting pdf is returned
+        """
+
+        class MailAttachmentMock:
+            def __init__(self, payload, content_id):
+                self.payload = payload
+                self.content_id = content_id
+
+        mock_response = mock.MagicMock()
+        mock_response.content = b"Content"
+        mock_post.return_value = mock_response
+
+        result = None
+
+        with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+            with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+                html = html_file.read()
+                png = png_file.read()
+                attachments = [
+                    MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+                ]
+                result = self.parser.generate_pdf_from_html(html, attachments)
+
+        self.assertEqual(
+            self.parser.gotenberg_server + "/forms/chromium/convert/html",
+            mock_post.call_args.args[0],
+        )
+        self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+        self.assertEqual(
+            {
+                "marginTop": "0.1",
+                "marginBottom": "0.1",
+                "marginLeft": "0.1",
+                "marginRight": "0.1",
+                "paperWidth": "8.27",
+                "paperHeight": "11.7",
+                "scale": "1.0",
+            },
+            mock_post.call_args.kwargs["data"],
+        )
+
+        # read to assert it is a file like object.
+        mock_post.call_args.kwargs["files"]["cidpart1pNdUSz0sD3NqVtPgexamplede"][
+            1
+        ].read()
+        mock_post.call_args.kwargs["files"]["index.html"][1].read()
+
+        mock_response.raise_for_status.assert_called_once()
+
+        self.assertEqual(b"Content", result)
diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py
new file mode 100644 (file)
index 0000000..9a9816f
--- /dev/null
@@ -0,0 +1,361 @@
+import os
+from unittest import mock
+from urllib.error import HTTPError
+from urllib.request import urlopen
+
+import pytest
+from django.test import TestCase
+from documents.parsers import ParseError
+from documents.parsers import run_convert
+from imagehash import average_hash
+from paperless_mail.parsers import MailDocumentParser
+from pdfminer.high_level import extract_text
+from PIL import Image
+
+
+class TestParserLive(TestCase):
+    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
+    def setUp(self) -> None:
+        self.parser = MailDocumentParser(logging_group=None)
+
+    def tearDown(self) -> None:
+        self.parser.cleanup()
+
+    @staticmethod
+    def imagehash(file, hash_size=18):
+        return f"{average_hash(Image.open(file), hash_size)}"
+
+    # Only run if convert is available
+    @pytest.mark.skipif(
+        "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+        reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+    )
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+    def test_get_thumbnail(self, mock_generate_pdf: mock.MagicMock):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - The Thumbnail is requested
+        THEN:
+            - The returned thumbnail image file is as expected
+        """
+        mock_generate_pdf.return_value = os.path.join(
+            self.SAMPLE_FILES,
+            "simple_text.eml.pdf",
+        )
+        thumb = self.parser.get_thumbnail(
+            os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+            "message/rfc822",
+        )
+        self.assertTrue(os.path.isfile(thumb))
+
+        expected = os.path.join(self.SAMPLE_FILES, "simple_text.eml.pdf.webp")
+
+        self.assertEqual(
+            self.imagehash(thumb),
+            self.imagehash(expected),
+            f"Created Thumbnail {thumb} differs from expected file {expected}",
+        )
+
+    @pytest.mark.skipif(
+        "TIKA_LIVE" not in os.environ,
+        reason="No tika server",
+    )
+    def test_tika_parse_successful(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing is called
+        THEN:
+            - a web request to tika shall be done and the reply es returned
+        """
+        html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+        expected_text = "Some Text"
+
+        # Check successful parsing
+        parsed = self.parser.tika_parse(html)
+        self.assertEqual(expected_text, parsed.strip())
+
+    @pytest.mark.skipif(
+        "TIKA_LIVE" not in os.environ,
+        reason="No tika server",
+    )
+    def test_tika_parse_unsuccessful(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - tika parsing fails
+        THEN:
+            - the parser should return an empty string
+        """
+        # Check unsuccessful parsing
+        parsed = self.parser.tika_parse(None)
+        self.assertEqual("", parsed)
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+    @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+    def test_generate_pdf_gotenberg_merging(
+        self,
+        mock_generate_pdf_from_html: mock.MagicMock,
+        mock_generate_pdf_from_mail: mock.MagicMock,
+    ):
+        """
+        GIVEN:
+            - Intermediary pdfs to be merged
+        WHEN:
+            - pdf generation is requested with html file requiring merging of pdfs
+        THEN:
+            - gotenberg is called to merge files and the resulting file is returned
+        """
+        with open(os.path.join(self.SAMPLE_FILES, "first.pdf"), "rb") as first:
+            mock_generate_pdf_from_mail.return_value = first.read()
+
+        with open(os.path.join(self.SAMPLE_FILES, "second.pdf"), "rb") as second:
+            mock_generate_pdf_from_html.return_value = second.read()
+
+        pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml"))
+        self.assertTrue(os.path.isfile(pdf_path))
+
+        extracted = extract_text(pdf_path)
+        expected = (
+            "first\tPDF\tto\tbe\tmerged.\n\n\x0csecond\tPDF\tto\tbe\tmerged.\n\n\x0c"
+        )
+        self.assertEqual(expected, extracted)
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    def test_generate_pdf_from_mail_no_convert(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation from simple eml file is requested
+        THEN:
+            - gotenberg is called and the resulting file is returned and contains the expected text.
+        """
+        mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+        pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf")
+
+        with open(pdf_path, "wb") as file:
+            file.write(self.parser.generate_pdf_from_mail(mail))
+
+        extracted = extract_text(pdf_path)
+        expected = extract_text(os.path.join(self.SAMPLE_FILES, "html.eml.pdf"))
+        self.assertEqual(expected, extracted)
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    # Only run if convert is available
+    @pytest.mark.skipif(
+        "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+        reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+    )
+    def test_generate_pdf_from_mail(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation from simple eml file is requested
+        THEN:
+            - gotenberg is called and the resulting file is returned and look as expected.
+        """
+        mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+        pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf")
+
+        with open(pdf_path, "wb") as file:
+            file.write(self.parser.generate_pdf_from_mail(mail))
+
+        converted = os.path.join(
+            self.parser.tempdir,
+            "html.eml.pdf.webp",
+        )
+        run_convert(
+            density=300,
+            scale="500x5000>",
+            alpha="remove",
+            strip=True,
+            trim=False,
+            auto_orient=True,
+            input_file=f"{pdf_path}",  # Do net define an index to convert all pages.
+            output_file=converted,
+            logging_group=None,
+        )
+        self.assertTrue(os.path.isfile(converted))
+        thumb_hash = self.imagehash(converted)
+
+        # The created pdf is not reproducible. But the converted image should always look the same.
+        expected_hash = self.imagehash(
+            os.path.join(self.SAMPLE_FILES, "html.eml.pdf.webp"),
+        )
+        self.assertEqual(
+            thumb_hash,
+            expected_hash,
+            f"PDF looks different. Check if {converted} looks weird.",
+        )
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    def test_generate_pdf_from_html_no_convert(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation from html eml file is requested
+        THEN:
+            - gotenberg is called and the resulting file is returned and contains the expected text.
+        """
+
+        class MailAttachmentMock:
+            def __init__(self, payload, content_id):
+                self.payload = payload
+                self.content_id = content_id
+
+        result = None
+
+        with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+            with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+                html = html_file.read()
+                png = png_file.read()
+                attachments = [
+                    MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+                ]
+                result = self.parser.generate_pdf_from_html(html, attachments)
+
+        pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf")
+
+        with open(pdf_path, "wb") as file:
+            file.write(result)
+
+        extracted = extract_text(pdf_path)
+        expected = extract_text(os.path.join(self.SAMPLE_FILES, "sample.html.pdf"))
+        self.assertEqual(expected, extracted)
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    # Only run if convert is available
+    @pytest.mark.skipif(
+        "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+        reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+    )
+    def test_generate_pdf_from_html(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - pdf generation from html eml file is requested
+        THEN:
+            - gotenberg is called and the resulting file is returned and look as expected.
+        """
+
+        class MailAttachmentMock:
+            def __init__(self, payload, content_id):
+                self.payload = payload
+                self.content_id = content_id
+
+        result = None
+
+        with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+            with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+                html = html_file.read()
+                png = png_file.read()
+                attachments = [
+                    MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+                ]
+                result = self.parser.generate_pdf_from_html(html, attachments)
+
+        pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf")
+
+        with open(pdf_path, "wb") as file:
+            file.write(result)
+
+        converted = os.path.join(self.parser.tempdir, "sample.html.pdf.webp")
+        run_convert(
+            density=300,
+            scale="500x5000>",
+            alpha="remove",
+            strip=True,
+            trim=False,
+            auto_orient=True,
+            input_file=f"{pdf_path}",  # Do net define an index to convert all pages.
+            output_file=converted,
+            logging_group=None,
+        )
+        self.assertTrue(os.path.isfile(converted))
+        thumb_hash = self.imagehash(converted)
+
+        # The created pdf is not reproducible. But the converted image should always look the same.
+        expected_hash = self.imagehash(
+            os.path.join(self.SAMPLE_FILES, "sample.html.pdf.webp"),
+        )
+
+        self.assertEqual(
+            thumb_hash,
+            expected_hash,
+            f"PDF looks different. Check if {converted} looks weird. "
+            f"If Rick Astley is shown, Gotenberg loads from web which is bad for Mail content.",
+        )
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    def test_online_image_exception_on_not_available(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - nonexistent image is requested
+        THEN:
+            - An exception shall be thrown
+        """
+        """
+        A public image is used in the html sample file. We have no control
+        whether this image stays online forever, so here we check if we can detect if is not
+        available anymore.
+        """
+
+        # Start by Testing if nonexistent URL really throws an Exception
+        self.assertRaises(
+            HTTPError,
+            urlopen,
+            "https://upload.wikimedia.org/wikipedia/en/f/f7/nonexistent.png",
+        )
+
+    @pytest.mark.skipif(
+        "GOTENBERG_LIVE" not in os.environ,
+        reason="No gotenberg server",
+    )
+    def test_is_online_image_still_available(self):
+        """
+        GIVEN:
+            - Fresh start
+        WHEN:
+            - A public image used in the html sample file is requested
+        THEN:
+            - No exception shall be thrown
+        """
+        """
+        A public image is used in the html sample file. We have no control
+        whether this image stays online forever, so here we check if it is still there
+        """
+
+        # Now check the URL used in samples/sample.html
+        urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png")
diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py
new file mode 100644 (file)
index 0000000..d86240c
--- /dev/null
@@ -0,0 +1,41 @@
+from paperless.views import StandardPagination
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from paperless_mail.serialisers import MailAccountSerializer
+from paperless_mail.serialisers import MailRuleSerializer
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.viewsets import ModelViewSet
+
+
+class MailAccountViewSet(ModelViewSet):
+    model = MailAccount
+
+    queryset = MailAccount.objects.all().order_by("pk")
+    serializer_class = MailAccountSerializer
+    pagination_class = StandardPagination
+    permission_classes = (IsAuthenticated,)
+
+    # TODO: user-scoped
+    # def get_queryset(self):
+    #     user = self.request.user
+    #     return MailAccount.objects.filter(user=user)
+
+    # def perform_create(self, serializer):
+    #     serializer.save(user=self.request.user)
+
+
+class MailRuleViewSet(ModelViewSet):
+    model = MailRule
+
+    queryset = MailRule.objects.all().order_by("pk")
+    serializer_class = MailRuleSerializer
+    pagination_class = StandardPagination
+    permission_classes = (IsAuthenticated,)
+
+    # TODO: user-scoped
+    # def get_queryset(self):
+    #     user = self.request.user
+    #     return MailRule.objects.filter(user=user)
+
+    # def perform_create(self, serializer):
+    #     serializer.save(user=self.request.user)
index 99780cad4660fe83f193cddb5f3c660f3899de83..ed5725d367cfbba642bc2a72f4360a719ac5c81f 100644 (file)
@@ -1,3 +1,4 @@
+import shutil
 import subprocess
 
 from django.conf import settings
@@ -7,10 +8,15 @@ from django.core.checks import Warning
 
 
 def get_tesseract_langs():
-    with subprocess.Popen(["tesseract", "--list-langs"], stdout=subprocess.PIPE) as p:
-        stdout, stderr = p.communicate()
+    proc = subprocess.run(
+        [shutil.which("tesseract"), "--list-langs"],
+        capture_output=True,
+    )
 
-    return stdout.decode().strip().split("\n")[1:]
+    # Decode bytes to string, split on newlines, trim out the header
+    proc_lines = proc.stdout.decode("utf8", errors="ignore").strip().split("\n")[1:]
+
+    return [x.strip() for x in proc_lines]
 
 
 @register()
index 405df07ce5fb85d81bfd6876941d72c2b75d523a..bde2ad25e196fdbd88aaa5ce78d309d35161c80d 100644 (file)
@@ -66,6 +66,7 @@ class RasterisedDocumentParser(DocumentParser):
             "image/tiff",
             "image/bmp",
             "image/gif",
+            "image/webp",
         ]
 
     def has_alpha(self, image):
@@ -95,7 +96,13 @@ class RasterisedDocumentParser(DocumentParser):
             return None
 
     def extract_text(self, sidecar_file, pdf_file):
-        if sidecar_file and os.path.isfile(sidecar_file):
+        # When re-doing OCR, the sidecar contains ONLY the new text, not
+        # the whole text, so do not utilize it in that case
+        if (
+            sidecar_file is not None
+            and os.path.isfile(sidecar_file)
+            and settings.OCR_MODE != "redo"
+        ):
             with open(sidecar_file) as f:
                 text = f.read()
 
@@ -142,7 +149,7 @@ class RasterisedDocumentParser(DocumentParser):
             "input_file": input_file,
             "output_file": output_file,
             # need to use threads, since this will be run in daemonized
-            # processes by django-q.
+            # processes via the task library.
             "use_threads": True,
             "jobs": settings.THREADS_PER_WORKER,
             "language": settings.OCR_LANGUAGE,
@@ -165,9 +172,11 @@ class RasterisedDocumentParser(DocumentParser):
             if settings.OCR_MODE == "redo":
                 ocrmypdf_args["clean"] = True
             else:
+                # --clean-final is not compatible with --redo-ocr
                 ocrmypdf_args["clean_final"] = True
 
-        if settings.OCR_DESKEW and not settings.OCR_MODE == "redo":
+        if settings.OCR_DESKEW and settings.OCR_MODE != "redo":
+            # --deskew is not compatible with --redo-ocr
             ocrmypdf_args["deskew"] = True
 
         if settings.OCR_ROTATE_PAGES:
@@ -263,7 +272,7 @@ class RasterisedDocumentParser(DocumentParser):
 
         # Either no text was in the original or there should be an archive
         # file created, so OCR the file and create an archive with any
-        # test located via OCR
+        # text located via OCR
 
         import ocrmypdf
         from ocrmypdf import InputFileError, EncryptedPdfError
index 85f2cab9fec12bbdcee3dba12dfb896a84c2a45a..c4fd1e039583740a0b9e9c1930b95ad88ae5a117 100644 (file)
@@ -15,5 +15,6 @@ def tesseract_consumer_declaration(sender, **kwargs):
             "image/tiff": ".tif",
             "image/gif": ".gif",
             "image/bmp": ".bmp",
+            "image/webp": ".webp",
         },
     }
diff --git a/src/paperless_tesseract/tests/samples/document.webp b/src/paperless_tesseract/tests/samples/document.webp
new file mode 100755 (executable)
index 0000000..c19ba29
Binary files /dev/null and b/src/paperless_tesseract/tests/samples/document.webp differ
diff --git a/src/paperless_tesseract/tests/samples/single-page-mixed.pdf b/src/paperless_tesseract/tests/samples/single-page-mixed.pdf
new file mode 100644 (file)
index 0000000..2281fd3
Binary files /dev/null and b/src/paperless_tesseract/tests/samples/single-page-mixed.pdf differ
index cfac11d3c93888f10b2b81b7bdd2c96eef13fa94..4d46ad9a398260ebb687823baa3cc9cf344a977f 100644 (file)
@@ -27,3 +27,40 @@ class TestChecks(TestCase):
         msgs = check_default_language_available(None)
         self.assertEqual(len(msgs), 1)
         self.assertEqual(msgs[0].level, ERROR)
+
+    @override_settings(OCR_LANGUAGE="chi_sim")
+    @mock.patch("paperless_tesseract.checks.get_tesseract_langs")
+    def test_multi_part_language(self, m):
+        """
+        GIVEN:
+            - An OCR language which is multi part (ie chi-sim)
+            - The language is correctly formatted
+        WHEN:
+            - Installed packages are checked
+        THEN:
+            - No errors are reported
+        """
+        m.return_value = ["chi_sim", "eng"]
+
+        msgs = check_default_language_available(None)
+
+        self.assertEqual(len(msgs), 0)
+
+    @override_settings(OCR_LANGUAGE="chi-sim")
+    @mock.patch("paperless_tesseract.checks.get_tesseract_langs")
+    def test_multi_part_language_bad_format(self, m):
+        """
+        GIVEN:
+            - An OCR language which is multi part (ie chi-sim)
+            - The language is correctly NOT formatted
+        WHEN:
+            - Installed packages are checked
+        THEN:
+            - No errors are reported
+        """
+        m.return_value = ["chi_sim", "eng"]
+
+        msgs = check_default_language_available(None)
+
+        self.assertEqual(len(msgs), 1)
+        self.assertEqual(msgs[0].level, ERROR)
index 858cc7701327726cc0a9d55508097d24221d8e54..a0550bde93d4531d36e848930048e7967ae6c783 100644 (file)
@@ -37,6 +37,9 @@ class FakeImageFile(ContextManager):
 
 
 class TestParser(DirectoriesMixin, TestCase):
+
+    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
     def assertContainsStrings(self, content, strings):
         # Asserts that all strings appear in content, in the given order.
         indices = []
@@ -47,14 +50,18 @@ class TestParser(DirectoriesMixin, TestCase):
                 self.fail(f"'{s}' is not in '{content}'")
         self.assertListEqual(indices, sorted(indices))
 
-    text_cases = [
-        ("simple     string", "simple string"),
-        ("simple    newline\n   testing string", "simple newline\ntesting string"),
-        ("utf-8   строка с пробелами в конце  ", "utf-8 строка с пробелами в конце"),
-    ]
-
     def test_post_process_text(self):
-        for source, result in self.text_cases:
+
+        text_cases = [
+            ("simple     string", "simple string"),
+            ("simple    newline\n   testing string", "simple newline\ntesting string"),
+            (
+                "utf-8   строка с пробелами в конце  ",
+                "utf-8 строка с пробелами в конце",
+            ),
+        ]
+
+        for source, result in text_cases:
             actual_result = post_process_text(source)
             self.assertEqual(
                 result,
@@ -66,8 +73,6 @@ class TestParser(DirectoriesMixin, TestCase):
                 ),
             )
 
-    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
-
     def test_get_text_from_pdf(self):
         parser = RasterisedDocumentParser(uuid.uuid4())
         text = parser.extract_text(
@@ -461,6 +466,45 @@ class TestParser(DirectoriesMixin, TestCase):
 
         self.assertIn("[OCR skipped on page(s) 4-6]", sidecar)
 
+    @override_settings(OCR_MODE="redo")
+    def test_single_page_mixed(self):
+        """
+        GIVEN:
+            - File with some text contained in images and some in text layer
+            - Text and images are mixed on the same page
+            - OCR mode set to redo
+        WHEN:
+            - Document is parsed
+        THEN:
+            - Text from images is extracted
+            - Full content of the file is parsed (not just the image text)
+            - An archive file is created with the OCRd text and the original text
+        """
+        parser = RasterisedDocumentParser(None)
+        parser.parse(
+            os.path.join(self.SAMPLE_FILES, "single-page-mixed.pdf"),
+            "application/pdf",
+        )
+        self.assertIsNotNone(parser.archive_path)
+        self.assertTrue(os.path.isfile(parser.archive_path))
+        self.assertContainsStrings(
+            parser.get_text().lower(),
+            [
+                "this is some normal text, present on page 1 of the document.",
+                "this is some text, but in an image, also on page 1.",
+                "this is further text on page 1.",
+            ],
+        )
+
+        with open(os.path.join(parser.tempdir, "sidecar.txt")) as f:
+            sidecar = f.read().lower()
+
+        self.assertIn("this is some text, but in an image, also on page 1.", sidecar)
+        self.assertNotIn(
+            "this is some normal text, present on page 1 of the document.",
+            sidecar,
+        )
+
     @override_settings(OCR_MODE="skip_noarchive")
     def test_multi_page_mixed_no_archive(self):
         """
@@ -553,23 +597,34 @@ class TestParserFileTypes(DirectoriesMixin, TestCase):
         parser = RasterisedDocumentParser(None)
         parser.parse(os.path.join(self.SAMPLE_FILES, "simple.bmp"), "image/bmp")
         self.assertTrue(os.path.isfile(parser.archive_path))
-        self.assertTrue("this is a test document" in parser.get_text().lower())
+        self.assertIn("this is a test document", parser.get_text().lower())
 
     def test_jpg(self):
         parser = RasterisedDocumentParser(None)
         parser.parse(os.path.join(self.SAMPLE_FILES, "simple.jpg"), "image/jpeg")
         self.assertTrue(os.path.isfile(parser.archive_path))
-        self.assertTrue("this is a test document" in parser.get_text().lower())
+        self.assertIn("this is a test document", parser.get_text().lower())
 
     @override_settings(OCR_IMAGE_DPI=200)
     def test_gif(self):
         parser = RasterisedDocumentParser(None)
         parser.parse(os.path.join(self.SAMPLE_FILES, "simple.gif"), "image/gif")
         self.assertTrue(os.path.isfile(parser.archive_path))
-        self.assertTrue("this is a test document" in parser.get_text().lower())
+        self.assertIn("this is a test document", parser.get_text().lower())
 
     def test_tiff(self):
         parser = RasterisedDocumentParser(None)
         parser.parse(os.path.join(self.SAMPLE_FILES, "simple.tif"), "image/tiff")
         self.assertTrue(os.path.isfile(parser.archive_path))
-        self.assertTrue("this is a test document" in parser.get_text().lower())
+        self.assertIn("this is a test document", parser.get_text().lower())
+
+    @override_settings(OCR_IMAGE_DPI=72)
+    def test_webp(self):
+        parser = RasterisedDocumentParser(None)
+        parser.parse(os.path.join(self.SAMPLE_FILES, "document.webp"), "image/webp")
+        self.assertTrue(os.path.isfile(parser.archive_path))
+        # OCR consistent mangles this space, oh well
+        self.assertIn(
+            "this is awebp document, created 11/14/2022.",
+            parser.get_text().lower(),
+        )