summary refs log tree commit diff
path: root/synapse/handlers (follow)
Commit message (Expand)AuthorAgeFilesLines
* Add a missing yield in device key uploadRichard van der Hoff2017-03-231-1/+1
* Merge pull request #2027 from matrix-org/rav/logcontext_leaksRichard van der Hoff2017-03-201-2/+3
|\
| * Stop preserve_fn leaking context into the reactorRichard van der Hoff2017-03-181-2/+3
* | Refactoring and cleanupsRichard van der Hoff2017-03-171-0/+10
|/
* Merge pull request #2016 from matrix-org/rav/queue_pdus_during_joinRichard van der Hoff2017-03-171-24/+44
|\
| * Queue up federation PDUs while a room join is in progressRichard van der Hoff2017-03-151-24/+44
* | CommentsErik Johnston2017-03-161-2/+2
* | CommentErik Johnston2017-03-161-3/+8
* | Don't recreate so many setsErik Johnston2017-03-165-34/+28
* | Implement no op for room stream in syncErik Johnston2017-03-161-4/+47
* | Merge pull request #2014 from Half-Shot/hs/fix-appservice-presenceErik Johnston2017-03-151-1/+4
|\ \
| * | Add a great comment to handle_timeout for active vs sync times.Will Hunt2017-03-151-0/+2
| * | Add fallback to last_active_ts if it beats the last sync time.Will Hunt2017-03-151-1/+2
* | | Cache set of users whose presence the other user should seeErik Johnston2017-03-151-13/+27
* | | CommentErik Johnston2017-03-151-0/+3
* | | Format presence events on the edges instead of reformatting them multiple timesErik Johnston2017-03-153-23/+32
|/ /
* | Merge pull request #1994 from matrix-org/dbkr/msisdn_signin_2Erik Johnston2017-03-152-8/+61
|\ \
| * | Support registration / login with phone numberDavid Baker2017-03-132-8/+61
| |/
* | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/public_lis...Erik Johnston2017-03-144-66/+239
|\ \
| * | Implement _simple_delete_many_txn, use it to delete devicesLuke Barnard2017-03-131-0/+34
| |/
| * Merge remote-tracking branch 'origin/develop' into rav/refactor_received_pduRichard van der Hoff2017-03-133-64/+11
| |\
| | * Revert "Support registration & login with phone number"Erik Johnston2017-03-132-61/+8
| * | Move FederationServer._handle_new_pdu to FederationHandlerRichard van der Hoff2017-03-091-5/+197
* | | CommentsErik Johnston2017-03-131-0/+12
* | | Assume rooms likely haven't changedErik Johnston2017-03-131-8/+11
* | | Get current state by using current_state_events tableErik Johnston2017-03-102-19/+30
| |/ |/|
* | Noop repated delete device inbox calls from /syncErik Johnston2017-03-101-3/+3
|/
* Merge pull request #1971 from matrix-org/dbkr/msisdn_signinDavid Baker2017-03-092-8/+61
|\
| * Fix log lineDavid Baker2017-03-081-1/+1
| * Factor out msisdn canonicalisationDavid Baker2017-03-081-1/+1
| * Fix pep8David Baker2017-03-081-1/+1
| * Just return the deferred straight offDavid Baker2017-03-011-4/+2
| * Merge remote-tracking branch 'origin/develop' into dbkr/msisdn_signinDavid Baker2017-03-015-14/+39
| |\
| * | WIP support for msisdn 3pid proxy methodsDavid Baker2017-02-142-6/+61
* | | Don't keep around old stream IDs foreverErik Johnston2017-03-031-2/+9
* | | SpellingErik Johnston2017-03-031-2/+2
* | | Fix device list update to not constantly resyncErik Johnston2017-03-011-46/+115
| |/ |/|
* | Pop with default value to stop throwingErik Johnston2017-02-281-1/+1
* | Pop rather than del from dictErik Johnston2017-02-271-1/+1
* | Remove unused paramErik Johnston2017-02-201-1/+1
* | Fix /context/ visibiltiy rulesErik Johnston2017-02-201-1/+4
* | Merge pull request #1922 from matrix-org/dbkr/allow_forget_for_banDavid Baker2017-02-171-1/+3
|\ \
| * | Allow forgetting rooms you're banned fromDavid Baker2017-02-151-1/+3
* | | Fix bugs in the /keys/changes apiRichard van der Hoff2017-02-141-9/+29
|/ /
* / Cache get_presence storageErik Johnston2017-02-131-1/+1
|/
* Merge pull request #1784 from morteza-araby/user-adminErik Johnston2017-02-061-1/+43
|\
| * admin,storage: added more administrator functionalitiesMorteza Araby2017-02-021-1/+43
* | Measure new device list stuffErik Johnston2017-02-022-1/+6
* | Use new get_users_who_share_room_with_userErik Johnston2017-02-021-11/+13
* | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/device_lis...Erik Johnston2017-02-022-29/+16
|\ \
| * \ Merge pull request #1876 from matrix-org/erikj/shared_member_storeErik Johnston2017-02-022-29/+16
| |\ \ | | |/ | |/|
| | * Make presence.get_new_events a bit fasterErik Johnston2017-02-022-29/+16
* | | Use stream_ordering_to_exterm for /keys/changesErik Johnston2017-02-021-9/+9
|/ /
* / Fix email push in pusher workerErik Johnston2017-02-022-40/+50
|/
* Doc argsErik Johnston2017-02-011-0/+7
* Include newly joined users in /keys/changes APIErik Johnston2017-02-011-4/+35
* Wake sync up for device changesErik Johnston2017-02-011-1/+2
* Implement /keys/changesErik Johnston2017-02-011-0/+16
* Merge pull request #1862 from matrix-org/erikj/presence_updateErik Johnston2017-01-311-3/+3
|\
| * Use DB cache of joined users for presenceErik Johnston2017-01-301-3/+3
* | Fix unit testsErik Johnston2017-01-301-1/+1
* | Noop device key changes if they're the sameErik Johnston2017-01-301-4/+5
|/
* Use get_users_in_room and declare it iterableErik Johnston2017-01-301-1/+1
* Merge pull request #1857 from matrix-org/erikj/device_list_streamErik Johnston2017-01-303-17/+195
|\
| * Hook device list updates to replicationErik Johnston2017-01-272-26/+25
| * Better nameErik Johnston2017-01-271-1/+3
| * Handle users leaving roomsErik Johnston2017-01-261-1/+16
| * Add commentsErik Johnston2017-01-262-4/+19
| * Implement device key caching over federationErik Johnston2017-01-262-17/+108
| * Fix up sending of m.device_list_update edusErik Johnston2017-01-251-0/+1
| * Add basic implementation of local device list changesErik Johnston2017-01-253-12/+67
* | Don't clobber a displayname or avatar_url if provided by an m.room.member eventPaul "LeoNerd" Evans2017-01-241-2/+4
|/
* Insert delta of current_state_events to be more efficientErik Johnston2017-01-201-2/+6
* Derive current_state_events from state groupsErik Johnston2017-01-201-1/+0
* Merge pull request #1822 from matrix-org/erikj/statE_loggingErik Johnston2017-01-181-1/+1
|\
| * Change resolve_state_groups call site logging to DEBUGErik Johnston2017-01-171-1/+1
* | Merge pull request #1818 from matrix-org/erikj/state_auth_splitout_splitErik Johnston2017-01-181-2/+2
|\ \ | |/ |/|
| * Fix couple of federation state bugsErik Johnston2017-01-171-1/+1
| * Optimise state resolutionErik Johnston2017-01-171-1/+1
* | Add missing None checkErik Johnston2017-01-111-5/+6
|/
* Merge pull request #1789 from matrix-org/erikj/decouple_presenceErik Johnston2017-01-101-1/+3
|\
| * CommentErik Johnston2017-01-101-0/+2
| * Don't block messages sending on bumping presenceErik Johnston2017-01-101-1/+1
* | Merge pull request #1787 from matrix-org/erikj/linearize_memberErik Johnston2017-01-101-4/+15
|\ \
| * | Linearize updates to membership via PUT /state/Erik Johnston2017-01-091-4/+15
| |/
* / Name linearizer's for better logsErik Johnston2017-01-091-1/+1
|/
* Merge branch 'release-v0.18.6' into developMark Haines2017-01-061-4/+6
|\
| * handlers/room_member: fix guest access check when joining roomsPatrik Oldsberg2017-01-061-4/+6
* | Merge branch 'release-v0.18.6' into developMatthew Hodgson2017-01-051-0/+1
|\|
| * Fix caseMatthew Hodgson2017-01-051-1/+1
| * add logging for all the places we call resolve_state_groups. my kingdom for a...Matthew Hodgson2017-01-051-0/+1
* | Merge branch 'release-v0.18.6' into developMatthew Hodgson2017-01-051-0/+4
|\|
| * Only send events that originate on this server.Mark Haines2017-01-051-0/+4
* | Fix another comment typoDavid Baker2016-12-211-1/+1
* | Add /account/3pid/delete endpointDavid Baker2016-12-201-0/+11
* | fix ability to change password to a non-ascii oneMatthew Hodgson2016-12-181-2/+2
* | Cache network room list queries.Erik Johnston2016-12-161-3/+4
|/
* Add some logging for syncing to_device eventsRichard van der Hoff2016-12-151-4/+8
* Merge pull request #1698 from matrix-org/erikj/room_listErik Johnston2016-12-151-2/+4
|\
| * Fix caching on public room listErik Johnston2016-12-131-2/+4
* | CommentErik Johnston2016-12-141-0/+2
* | Fix /backfill returning events it shouldn'tErik Johnston2016-12-141-2/+3
|/
* Merge pull request #1676 from matrix-org/erikj/room_listErik Johnston2016-12-122-12/+67
|\
| * CommentsErik Johnston2016-12-072-2/+10
| * Add new API appservice specific public room listErik Johnston2016-12-062-11/+58
* | Merge pull request #1620 from matrix-org/erikj/concurrent_room_accessErik Johnston2016-12-121-27/+33
|\ \
| * | CommentsErik Johnston2016-11-111-0/+2
| * | Limit the number of events that can be created on a given room concurretnlyErik Johnston2016-11-101-27/+31
* | | Merge pull request #1686 from matrix-org/rav/fix_federation_key_failsRichard van der Hoff2016-12-121-0/+10
|\ \ \
| * | | Remove unused importRichard van der Hoff2016-12-121-1/+0
| * | | E2E key query: handle federation failsRichard van der Hoff2016-12-091-0/+11
* | | | Fix rare notifier bug where listeners dont timeoutErik Johnston2016-12-091-0/+1
* | | | Fix ignored read-receiptsRichard van der Hoff2016-12-081-1/+5
|/ / /
* | / Prevent user tokens being used as guest tokens (#1675)Richard van der Hoff2016-12-061-1/+1
| |/ |/|
* | Merge pull request #653 from matrix-org/erikj/preset_guest_joinErik Johnston2016-12-051-0/+10
|\ \
| * | Enable guest access for private rooms by defaultErik Johnston2016-03-171-0/+10
* | | Merge pull request #1649 from matrix-org/dbkr/log_ui_auth_argsErik Johnston2016-12-051-1/+9
|\ \ \
| * | | Clarify that creds doesn not contain passwords.David Baker2016-11-241-1/+3
| * | | Log the args that we have on UI auth completionDavid Baker2016-11-241-1/+7
* | | | Rip out more refresh_token codeRichard van der Hoff2016-11-301-10/+0
* | | | Merge branch 'develop' into rav/no_more_refresh_tokensRichard van der Hoff2016-11-302-8/+8
|\ \ \ \
| * | | | Stop putting a time caveat on access tokensRichard van der Hoff2016-11-292-8/+8
| |/ / /
* / / / Stop generating refresh tokensRichard van der Hoff2016-11-281-16/+4
|/ / /
* | | Shuffle receipt handler around so that worker apps don't need to load itErik Johnston2016-11-233-6/+4
* | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_out_...Erik Johnston2016-11-231-9/+22
|\ \ \
| * | | Return early on /sync code paths if a '*' filter is usedKegan Dougal2016-11-221-9/+22
* | | | Remove explicit calls to send_pduErik Johnston2016-11-211-53/+0
* | | | Handle sending events and device messages over federationErik Johnston2016-11-171-12/+1
* | | | Use new federation_sender DIErik Johnston2016-11-165-14/+16
|/ / /
* | / Use external ldap auth pacakgeErik Johnston2016-11-151-0/+2
| |/ |/|
* | Sample correctlyErik Johnston2016-11-081-1/+3
* | Limit the number of prev_events of new eventsErik Johnston2016-11-081-0/+13
* | Don't error on non-ascii passwordsDavid Baker2016-11-031-1/+1
* | Fix infinite typing bugErik Johnston2016-10-241-2/+10
* | Fix incredubly slow back pagination queryErik Johnston2016-10-242-4/+7
* | Merge pull request #1175 from matrix-org/luke/feature-configurable-as-rate-li...Luke Barnard2016-10-201-0/+6
|\ \
| * | as_user->app_service, less redundant comments, better positioned commentsLuke Barnard2016-10-201-6/+3
| * | Use real AS object by passing it through the requesterLuke Barnard2016-10-201-8/+3
| * | Allow Configurable Rate Limiting Per ASLuke Barnard2016-10-181-0/+14
* | | Merge pull request #1176 from matrix-org/erikj/eager_ratelimit_checkErik Johnston2016-10-191-1/+16
|\ \ \
| * | | CommentErik Johnston2016-10-191-0/+3
| * | | Check whether to ratelimit sooner to avoid workErik Johnston2016-10-191-1/+13
| |/ /
* / / Convert emails to lowercase when storingDavid Baker2016-10-191-0/+12
|/ /
* | Merge pull request #1155 from matrix-org/erikj/pluggable_pwd_authErik Johnston2016-10-121-295/+39
|\ \
| * | Implement pluggable password authErik Johnston2016-10-031-295/+39
* | | Merge pull request #1166 from matrix-org/rav/grandfather_broken_riot_signupRichard van der Hoff2016-10-111-3/+14
|\ \ \
| * | | Work around email-spamming Riot bugRichard van der Hoff2016-10-111-3/+14
* | | | Merge pull request #1157 from Rugvip/nolimitErik Johnston2016-10-117-32/+30
|\ \ \ \ | |/ / / |/| | |
| * | | rest/client/v1/register: use the correct requester in createUserPatrik Oldsberg2016-10-061-4/+2
| * | | handlers/profile: added admin override for set_displayname and set_avatar_urlPatrik Oldsberg2016-10-061-4/+4
| * | | handers: do not ratelimit app service sendersPatrik Oldsberg2016-10-061-1/+7
| * | | storage/appservice: make appservice methods only relying on the cache synchro...Patrik Oldsberg2016-10-065-23/+17
| |/ /
* | | Merge pull request #1160 from matrix-org/rav/401_on_password_failRichard van der Hoff2016-10-071-32/+52
|\ \ \ | |/ / |/| |
| * | Interactive Auth: Return 401 from for incorrect passwordRichard van der Hoff2016-10-071-32/+52
* | | Restructure ldap authenticationMartin Weinelt2016-09-291-87/+192
|/ /
* | Move FEDERATION_PING_INTERVAL timer. Update log lineErik Johnston2016-09-231-8/+10
* | Time out typing over federationErik Johnston2016-09-231-70/+105
* | Merge pull request #1136 from matrix-org/erikj/fix_signed_3pidErik Johnston2016-09-221-6/+9
|\ \
| * | Add commentsErik Johnston2016-09-221-0/+3
| * | Allow invites via 3pid to bypass sender sig checkErik Johnston2016-09-221-6/+6
* | | Merge pull request #1132 from matrix-org/erikj/initial_sync_splitErik Johnston2016-09-222-378/+446
|\ \ \ | |/ / |/| |
| * | Support /initialSync in synchrotron workerErik Johnston2016-09-212-378/+446
* | | Add total_room_count_estimate to /publicRoomsErik Johnston2016-09-211-0/+3
|/ /
* | Merge pull request #1130 from matrix-org/erikj/fix_pubroom_pagErik Johnston2016-09-191-12/+25
|\ \
| * | PEP8Erik Johnston2016-09-171-1/+1
| * | Handle fact that _generate_room_entry may not return a room entryErik Johnston2016-09-171-12/+25
* | | Merge pull request #1129 from matrix-org/erikj/fix_pubroom_pagErik Johnston2016-09-171-110/+123
|\| |
| * | SpellingErik Johnston2016-09-171-1/+1
| * | Fix and clean up publicRooms paginationErik Johnston2016-09-171-110/+123
* | | Make public room search case insensitiveDavid Baker2016-09-161-4/+4
|/ /
* | CommentErik Johnston2016-09-161-0/+2
* | Add remote reoom cacheErik Johnston2016-09-161-2/+23
* | Support filtering remote room listsErik Johnston2016-09-161-3/+9
* | Filter remote rooms lists locallyErik Johnston2016-09-161-10/+24
* | Don't cache searched in /publicRoomsErik Johnston2016-09-161-1/+5
* | Add very basic filter API to /publicRoomsErik Johnston2016-09-151-5/+18
* | Change the way we calculate new_limit in /publicRooms and add POST APIErik Johnston2016-09-151-15/+33
* | Merge pull request #1121 from matrix-org/erikj/public_room_paginateErik Johnston2016-09-151-84/+196
|\ \
| * | Base public room list off of public_rooms streamErik Johnston2016-09-151-7/+27
| * | Pass since/from parameters over federationErik Johnston2016-09-151-29/+26
| * | Allow paginating both forwards and backwardsErik Johnston2016-09-151-21/+50
| * | Remove support for aggregate room listsErik Johnston2016-09-151-55/+0
| * | Accept optional token to public room listErik Johnston2016-09-151-7/+75
| * | Calculate the public room list from a stream_orderingErik Johnston2016-09-141-3/+40
| * | Refactor public rooms to not pull out the full state for each roomErik Johnston2016-09-141-14/+30
* | | Merge pull request #1117 from matrix-org/erikj/fix_stateErik Johnston2016-09-141-0/+4
|\ \ \ | |/ / |/| |
| * | Ensure we don't mutate state cache entriesErik Johnston2016-09-141-0/+4
* | | Move RoomListHandler into a separate fileErik Johnston2016-09-142-158/+185
|/ /
* | Merge pull request #1111 from matrix-org/matthew/device-idsMatthew Hodgson2016-09-141-1/+1
|\ \
| * | make device IDs more useful for human disambiguationMatthew Hodgson2016-09-131-1/+1
* | | Merge pull request #1116 from matrix-org/paul/tiny-fixesPaul Evans2016-09-131-2/+2
|\ \ \
| * | | Fix typo "persiting"Paul "LeoNerd" Evans2016-09-131-2/+2
* | | | Limit how often we ask for keys from dead serversMark Haines2016-09-131-11/+30
|/ / /
* | | Move the E2E key handling into the e2e handlerMark Haines2016-09-131-3/+102
* | | Merge pull request #1110 from matrix-org/markjh/e2e_timeoutMark Haines2016-09-131-21/+43
|\ \ \
| * | | Add a timeout parameter for end2end key queries.Mark Haines2016-09-121-21/+43
* | | | Add is_direct param to /createRoomErik Johnston2016-09-121-0/+6
|/ / /
* | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/batch_edusErik Johnston2016-09-091-2/+31
|\| |
| * | Merge pull request #1091 from matrix-org/paul/third-party-lookupPaul Evans2016-09-091-2/+31
| |\ \
| | * | Reject malformed 3PE query metadata results earlier in AS API handling codePaul "LeoNerd" Evans2016-09-091-9/+5
| | * | Minor fixes from PR commentsPaul "LeoNerd" Evans2016-09-091-2/+2
| | * | Efficiency fix for lookups of a single protocolPaul "LeoNerd" Evans2016-09-091-1/+4
| | * | Don't corrupt shared cache on subsequent protocol requestsPaul "LeoNerd" Evans2016-09-091-0/+2
| | * | Collect up all the "instances" lists of individual AS protocol results into o...Paul "LeoNerd" Evans2016-09-081-1/+29
* | | | Clobber EDUs in send queueErik Johnston2016-09-093-15/+7
|/ / /
* / / Deduplicate presence in _update_statesErik Johnston2016-09-091-0/+6
|/ /
* | Merge pull request #1082 from matrix-org/erikj/remote_public_roomsErik Johnston2016-09-081-0/+10
|\ \
| * | Add server param to /publicRoomsErik Johnston2016-09-081-0/+10
* | | Check the user_id for presence/typing matches originErik Johnston2016-09-082-1/+15
* | | Merge branch 'develop' into markjh/direct_to_device_federationMark Haines2016-09-083-54/+35
|\| |
| * | Record counts of state changesErik Johnston2016-09-061-0/+4
| * | Short circuit if presence is the sameErik Johnston2016-09-061-0/+3
| * | Fiddle should_notify to better report statsErik Johnston2016-09-061-12/+7
| * | Merge pull request #1070 from matrix-org/erikj/presence_statsErik Johnston2016-09-051-0/+8
| |\ \
| | * | Record why we have chosen to notifyErik Johnston2016-09-051-0/+8
| * | | Use get_joined_users_from_context instead of manually looking up hostsErik Johnston2016-09-052-46/+17
| |/ /
* | | Add a new method to enqueue the device messages rather than sending a dummy EDUMark Haines2016-09-071-7/+3
* | | Send device messages over federationMark Haines2016-09-061-0/+121
|/ /
* | Merge pull request #1067 from matrix-org/markjh/idempotentMark Haines2016-09-051-0/+6
|\ \
| * | Fix membership changes to be idempotentMark Haines2016-09-021-0/+6
* | | Merge pull request #1066 from matrix-org/markjh/direct_to_device_lowerboundMark Haines2016-09-021-1/+1
|\ \ \
| * | | Only return new device messages in /syncMark Haines2016-09-021-1/+1
| |/ /
* | | Merge pull request #1064 from matrix-org/erikj/on_receive_checkErik Johnston2016-09-021-6/+18
|\ \ \
| * | | Comment on when auth chain and state are NoneErik Johnston2016-09-021-0/+3
| * | | CommentErik Johnston2016-09-021-0/+3
| * | | Only check if host is in room if we have state and auth_chainErik Johnston2016-09-021-6/+12
| |/ /
* | | DocstringsErik Johnston2016-09-021-0/+4
* | | Only pull out IDs from DB for /state_ids/ requestErik Johnston2016-09-021-0/+26
|/ /
* | Fix typo in log lineErik Johnston2016-09-011-1/+1
* | Correctly handle the difference between prev and current stateErik Johnston2016-08-313-17/+30
* | Merge pull request #1055 from matrix-org/erikj/occaisonally_persistErik Johnston2016-08-301-0/+28
|\ \
| * | Check correct variableErik Johnston2016-08-301-1/+1
| * | Occaisonally persist unpersisted presence updatesErik Johnston2016-08-301-0/+28
* | | Don't notify for online -> online transitions.Erik Johnston2016-08-301-1/+6
|/ /
* | Comment about message deletionErik Johnston2016-08-301-0/+3
* | Fix checkErik Johnston2016-08-301-2/+1
* | Noop get_new_messages_for_device if token hasn't changedErik Johnston2016-08-301-9/+12
* | Merge pull request #1049 from matrix-org/erikj/presence_users_in_roomErik Johnston2016-08-306-13/+28
|\ \
| * | Use state handler instead of get_users_in_room/get_joined_hostsErik Johnston2016-08-266-13/+28
* | | Merge remote-tracking branch 'origin/develop' into markjh/direct_to_deviceMark Haines2016-08-265-167/+309
|\| |
| * | Measure _filter_events_for_serverErik Johnston2016-08-261-0/+2
| * | Don't pull out full state for _filter_events_for_serverErik Johnston2016-08-261-1/+25
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/state_idsErik Johnston2016-08-262-1/+13
| |\ \
| | * \ Merge pull request #1043 from matrix-org/erikj/backfill_fixErik Johnston2016-08-261-1/+3
| | |\ \
| | | * | Fix None check in backfillErik Johnston2016-08-251-1/+3
| * | | | Make sync not pull out full stateErik Johnston2016-08-251-34/+41
| * | | | Replace context.current_state with context.current_state_idsErik Johnston2016-08-254-131/+226
| * | | | Pull out event ids rather than full events for stateErik Johnston2016-08-251-0/+12
| | |/ / | |/| |
* | | | Merge branch 'develop' into markjh/direct_to_deviceMark Haines2016-08-254-36/+57
|\ \ \ \ | | |/ / | |/| |
| * | | Merge pull request #1041 from matrix-org/paul/third-party-lookupPaul Evans2016-08-251-0/+10
| |\ \ \ | | |/ / | |/| |