summary refs log tree commit diff
path: root/synapse/http (follow)
Commit message (Expand)AuthorAgeFilesLines
* Catch AttributeErrors when calling registerProducer (#10995)Brendan Abolivier2021-10-071-1/+4
* Merge tag 'v1.44.0rc1' into developOlivier Wilkinson (reivilibre)2021-09-291-3/+11
|\
| * Fix exception responding to request that has been closed (#10932)Erik Johnston2021-09-281-3/+11
* | Use direct references for configuration variables (part 6). (#10916)Patrick Cloke2021-09-291-5/+5
|/
* Encode JSON responses on a thread in C, mk2 (#10905)Erik Johnston2021-09-281-15/+57
* Add reactor to `SynapseRequest` and fix up types. (#10868)Erik Johnston2021-09-242-15/+26
* Use direct references for configuration variables (part 4). (#10893)Patrick Cloke2021-09-231-2/+3
* Remove unnecessary parentheses around tuples returned from methods (#10889)Andrew Morgan2021-09-231-1/+1
* Add types to http.site (#10867)Erik Johnston2021-09-211-18/+22
* Use direct references for some configuration variables (part 2) (#10812)Patrick Cloke2021-09-151-2/+5
* Prevent logging context going missing on federation request timeout (#10810)Sean Quah2021-09-141-4/+13
* Change logging of puppeted requests to better differentiate users (#10779)Erik Johnston2021-09-081-1/+1
* Additional type hints for client REST servlets (part 5) (#10736)Patrick Cloke2021-09-031-0/+19
* Additional type hints for the proxy agent and SRV resolver modules. (#10608)Dirk Klimpel2021-08-183-25/+37
* Experimental support for MSC3266 Room Summary API. (#10394)Michael Telatynski2021-08-161-2/+56
* support federation queries through http connect proxy (#10475)Dirk Klimpel2021-08-114-79/+152
* Fix up type hints for Twisted 21.7 (#10490)Richard van der Hoff2021-07-281-2/+2
* allow specifying https:// proxy (#10411)Dirk Klimpel2021-07-271-75/+109
* Fix a handful of type annotations. (#10446)Richard van der Hoff2021-07-221-2/+2
* Add type hints to additional servlet functions (#10437)Patrick Cloke2021-07-211-51/+169
* Add a return type to parse_string. (#10438)Patrick Cloke2021-07-211-1/+37
* [pyupgrade] `synapse/` (#10348)Jonathan de Jong2021-07-192-2/+2
* Use inline type hints in `http/federation/`, `storage/` and `util/` (#10381)Jonathan de Jong2021-07-151-7/+6
* Use inline type hints in various other places (in `synapse/`) (#10380)Jonathan de Jong2021-07-156-28/+28
* Allow providing credentials to `http_proxy` (#10360)Dirk Klimpel2021-07-151-1/+11
* Fix a number of logged errors caused by remote servers being down. (#10400)Erik Johnston2021-07-151-0/+28
* Add additional types to the federation transport server. (#10213)Patrick Cloke2021-06-281-4/+46
* Drop Origin & Accept from Access-Control-Allow-Headers value (#10114)Michael[tm] Smith2021-06-231-1/+1
* update black to 21.6b0 (#10197)Marcus2021-06-171-1/+1
* Fix 'ip_range_whitelist' not working for federation servers (#10115)Michael Kutzner2021-06-151-1/+3
* Implement knock feature (#6739)Sorunome2021-06-091-1/+0
* Clean up the interface for injecting opentracing over HTTP (#10143)Richard van der Hoff2021-06-091-7/+3
* Add type hints to the federation server transport. (#10080)Patrick Cloke2021-06-081-0/+24
* Correct type hints for parse_string(s)_from_args. (#10137)Patrick Cloke2021-06-081-68/+111
* Merge branch 'master' into developAndrew Morgan2021-06-011-1/+13
|\
| * Log method and path when dropping request due to size limit (#10091)Erik Johnston2021-05-281-1/+3
| * Allow response of `/send_join` to be larger. (#10093)Erik Johnston2021-05-281-1/+13
* | Log method and path when dropping request due to size limit (#10091)Erik Johnston2021-05-281-1/+3
* | Add `parse_strings_from_args` to get `prev_events` array (#10048)Eric Eastwood2021-05-281-43/+153
|/
* Use ijson to parse the response to `/send_join`, reducing memory usage. (#9958)Erik Johnston2021-05-202-36/+131
* Improved validation for received requests (#9817)Richard van der Hoff2021-04-231-5/+27
* pass a reactor into SynapseSite (#9874)Richard van der Hoff2021-04-231-9/+28
* Limit the size of HTTP responses read over federation. (#9833)Richard van der Hoff2021-04-232-8/+50
* Remove redundant "coding: utf-8" lines (#9786)Jonathan de Jong2021-04-1413-13/+0
* Bump black configuration to target py36 (#9781)Dan Callahan2021-04-132-2/+2
* Bugbear: Add Mutable Parameter fixes (#9682)Jonathan de Jong2021-04-082-4/+6
* Record more information into structured logs. (#9654)Patrick Cloke2021-04-081-24/+88
* Update mypy configuration: `no_implicit_optional = True` (#9742)Jonathan de Jong2021-04-051-1/+1
* Add type hints to DictionaryCache and TTLCache. (#9442)Patrick Cloke2021-03-291-4/+6
* Import HomeServer from the proper module. (#9665)Patrick Cloke2021-03-231-1/+1
* Allow providing credentials to HTTPS_PROXY (#9657)Andrew Morgan2021-03-222-34/+143
* Fix remaining mypy issues due to Twisted upgrade. (#9608)Patrick Cloke2021-03-151-2/+10
* Fix additional type hints from Twisted 21.2.0. (#9591)Patrick Cloke2021-03-121-1/+8
* Add tests for blacklisting reactor/agent. (#9563)Patrick Cloke2021-03-111-12/+14
* Retry 5xx errors in federation client (#9567)Erik Johnston2021-03-091-3/+4
* Fix additional type hints. (#9543)Patrick Cloke2021-03-091-1/+2
* Create a SynapseReactor type which incorporates the necessary reactor interfa...Patrick Cloke2021-03-083-7/+9
* Fix additional type hints from Twisted upgrade. (#9518)Patrick Cloke2021-03-034-35/+53
* (Hopefully) stop leaking file descriptors in media repo. (#9497)Patrick Cloke2021-03-011-2/+29
* Add support for no_proxy and case insensitive env variables (#9372)Tim Leung2021-02-262-10/+37
* SSO: redirect to public URL before setting cookies (#9436)Richard van der Hoff2021-02-261-1/+36
* Add support for X-Forwarded-Proto (#9472)Richard van der Hoff2021-02-241-15/+70
* Reduce the memory usage of previewing media files. (#9421)Patrick Cloke2021-02-181-14/+12
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-169-51/+74
* Add debug logging to DNS SRV requests. (#9305)Marcus2021-02-031-0/+7
* Split out a separate endpoint to complete SSO registration (#9262)Richard van der Hoff2021-02-011-0/+7
* Implement MSC2858 support (#9183)Richard van der Hoff2021-01-271-8/+36
* Support icons for Identity Providers (#9154)Richard van der Hoff2021-01-201-79/+0
* Properly raise an exception when the body exceeds the max size. (#9145)Patrick Cloke2021-01-182-2/+2
* Avoid raising the body exceeded error multiple times. (#9108)Patrick Cloke2021-01-151-1/+11
* Fix wrong arguments being passed to BlacklistingAgentWrapper (#9098)Tim Leung2021-01-141-1/+0
* Reduce scope of exception handler. (#9106)Patrick Cloke2021-01-131-5/+5
* Merge branch 'master' into developErik Johnston2021-01-132-3/+14
|\
| * Don't apply the IP range blacklist to proxy connections (#9084)Marcus2021-01-122-3/+14
* | Handle bad JSON data being returned from the federation API. (#9070)Patrick Cloke2021-01-121-0/+10
* | Remove SynapseRequest.get_user_agent (#9069)Richard van der Hoff2021-01-122-16/+17
|/
* Add a maximum size for well-known lookups. (#8950)Patrick Cloke2020-12-163-18/+52
* Various clean-ups to the logging context code (#8935)Patrick Cloke2020-12-141-2/+1
* Fix buglet in DirectRenderJsonResource (#8897)Richard van der Hoff2020-12-101-3/+5
* Apply an IP range blacklist to push and key revocation requests. (#8821)Patrick Cloke2020-12-023-36/+52
* Allow Date header through CORS (#8804)Nicolas Chamo2020-12-011-1/+1
* Remove special case of pretty printing JSON responses for curl (#8833)Tulir Asokan2020-11-271-24/+5
* Add additional type hints to HTTP client. (#8812)Patrick Cloke2020-11-252-147/+138
* Add type hints to matrix federation client / agent. (#8806)Patrick Cloke2020-11-253-194/+226
* Better error message when a remote resource uses invalid Content-Type (#8719)Andrew Morgan2020-11-111-2/+8
* Add ability for access tokens to belong to one user but grant access to anoth...Erik Johnston2020-10-291-7/+23
* Merge pull request #8678 from matrix-org/rav/fix_frozen_eventsRichard van der Hoff2020-10-281-3/+1
|\
| * remove unused importsRichard van der Hoff2020-10-281-2/+0
| * Remove frozendict_json_encoder and support frozendicts everywhereRichard van der Hoff2020-10-281-1/+1
* | Tell Black to format code for Python 3.5 (#8664)Dan Callahan2020-10-271-1/+1
* | Fix typos and spelling errors. (#8639)Patrick Cloke2020-10-235-9/+11
* | Fix handling of User-Agent headers with bad utf-8. (#8632)Erik Johnston2020-10-231-7/+9
* | Remove unused OPTIONS handlers. (#8621)Patrick Cloke2020-10-221-2/+1
|/
* Don't bother responding to client requests that have already disconnected (#8...Andrew Morgan2020-10-061-0/+5
* Enable mypy checking for unreachable code and fix instances. (#8432)Patrick Cloke2020-10-011-2/+2
* Fix handling of connection timeouts in outgoing http requests (#8400)Richard van der Hoff2020-09-294-50/+92
* A pair of tiny cleanups in the federation request code. (#8401)Richard van der Hoff2020-09-281-2/+0
* Add type annotations to SimpleHttpClient (#8372)Richard van der Hoff2020-09-241-56/+131
* Simplify super() calls to Python 3 syntax. (#8344)Patrick Cloke2020-09-181-1/+1
* Use slots in attrs classes where possible (#8296)Patrick Cloke2020-09-142-2/+2
* Fix the exception that is raised when invalid JSON is encountered. (#8291)Patrick Cloke2020-09-101-1/+4
* Stop sub-classing object (#8249)Patrick Cloke2020-09-049-18/+18
* Convert the well known resolver to async (#8214)Patrick Cloke2020-09-012-28/+33
* Switch the JSON byte producer from a pull to a push producer. (#8116)Patrick Cloke2020-08-191-32/+43
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-193-11/+10
* Iteratively encode JSON responses to avoid blocking the reactor. (#8013)Patrick Cloke2020-08-181-8/+89
* Reduce INFO logging (#8050)Erik Johnston2020-08-113-25/+73
* Don't log OPTIONS request at INFO (#8049)Erik Johnston2020-08-071-1/+7
* Add health check endpoint (#8048)Erik Johnston2020-08-071-1/+8
* Reduce unnecessary whitespace in JSON. (#7372)David Vo2020-08-071-2/+3
* Convert run_as_background_process inner function to async. (#8032)Patrick Cloke2020-08-061-3/+2
* Convert the SimpleHttpClient to async. (#8016)Patrick Cloke2020-08-041-31/+24
* Implement handling of HTTP HEAD requests. (#7999)Patrick Cloke2020-08-031-5/+11
* Convert federation client to async/await. (#7975)Patrick Cloke2020-07-301-40/+32
* Ensure the msg property of HttpResponseException is a string. (#7979)Patrick Cloke2020-07-292-7/+16
* Return an empty body for OPTIONS requests. (#7886)Patrick Cloke2020-07-241-19/+5
* Downgrade warning on client disconnect to INFO (#7928)Richard van der Hoff2020-07-241-3/+1
* Convert the federation agent and related code to async/await. (#7874)Patrick Cloke2020-07-232-16/+10
* fix an incorrect commentRichard van der Hoff2020-07-221-2/+2
* Ensure that calls to `json.dumps` are compatible with the standard library js...Patrick Cloke2020-07-152-3/+5
* Fix client reader sharding tests (#7853)Erik Johnston2020-07-151-1/+23
* Do not use canonicaljson to magically handle decoding bytes from JSON. (#7802)Patrick Cloke2020-07-102-19/+9
* Add types to the server code and remove unused parameter (#7813)Patrick Cloke2020-07-101-30/+41
* Add `HomeServer.signing_key` property (#7805)Richard van der Hoff2020-07-081-1/+1
* Stop passing bytes when dumping JSON (#7799)Patrick Cloke2020-07-081-3/+7
* Merge different Resource implementation classes (#7732)Erik Johnston2020-07-032-189/+195
* Merge branch 'master' into developPatrick Cloke2020-07-021-8/+68
|\
| * Ensure that HTML pages served from Synapse include headers to avoid embedding.Patrick Cloke2020-07-021-8/+68
* | Include a user agent in federation requests. (#7677)Patrick Cloke2020-06-163-4/+32
* | Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-163-14/+10
* | Create a ListenerConfig object (#7681)Richard van der Hoff2020-06-161-2/+4
|/
* Clean up exception handling in SAML2ResponseResource (#7614)Richard van der Hoff2020-06-031-12/+31
* Fix missing CORS headers on OPTION responses (#7560)Erik Johnston2020-05-221-1/+1
* Return 200 OK for all OPTIONS requests (#7534)Patrick Cloke2020-05-221-3/+20
* Fix exception reporting due to HTTP request errors. (#7556)Erik Johnston2020-05-221-0/+7
* mypy for synapse.http.site (#7553)Richard van der Hoff2020-05-221-3/+6
* remove miscellaneous PY2 codeRichard van der Hoff2020-05-151-6/+2
* Workaround for failure to wrap reason in Failure (#7473)Andrew Morgan2020-05-141-0/+7
* Fix b'GET' in prometheus metrics (#7503)Richard van der Hoff2020-05-141-2/+4
* Allow configuration of Synapse's cache without using synctl or environment va...Amber Brown2020-05-111-2/+4
* Implement OpenID Connect-based login (#7256)Quentin Gliech2020-05-081-0/+7
* Reduce federation logging on success (#7321)Michael Kaye2020-04-221-8/+14
* Fix "'NoneType' has no attribute start|stop" logcontext errors (#7181)Richard van der Hoff2020-03-311-7/+6
* Clean up some LoggingContext stuff (#7120)Richard van der Hoff2020-03-241-3/+3
* Share SSL contexts for non-federation requests (#7094)Richard van der Hoff2020-03-172-4/+1
* Tiny optimisation for _get_handler_for_request (#6950)Richard van der Hoff2020-02-191-1/+3
* Reduce amount of logging at INFO level. (#6862)Erik Johnston2020-02-061-1/+1
* Fix outbound federation request metrics (#6795)Erik Johnston2020-01-281-0/+4
* Implement RedirectException (#6687)Richard van der Hoff2020-01-151-4/+9
* Fix exceptions on requests for non-ascii urls (#6682)Richard van der Hoff2020-01-131-1/+1
* Kill off redundant SynapseRequestFactory (#6619)Richard van der Hoff2020-01-031-15/+3
* Clean up newline quote marks around the codebase (#6362)Andrew Morgan2019-11-211-1/+1
* Replace instance variations of homeserver with correct case/spacingAndrew Morgan2019-11-121-1/+1
* Support for routing outbound HTTP requests via a proxy (#6239)Richard van der Hoff2019-11-013-2/+405
* Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-317-14/+14
* Trace non-JSON APIs, /media, /key etcErik Johnston2019-10-111-1/+1
* Merge branch 'master' into developAndrew Morgan2019-10-031-2/+4
|\
| * Replace client_secret with <redacted> in server logs (#6158)Andrew Morgan2019-10-031-2/+4
* | Edit SimpleHttpClient to reference that header keys can be passed as str or b...Andrew Morgan2019-09-271-6/+6
|/
* Fix well-known lookups with the federation certificate whitelist (#5997)Amber Brown2019-09-141-1/+1
* Trace how long it takes for the send trasaction to complete, including retrys...Jorik Schellekens2019-09-052-37/+51
* Add opentracing to all client servlets (#5983)Jorik Schellekens2019-09-052-6/+13
* Remove unused methods from c/s api v1 in register.py (#5963)Andrew Morgan2019-09-021-33/+1
* Remove unnecessary parentheses around return statements (#5931)Andrew Morgan2019-08-301-1/+1
* Merge pull request #5864 from matrix-org/erikj/reliable_lookupsErik Johnston2019-08-272-208/+217
|\
| * Fix off by one error in SRV result shufflingErik Johnston2019-08-271-8/+13
| * Fixup commentsErik Johnston2019-08-231-1/+9
| * Fix logcontextsErik Johnston2019-08-231-4/+8
| * Merge branch 'develop' of github.com:matrix-org/synapse into erikj/reliable_l...Erik Johnston2019-08-223-47/+128
| |\
| * | Remove now unused pick_server_from_listErik Johnston2019-08-201-30/+0
| * | Fixup _sort_server_list to be slightly more efficientErik Johnston2019-08-201-2/+11
| * | Refactor MatrixFederationAgent to retry SRV.Erik Johnston2019-08-152-189/+202
* | | Opentracing across workers (#5771)Jorik Schellekens2019-08-221-1/+1
| |/ |/|
* | Merge pull request #5850 from matrix-org/erikj/retry_well_known_on_failErik Johnston2019-08-222-37/+115
|\ \
| * | Change jitter to be a factor rather than absolute valueErik Johnston2019-08-201-11/+12
| * | Fixup changelog and remove debug loggingErik Johnston2019-08-161-4/+1
| * | Retry well known on fail.Erik Johnston2019-08-152-34/+114
| |/
* / Opentracing misc (#5856)Jorik Schellekens2019-08-161-10/+13
|/
* Retry well-known lookup before expiry.Erik Johnston2019-08-131-22/+60
* Make default well known cache global again.Erik Johnston2019-08-131-1/+4
* Move well known lookup into a separate clasErik Johnston2019-08-072-153/+197
* Add a lower bound for TTL on well known results.Erik Johnston2019-08-061-0/+4
* Handle incorrectly encoded query params correctlyErik Johnston2019-08-011-1/+6
* Share SSL options for well-known requestsErik Johnston2019-07-311-11/+5
* Merge tag 'v1.2.0rc2' into developAndrew Morgan2019-07-242-14/+31
|\
| * Fix servlet metric names (#5734)Jorik Schellekens2019-07-242-14/+31
* | Replace returnValue with return (#5736)Amber Brown2019-07-234-53/+45
|/
* Add basic opentracing support (#5544)Jorik Schellekens2019-07-112-5/+30
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-047-7/+7
* Fix media repo breaking (#5593)Amber Brown2019-07-021-10/+16
* Make the http server handle coroutine-making REST servlets (#5475)Amber Brown2019-06-291-36/+41
* Run Black. (#5482)Amber Brown2019-06-2010-287/+321
* Don't log exception when failing to fetch remote content.Erik Johnston2019-06-071-4/+9
* Improve docstrings on MatrixFederationClient. (#5332)Richard van der Hoff2019-06-041-16/+55
* Remove spurious debug from MatrixFederationHttpClient.get_json (#5287) v0.99.5.1.dev0Richard van der Hoff2019-05-291-4/+0
* Fix error code for invalid parameterAaron Raimist2019-05-241-1/+1
* Add ability to blacklist ip ranges for federation traffic (#5043)Andrew Morgan2019-05-132-14/+40
* URL preview blacklisting fixes (#5155)Andrew Morgan2019-05-101-20/+25
* Config option for verifying federation certificates (MSC 1711) (#4967)Andrew Morgan2019-04-251-1/+1
* Make federation endpoints more tolerant of trailing slashes v2 (#4935)Andrew Morgan2019-03-261-0/+1
* Clean up backoff_on_404 and metehod callsAndrew Morgan2019-03-211-9/+13
* kwargs doesn't like commas on calling funcs either. TILAndrew Morgan2019-03-201-2/+2
* lintAndrew Morgan2019-03-201-2/+6
* New test, fix issuesAndrew Morgan2019-03-201-49/+28
* Fix comments. v0.99.2 -> v0.99.3Andrew Morgan2019-03-201-5/+5
* Just return if not doing any trailing slash shennanigansAndrew Morgan2019-03-201-0/+2
* lintAndrew Morgan2019-03-181-1/+1
* Better exception handlingAndrew Morgan2019-03-181-16/+17
* Correct var nameAndrew Morgan2019-03-131-2/+2
* receiving a 400 caused an exception. handle itAndrew Morgan2019-03-131-5/+12
* is this what purgatory feels likeAndrew Morgan2019-03-131-3/+3
* i should have given up x2Andrew Morgan2019-03-131-18/+13
* i should have given upAndrew Morgan2019-03-131-1/+1
* there comes a time when you should give up. but you dontAndrew Morgan2019-03-131-1/+1
* as aboveAndrew Morgan2019-03-131-2/+4
* no kwargs todayAndrew Morgan2019-03-131-7/+12
* Or perhaps I was the one who was drunkAndrew Morgan2019-03-131-6/+3
* go home python, you're drunkAndrew Morgan2019-03-131-4/+2
* Syntax checker is borkAndrew Morgan2019-03-131-6/+5
* Destructure againAndrew Morgan2019-03-131-7/+8
* Are you happy nowAndrew Morgan2019-03-131-2/+2
* Syntax testAndrew Morgan2019-03-131-6/+5
* Remove testing codeAndrew Morgan2019-03-131-3/+0
* Add missing docstring detailAndrew Morgan2019-03-131-1/+1
* Fix syntax issuesAndrew Morgan2019-03-131-7/+10
* Switch to wrapper function around _send_requestAndrew Morgan2019-03-131-32/+71
* Retry on 400:M_UNRECOGNIZEDAndrew Morgan2019-03-131-6/+10
* Fix paranthesis indentAndrew Morgan2019-03-131-1/+2
* Add workaround noteAndrew Morgan2019-03-131-10/+4
* Cleaner way of implementing trailing slashesAndrew Morgan2019-03-121-63/+52
* Retry certain federation requests on 404Andrew Morgan2019-03-081-0/+45
* Minor docstring fixes for MatrixFederationAgent (#4765)Andrew Morgan2019-02-281-1/+5
* Log tracebacks correctlyErik Johnston2019-02-251-4/+4
* Fix TaskStopped exceptions when outbound requests time out (#4690)Richard van der Hoff2019-02-203-18/+29
* Cleanup top level request exception loggingErik Johnston2019-02-181-3/+3
* Move ClientTLSOptionsFactory init out of refresh_certificates (#4611)Richard van der Hoff2019-02-111-2/+2
* Merge pull request #4546 from matrix-org/rav/silence_critical_error_from_fede...Richard van der Hoff2019-02-011-2/+15
|\
| * Fix noisy "twisted.internet.task.TaskStopped" errors in logsRichard van der Hoff2019-02-011-2/+15
* | Merge pull request #4544 from matrix-org/rav/skip_invalid_well_knownRichard van der Hoff2019-02-011-19/+6
|\ \
| * | Treat an invalid .well-known the same as an absent oneRichard van der Hoff2019-02-011-19/+6
* | | Fix b'ab' noise in logsRichard van der Hoff2019-02-011-1/+1
|/ /
* | Cache failures to parse .well-knownRichard van der Hoff2019-02-011-13/+43
* | better logging for federation connectionsRichard van der Hoff2019-01-311-5/+16
* | Update federation routing logic to check .well-known before SRVRichard van der Hoff2019-01-311-5/+5
|/
* Merge pull request #4521 from matrix-org/rav/fed_routing/cleanupsRichard van der Hoff2019-01-301-9/+11
|\
| * fix exception textRichard van der Hoff2019-01-301-1/+1
| * Also jitter the invalid cache periodRichard van der Hoff2019-01-301-9/+11
* | Follow redirects on .well-known (#4520)Richard van der Hoff2019-01-301-2/+4
|/
* Add a caching layer to .well-known responses (#4516)Richard van der Hoff2019-01-301-2/+88
* Relax requirement for a content-type on .well-known (#4511)Richard van der Hoff2019-01-291-20/+13