From 5ef76b96c7845366b8234e530282d9428336fb4a Mon Sep 17 00:00:00 2001 From: KeyserSosa Date: Mon, 3 May 2010 16:17:21 -0700 Subject: [PATCH] New features: * self service sponsored links (initial version with no targeting) * credit card processing with authorize.net (and corresponding interaction code) * hardcache -- for persistent cache keys with expiration * Awards code * messaging overhaul round 1. Added mark as unread as well as message sorting Additions: * add TedScraper and improve youtube scraper (ala tritelife); move traffic link on sponsored links and make them still visible when the promotion is over * compressify all of our pngs, and set it up so thumbs, sr images, and the sprite get compressed every time they are generated * rate limit logins (naive way) * add a limit to the length of the moderator sidebox. * add over18 thumbnail handling and NSFW label on nsfw content * make NSFW label optional, and make the operation of the pref checkboxes sensible * add the option (for moderators) to remove a subreddit from the default set * Combine the queue handling code to be easily plumbed, and use it to precompute /comments Bugfixes: * trap duplicate vote error * Fixed new mail mouseover on toolbar * spammers can't send empty bodied emails any more (they will get rejected as they should). --- r2/Makefile | 2 +- r2/example.ini | 8 +- r2/r2/controllers/api.py | 200 ++++++++------- r2/r2/controllers/buttons.py | 1 + r2/r2/controllers/feedback.py | 5 +- r2/r2/controllers/front.py | 8 +- r2/r2/controllers/health.py | 2 +- r2/r2/controllers/listingcontroller.py | 39 ++- r2/r2/controllers/post.py | 9 + r2/r2/controllers/promotecontroller.py | 49 ++-- r2/r2/controllers/reddit_base.py | 3 - r2/r2/controllers/validator/validator.py | 17 +- r2/r2/lib/amqp.py | 130 +++++----- r2/r2/lib/app_globals.py | 54 +++- r2/r2/lib/cache.py | 32 +++ r2/r2/lib/comment_tree.py | 4 +- r2/r2/lib/contrib/nymph.py | 18 +- r2/r2/lib/cssfilter.py | 13 +- r2/r2/lib/db/queries.py | 242 ++++++++++++++++-- r2/r2/lib/db/query_queue.py | 16 +- r2/r2/lib/db/tdb_lite.py | 84 ++++++ r2/r2/lib/db/tdb_sql.py | 24 +- r2/r2/lib/db/thing.py | 4 + r2/r2/lib/emailer.py | 7 +- r2/r2/lib/filters.py | 17 ++ r2/r2/lib/hardcachebackend.py | 132 ++++++++++ r2/r2/lib/jsontemplates.py | 12 +- r2/r2/lib/manager/db_manager.py | 11 +- r2/r2/lib/media.py | 10 +- r2/r2/lib/menus.py | 7 +- r2/r2/lib/organic.py | 2 +- r2/r2/lib/pages/pages.py | 107 +++++--- r2/r2/lib/pages/things.py | 2 + r2/r2/lib/promote.py | 7 +- r2/r2/lib/queues.py | 97 +++++++ r2/r2/lib/scraper.py | 41 ++- r2/r2/lib/solrsearch.py | 3 +- r2/r2/lib/utils/utils.py | 113 ++++---- r2/r2/lib/workqueue.py | 27 +- r2/r2/models/__init__.py | 2 - r2/r2/models/account.py | 7 +- r2/r2/models/admintools.py | 11 +- r2/r2/models/award.py | 61 ++++- r2/r2/models/builder.py | 30 +-- r2/r2/models/link.py | 81 ++++-- r2/r2/models/subreddit.py | 16 +- r2/r2/models/thing_changes.py | 34 --- r2/r2/models/vote.py | 9 +- r2/r2/public/static/adowngray.png | Bin 280 -> 195 bytes r2/r2/public/static/adownmod.png | Bin 322 -> 303 bytes r2/r2/public/static/alien-clippy.png | Bin 2537 -> 1718 bytes r2/r2/public/static/apple-touch-icon.png | Bin 1996 -> 976 bytes r2/r2/public/static/aupgray.png | Bin 275 -> 193 bytes r2/r2/public/static/aupmod.png | Bin 334 -> 310 bytes r2/r2/public/static/award.png | Bin 218 -> 195 bytes .../public/static/base.reddit.com.header.png | Bin 2493 -> 1203 bytes r2/r2/public/static/beta.reddit1.png | Bin 2410 -> 1343 bytes r2/r2/public/static/beta.reddit2.png | Bin 2438 -> 1389 bytes r2/r2/public/static/beta.reddit3.png | Bin 2855 -> 1594 bytes r2/r2/public/static/beta.reddit4.png | Bin 3452 -> 1883 bytes r2/r2/public/static/blog-collapsed-hover.png | Bin 452 -> 303 bytes r2/r2/public/static/blog-collapsed.png | Bin 428 -> 306 bytes r2/r2/public/static/blog-expanded-hover.png | Bin 440 -> 298 bytes r2/r2/public/static/blog-expanded.png | Bin 411 -> 302 bytes r2/r2/public/static/blog_head.png | Bin 589 -> 525 bytes r2/r2/public/static/blog_snoo.png | Bin 982 -> 700 bytes r2/r2/public/static/blued.png | Bin 163 -> 149 bytes r2/r2/public/static/bluer.png | Bin 171 -> 151 bytes r2/r2/public/static/breakout.png | Bin 224 -> 203 bytes r2/r2/public/static/button-normal.png | Bin 220 -> 214 bytes r2/r2/public/static/button-pressed.png | Bin 218 -> 205 bytes r2/r2/public/static/cclogo.png | Bin 5378 -> 4978 bytes r2/r2/public/static/clippy-bullet.png | Bin 349 -> 282 bytes r2/r2/public/static/continue-thread.png | Bin 172 -> 149 bytes r2/r2/public/static/create-a-reddit.png | Bin 1187 -> 833 bytes r2/r2/public/static/css/reddit.css | 107 +++++++- r2/r2/public/static/css_disliked.png | Bin 714 -> 482 bytes r2/r2/public/static/css_liked.png | Bin 686 -> 456 bytes r2/r2/public/static/css_login.png | Bin 740 -> 468 bytes r2/r2/public/static/css_saved.png | Bin 425 -> 294 bytes r2/r2/public/static/css_submit.png | Bin 1007 -> 634 bytes r2/r2/public/static/css_update.png | Bin 621 -> 417 bytes r2/r2/public/static/dislike_firefox.png | Bin 1215 -> 1086 bytes r2/r2/public/static/dislike_ie.png | Bin 1376 -> 1050 bytes r2/r2/public/static/dislike_safari.png | Bin 1503 -> 868 bytes r2/r2/public/static/dorks-toolbar.png | Bin 504 -> 471 bytes r2/r2/public/static/find.png | Bin 4282 -> 4128 bytes r2/r2/public/static/firefox.png | Bin 9033 -> 8154 bytes r2/r2/public/static/gagged-alien.png | Bin 4454 -> 2576 bytes r2/r2/public/static/gradient-button-hover.png | Bin 177 -> 174 bytes r2/r2/public/static/gradient-button.png | Bin 149 -> 138 bytes r2/r2/public/static/green-check.png | Bin 0 -> 834 bytes r2/r2/public/static/help.png | Bin 206 -> 187 bytes r2/r2/public/static/ie.png | Bin 8084 -> 7498 bytes r2/r2/public/static/js/jquery.reddit.js | 22 +- r2/r2/public/static/js/reddit.js | 55 +++- r2/r2/public/static/js/sponsored.js | 2 +- r2/r2/public/static/kill.png | Bin 216 -> 190 bytes r2/r2/public/static/like_firefox.png | Bin 1124 -> 1038 bytes r2/r2/public/static/like_ie.png | Bin 1281 -> 1013 bytes r2/r2/public/static/like_safari.png | Bin 1118 -> 663 bytes r2/r2/public/static/link-active.png | Bin 245 -> 203 bytes r2/r2/public/static/link.png | Bin 198 -> 174 bytes r2/r2/public/static/littlehead.png | Bin 1165 -> 943 bytes r2/r2/public/static/logo-toolbar.png | Bin 582 -> 572 bytes r2/r2/public/static/mail.png | Bin 212 -> 184 bytes r2/r2/public/static/mailgray.png | Bin 223 -> 184 bytes r2/r2/public/static/next_organic.png | Bin 847 -> 787 bytes r2/r2/public/static/noimage.png | Bin 1997 -> 1287 bytes r2/r2/public/static/over18.png | Bin 12738 -> 10060 bytes r2/r2/public/static/over18_icon.png | Bin 306 -> 235 bytes r2/r2/public/static/pencil.png | Bin 450 -> 444 bytes r2/r2/public/static/permalink-arrow.png | Bin 168 -> 150 bytes r2/r2/public/static/pixel.png | Bin 110 -> 105 bytes r2/r2/public/static/poll-collapsed-hover.png | Bin 230 -> 191 bytes r2/r2/public/static/poll-collapsed.png | Bin 228 -> 180 bytes r2/r2/public/static/poll-expanded-hover.png | Bin 220 -> 189 bytes r2/r2/public/static/poll-expanded.png | Bin 217 -> 179 bytes r2/r2/public/static/prev_organic.png | Bin 832 -> 811 bytes r2/r2/public/static/reddit-is-down-brb.png | Bin 13168 -> 7407 bytes r2/r2/public/static/reddit.com.header.png | Bin 2493 -> 1203 bytes r2/r2/public/static/reddit404a.png | Bin 12394 -> 5298 bytes r2/r2/public/static/reddit404b.png | Bin 13046 -> 5693 bytes r2/r2/public/static/reddit404c.png | Bin 12339 -> 5400 bytes r2/r2/public/static/reddit404d.png | Bin 12402 -> 5317 bytes r2/r2/public/static/reddit404e.png | Bin 14293 -> 6021 bytes r2/r2/public/static/reddit500.png | Bin 24119 -> 10199 bytes r2/r2/public/static/reddit_alien.png | Bin 2254 -> 1077 bytes r2/r2/public/static/reddit_firefox.png | Bin 1293 -> 1130 bytes r2/r2/public/static/reddit_ie.png | Bin 1451 -> 1089 bytes r2/r2/public/static/reddit_safari.png | Bin 1870 -> 1095 bytes r2/r2/public/static/redditheaderScience.png | Bin 3829 -> 3066 bytes r2/r2/public/static/rightarrow.png | Bin 183 -> 171 bytes r2/r2/public/static/safari.png | Bin 12030 -> 9473 bytes r2/r2/public/static/save_firefox.png | Bin 1169 -> 1060 bytes r2/r2/public/static/save_ie.png | Bin 1322 -> 1023 bytes r2/r2/public/static/save_safari.png | Bin 1242 -> 719 bytes r2/r2/public/static/serendipity!_firefox.png | Bin 4124 -> 3798 bytes r2/r2/public/static/serendipity!_ie.png | Bin 1481 -> 1105 bytes r2/r2/public/static/serendipity!_safari.png | Bin 1830 -> 1099 bytes r2/r2/public/static/spreddit_firefox.png | Bin 1259 -> 1094 bytes r2/r2/public/static/spreddit_ie.png | Bin 1432 -> 1067 bytes r2/r2/public/static/spreddit_safari.png | Bin 1727 -> 989 bytes r2/r2/public/static/sr-add-button.png | Bin 985 -> 822 bytes r2/r2/public/static/sr-remove-button.png | Bin 1452 -> 1101 bytes r2/r2/public/static/submit-alien.png | Bin 2065 -> 1162 bytes r2/r2/public/static/submit-hope.png | Bin 2143 -> 1942 bytes r2/r2/public/static/transpLOGO.png | Bin 1738 -> 1220 bytes r2/r2/public/static/vid-collapsed-hover.png | Bin 454 -> 350 bytes r2/r2/public/static/vid-collapsed.png | Bin 376 -> 319 bytes r2/r2/public/static/vid-expanded-hover.png | Bin 442 -> 339 bytes r2/r2/public/static/vid-expanded.png | Bin 356 -> 306 bytes r2/r2/public/static/widget_arrows.png | Bin 955 -> 753 bytes r2/r2/public/static/widget_arrows_down.png | Bin 1005 -> 925 bytes r2/r2/public/static/widget_arrows_up.png | Bin 1041 -> 951 bytes r2/r2/public/static/wired_w.png | Bin 650 -> 634 bytes r2/r2/public/static/youbrokeit.png | Bin 16318 -> 9583 bytes r2/r2/templates/adminawards.html | 24 +- r2/r2/templates/appservicemonitor.html | 2 +- r2/r2/templates/createsubreddit.html | 8 + r2/r2/templates/dart_ad.html | 3 +- r2/r2/templates/frametoolbar.html | 2 +- r2/r2/templates/link.html | 9 + r2/r2/templates/message.html | 18 +- r2/r2/templates/organiclisting.html | 42 ++- r2/r2/templates/prefoptions.html | 39 ++- r2/r2/templates/printable.html | 3 +- r2/r2/templates/printablebuttons.html | 15 +- r2/r2/templates/promotelinkform.html | 16 +- r2/r2/templates/searchbar.html | 3 +- r2/r2/templates/searchform.html | 3 + r2/r2/templates/selfserveblurb.html | 40 ++- r2/r2/templates/sidecontentbox.html | 8 + r2/r2/templates/trophycase.html | 54 +++- r2/r2/templates/userawards.html | 30 ++- 175 files changed, 1719 insertions(+), 596 deletions(-) create mode 100644 r2/r2/lib/db/tdb_lite.py create mode 100644 r2/r2/lib/hardcachebackend.py create mode 100644 r2/r2/lib/queues.py delete mode 100644 r2/r2/models/thing_changes.py create mode 100644 r2/r2/public/static/green-check.png mode change 100755 => 100644 r2/r2/public/static/pencil.png mode change 100755 => 100644 r2/r2/public/static/reddit404a.png mode change 100755 => 100644 r2/r2/public/static/reddit404b.png mode change 100755 => 100644 r2/r2/public/static/reddit404c.png mode change 100755 => 100644 r2/r2/public/static/reddit404d.png mode change 100755 => 100644 r2/r2/public/static/reddit404e.png mode change 100755 => 100644 r2/r2/public/static/reddit_firefox.png mode change 100755 => 100644 r2/r2/public/static/reddit_ie.png mode change 100755 => 100644 r2/r2/public/static/reddit_safari.png diff --git a/r2/Makefile b/r2/Makefile index 90e8499609..2a3219ab8d 100644 --- a/r2/Makefile +++ b/r2/Makefile @@ -48,7 +48,7 @@ MAINCSS := $(foreach css, $(main_css), $(static_dir)/$(css)) RTLCSS = $(CSSTARGETS:.css=-rtl.css) $(MAINCSS:.css=-rtl.css) -MD5S = $(JSTARGETS:=.md5) $(CSSTARGETS:=.md5) +MD5S = $(JSTARGETS:=.md5) $(CSSTARGETS:=.md5) $(MAINCSS:=.md5) $(RTLCSS:=.md5) ifdef PRIVATEREPOS INIUPDATE = $(wildcard *.update) diff --git a/r2/example.ini b/r2/example.ini index dd3b646573..b2cd674517 100644 --- a/r2/example.ini +++ b/r2/example.ini @@ -10,6 +10,8 @@ uncompressedJS = true translator = true sqlprinting = false +log_start = true + proxy_addr = log_path = @@ -61,6 +63,7 @@ db_create_tables = True type_db = main rel_type_db = main +hardcache_db = main db_table_link = thing, main, main db_table_account = thing, main @@ -116,6 +119,7 @@ max_sr_images = 20 show_awards = False +takedown_sr = _takedowns login_cookie = reddit_session domain = localhost domain_prefix = @@ -130,6 +134,7 @@ page_cache_time = 30 static_path = /static/ useragent = Mozilla/5.0 (compatible; bot/1.0; ChangeMe) allow_shutdown = False +profanity_wordlist = solr_url = solr_cache_time = 300 @@ -157,7 +162,6 @@ HOT_PAGE_AGE = 1 # rising_period = 12 hours -new_incubation = 90 seconds # time of ratelimit purgatory (min) RATELIMIT = 10 @@ -188,7 +192,7 @@ spreadshirt_test_font = [server:main] use = egg:Paste#http host = 0.0.0.0 -port = %(port)s +port = %(scgi_port)s [app:main] use = egg:r2 diff --git a/r2/r2/controllers/api.py b/r2/r2/controllers/api.py index b6d07b7e81..3602186893 100644 --- a/r2/r2/controllers/api.py +++ b/r2/r2/controllers/api.py @@ -28,10 +28,9 @@ from r2.models import * from r2.models.subreddit import Default as DefaultSR -import r2.models.thing_changes as tc from r2.lib.utils import get_title, sanitize_url, timeuntil, set_last_modified -from r2.lib.utils import query_string, link_from_url, timefromnow, worker +from r2.lib.utils import query_string, link_from_url, timefromnow from r2.lib.utils import timeago from r2.lib.pages import FriendList, ContributorList, ModList, \ BannedList, BoringPage, FormPage, CssError, UploadedImage, \ @@ -45,10 +44,11 @@ from r2.lib.strings import strings from r2.lib.filters import _force_unicode, websafe_json, websafe, spaceCompress from r2.lib.db import queries -from r2.lib import amqp, promote +from r2.lib.db.queries import changed +from r2.lib import promote from r2.lib.media import force_thumbnail, thumbnail_url from r2.lib.comment_tree import add_comment, delete_comment -from r2.lib import tracking, sup, cssfilter, emailer +from r2.lib import tracking, cssfilter, emailer from r2.lib.subreddit_search import search_reddits from datetime import datetime, timedelta @@ -124,8 +124,7 @@ def POST_compose(self, form, jquery, to, subject, body, ip): form.set_html(".status", _("your message has been delivered")) form.set_inputs(to = "", subject = "", text = "", captcha="") - if g.write_query_queue: - queries.new_message(m, inbox_rel) + queries.new_message(m, inbox_rel) @validatedForm(VUser(), VCaptcha(), @@ -203,15 +202,10 @@ def POST_submit(self, form, jquery, url, selftext, kind, title, save, l._commit() l.set_url_cache() - v = Vote.vote(c.user, l, True, ip) + queries.queue_vote(c.user, l, True, ip) if save: r = l._save(c.user) - if g.write_query_queue: - queries.new_savehide(r) - - #reset the hot page - if v.valid_thing: - expire_hot(sr) + queries.new_savehide(r) #set the ratelimiter if should_ratelimit: @@ -219,21 +213,8 @@ def POST_submit(self, form, jquery, url, selftext, kind, title, save, prefix = "rate_submit_") #update the queries - if g.write_query_queue: - queries.new_link(l) - queries.new_vote(v) - - # also notifies the searchchanges - worker.do(lambda: amqp.add_item('new_link', l._fullname)) + queries.new_link(l) - #update the modified flags - set_last_modified(c.user, 'overview') - set_last_modified(c.user, 'submitted') - set_last_modified(c.user, 'liked') - - #update sup listings - sup.add_update(c.user, 'submitted') - if then == 'comments': path = add_sr(l.make_permalink_slow()) elif then == 'tb': @@ -283,8 +264,16 @@ def _login(self, form, user, dest='', rem = None): def POST_login(self, form, jquery, user, dest, rem, reason): if reason and reason[0] == 'redirect': dest = reason[1] - if form.has_errors("passwd", errors.WRONG_PASSWORD): + + hc_key = "login_attempts-%s" % request.ip + + recent_attempts = g.hardcache.get(hc_key, 0) + + if recent_attempts >= 25: + raise NotImplementedError("need proper fail msg") + elif form.has_errors("passwd", errors.WRONG_PASSWORD): VRatelimit.ratelimit(rate_ip = True, prefix = 'login_', seconds=1) + g.hardcache.set(hc_key, recent_attempts + 1, 3600 * 8) else: self._login(form, user, dest, rem) @@ -406,7 +395,7 @@ def POST_friend(self, form, jquery, ip, friend, # The user who made the request must be an admin or a moderator # for the privilege change to succeed. if (not c.user_is_admin - and (type in ('moderator','contributer','banned') + and (type in ('moderator','contributer', 'banned') and not c.site.is_moderator(c.user))): abort(403,'forbidden') @@ -442,8 +431,7 @@ def POST_friend(self, form, jquery, ip, friend, item, inbox_rel = Message._new(c.user, friend, subj, msg, ip) - if g.write_query_queue: - queries.new_message(item, inbox_rel) + queries.new_message(item, inbox_rel) @validatedForm(VUser('curpass', default = ''), @@ -470,6 +458,7 @@ def POST_update(self, form, jquery, email, password, verify): # unverified email for now c.user.email_verified = None c.user._commit() + Award.take_away("verified_email", c.user) updated = True if verify: # TODO: rate limit this? @@ -523,21 +512,19 @@ def POST_del(self, thing): thing._commit() # flag search indexer that something has changed - tc.changed(thing) + changed(thing) #expire the item from the sr cache if isinstance(thing, Link): sr = thing.subreddit_slow expire_hot(sr) - if g.use_query_cache: - queries.new_link(thing) + queries.new_link(thing) #comments have special delete tasks elif isinstance(thing, Comment): thing._delete() delete_comment(thing) - if g.use_query_cache: - queries.new_comment(thing, None) + queries.new_comment(thing, None) @noresponse(VUser(), VModhash(), thing = VByName('id')) @@ -545,10 +532,24 @@ def POST_report(self, thing): '''for reporting...''' if not thing or thing._deleted: return - elif c.user._spam or c.user.ignorereports: - return elif getattr(thing, 'promoted', False): return + + # if it is a message that is being reported, ban it. + # every user is admin over their own personal inbox + if isinstance(thing, Message): + admintools.spam(thing, False, True, c.user.name) + # auto-hide links that are reported + elif isinstance(thing, Link): + r = thing._hide(c.user) + queries.new_savehide(r) + # TODO: be nice to be able to remove comments that are reported + # from a user's inbox so they don't have to look at them. + elif isinstance(thing, Comment): + pass + + if c.user._spam or c.user.ignorereports: + return Report.new(c.user, thing) @validatedForm(VUser(), @@ -573,7 +574,7 @@ def POST_editusertext(self, form, jquery, item, text): item._commit() - tc.changed(item) + changed(item) if kind == 'link': set_last_modified(item, 'comments') @@ -629,27 +630,19 @@ def POST_comment(self, commentform, jquery, parent, comment, ip): if not subject.startswith(re): subject = re + subject item, inbox_rel = Message._new(c.user, to, subject, - comment, ip) + comment, ip, parent = parent) item.parent_id = parent._id else: item, inbox_rel = Comment._new(c.user, link, parent_comment, comment, ip) - Vote.vote(c.user, item, True, ip) - - # will also update searchchanges as appropriate - worker.do(lambda: amqp.add_item('new_comment', item._fullname)) + queries.queue_vote(c.user, item, True, ip) #update last modified - set_last_modified(c.user, 'overview') - set_last_modified(c.user, 'commented') set_last_modified(link, 'comments') - #update sup listings - sup.add_update(c.user, 'commented') - #update the comment cache add_comment(item) - + # clean up the submission form and remove it from the DOM (if reply) t = commentform.find("textarea") t.attr('rows', 3).html("").attr("value", "") @@ -657,25 +650,22 @@ def POST_comment(self, commentform, jquery, parent, comment, ip): commentform.remove() jquery.things(parent._fullname).set_html(".reply-button:first", _("replied")) - + # insert the new comment jquery.insert_things(item) # remove any null listings that may be present jquery("#noresults").hide() - + #update the queries - if g.write_query_queue: - if is_message: - queries.new_message(item, inbox_rel) - else: - queries.new_comment(item, inbox_rel) - + if is_message: + queries.new_message(item, inbox_rel) + else: + queries.new_comment(item, inbox_rel) + #set the ratelimiter if should_ratelimit: VRatelimit.ratelimit(rate_user=True, rate_ip = True, prefix = "rate_comment_") - - @validatedForm(VUser(), VModhash(), @@ -756,28 +746,15 @@ def POST_vote(self, dir, thing, ip, vote_type): else False if dir < 0 else None) organic = vote_type == 'organic' - v = Vote.vote(user, thing, dir, ip, organic) + queries.queue_vote(user, thing, dir, ip, organic) #update relevant caches if isinstance(thing, Link): - sr = thing.subreddit_slow set_last_modified(c.user, 'liked') set_last_modified(c.user, 'disliked') - #update sup listings - if dir: - sup.add_update(c.user, 'liked') - elif dir is False: - sup.add_update(c.user, 'disliked') - - if v.valid_thing: - expire_hot(sr) - - if g.write_query_queue: - queries.new_vote(v) - # flag search indexer that something has changed - tc.changed(thing) + changed(thing) @validatedForm(VUser(), VModhash(), @@ -817,7 +794,7 @@ def POST_subreddit_stylesheet(self, form, jquery, c.site.stylesheet_hash = md5(stylesheet_contents_parsed).hexdigest() set_last_modified(c.site,'stylesheet_contents') - tc.changed(c.site) + changed(c.site) c.site._commit() form.set_html(".status", _('saved')) @@ -984,6 +961,7 @@ def POST_upload_sr_img(self, file, header, sponsor, name, form_id): description = VLength("description", max_length = 1000), lang = VLang("lang"), over_18 = VBoolean('over_18'), + allow_top = VBoolean('allow_top'), show_media = VBoolean('show_media'), type = VOneOf('type', ('public', 'private', 'restricted')), ip = ValidIP(), @@ -1001,7 +979,8 @@ def POST_site_admin(self, form, jquery, name, ip, sr, ad_type, ad_file, redir = False kw = dict((k, v) for k, v in kw.iteritems() if k in ('name', 'title', 'domain', 'description', 'over_18', - 'show_media', 'type', 'lang', "css_on_cname")) + 'show_media', 'type', 'lang', "css_on_cname", + 'allow_top')) #if a user is banned, return rate-limit errors if c.user._spam: @@ -1031,9 +1010,6 @@ def POST_site_admin(self, form, jquery, name, ip, sr, ad_type, ad_file, sr = Subreddit._new(name = name, author_id = c.user._id, ip = ip, **kw) - # will also update search - worker.do(lambda: amqp.add_item('new_subreddit', sr._fullname)) - Subreddit.subscribe_defaults(c.user) # make sure this user is on the admin list of that site! if sr.add_subscriber(c.user): @@ -1046,6 +1022,8 @@ def POST_site_admin(self, form, jquery, name, ip, sr, ad_type, ad_file, rate_ip = True, prefix = "create_reddit_") + queries.new_subreddit(sr) + #editting an existing reddit elif sr.is_moderator(c.user) or c.user_is_admin: @@ -1072,7 +1050,7 @@ def POST_site_admin(self, form, jquery, name, ip, sr, ad_type, ad_file, Subreddit._by_domain(sr.domain, _update = True) # flag search indexer that something has changed - tc.changed(sr) + changed(sr) form.parent().set_html('.status', _("saved")) if redir: @@ -1118,8 +1096,7 @@ def POST_distinguish(self, form, jquery, thing, how): def POST_save(self, thing): if not thing: return r = thing._save(c.user) - if g.write_query_queue: - queries.new_savehide(r) + queries.new_savehide(r) @noresponse(VUser(), VModhash(), @@ -1127,17 +1104,39 @@ def POST_save(self, thing): def POST_unsave(self, thing): if not thing: return r = thing._unsave(c.user) - if g.write_query_queue and r: + if r: queries.new_savehide(r) + @noresponse(VUser(), + VModhash(), + thing = VByName('id')) + def POST_unread_message(self, thing): + if not thing: + return + if hasattr(thing, "to_id") and c.user._id != thing.to_id: + return + thing.new = True + thing._commit() + + @noresponse(VUser(), + VModhash(), + thing = VByName('id')) + def POST_read_message(self, thing): + if not thing: return + if hasattr(thing, "to_id") and c.user._id != thing.to_id: + return + thing.new = False + thing._commit() + + + @noresponse(VUser(), VModhash(), thing = VByName('id')) def POST_hide(self, thing): if not thing: return r = thing._hide(c.user) - if g.write_query_queue: - queries.new_savehide(r) + queries.new_savehide(r) @noresponse(VUser(), VModhash(), @@ -1145,7 +1144,7 @@ def POST_hide(self, thing): def POST_unhide(self, thing): if not thing: return r = thing._unhide(c.user) - if g.write_query_queue and r: + if r: queries.new_savehide(r) @@ -1216,20 +1215,17 @@ def GET_bookmarklet(self, action, uh, links): Subreddit.load_subreddits(links, return_dict = False) user = c.user if c.user_is_loggedin else None links = [l for l in links if l.subreddit_slow.can_view(user)] - + if links: if action in ['like', 'dislike']: #vote up all of the links for link in links: - v = Vote.vote(c.user, link, action == 'like', - request.ip) - if g.write_query_queue: - queries.new_vote(v) + queries.queue_vote(c.user, link, + action == 'like', request.ip) elif action == 'save': link = max(links, key = lambda x: x._score) r = link._save(c.user) - if g.write_query_queue: - queries.new_savehide(r) + queries.new_savehide(r) return self.redirect("/static/css_%sd.png" % action) return self.redirect("/static/css_submit.png") @@ -1315,7 +1311,7 @@ def _subscribe(self, sr, sub): else: if sr.remove_subscriber(c.user): sr._incr('_ups', -1) - tc.changed(sr) + changed(sr) @noresponse(VAdmin(), @@ -1337,12 +1333,19 @@ def POST_enable_lang(self, tr): colliding_award=VAwardByCodename(("codename", "fullname")), codename = VLength("codename", max_length = 100), title = VLength("title", max_length = 100), + awardtype = VOneOf("awardtype", + ("regular", "manual", "invisible")), imgurl = VLength("imgurl", max_length = 1000)) def POST_editaward(self, form, jquery, award, colliding_award, codename, - title, imgurl): - if form.has_errors(("codename", "title", "imgurl"), errors.NO_TEXT): + title, awardtype, imgurl): + if form.has_errors(("codename", "title", "awardtype", "imgurl"), + errors.NO_TEXT): pass + if awardtype is None: + form.set_html(".status", "bad awardtype") + return + if form.has_errors(("codename"), errors.INVALID_OPTION): form.set_html(".status", "some other award has that codename") pass @@ -1351,12 +1354,13 @@ def POST_editaward(self, form, jquery, award, colliding_award, codename, return if award is None: - Award._new(codename, title, imgurl) + Award._new(codename, title, awardtype, imgurl) form.set_html(".status", "saved. reload to see it.") return award.codename = codename award.title = title + award.awardtype = awardtype award.imgurl = imgurl award._commit() form.set_html(".status", _('saved')) diff --git a/r2/r2/controllers/buttons.py b/r2/r2/controllers/buttons.py index 44d924a174..9d43678eb6 100644 --- a/r2/r2/controllers/buttons.py +++ b/r2/r2/controllers/buttons.py @@ -96,6 +96,7 @@ def GET_button_content(self, url, title, css, vote, newwindow, width, link): if link: url = link.url + title = link.title wrapper = make_wrapper(Button if vote else ButtonNoBody, url = url, target = "_new" if newwindow else "_parent", diff --git a/r2/r2/controllers/feedback.py b/r2/r2/controllers/feedback.py index 0f27e1b06a..4fb11df17b 100644 --- a/r2/r2/controllers/feedback.py +++ b/r2/r2/controllers/feedback.py @@ -27,11 +27,8 @@ class FeedbackController(RedditController): def GET_ad_inq(self): - title = _("inquire about advertising on reddit") return FormPage('advertise', - content = PaneStack([SelfServeBlurb(), - Feedback(title=title, - action='ad_inq')]), + content = SelfServeBlurb(), loginbox = False).render() def GET_feedback(self): diff --git a/r2/r2/controllers/front.py b/r2/r2/controllers/front.py index 1d0f2eb698..643d56c9ff 100644 --- a/r2/r2/controllers/front.py +++ b/r2/r2/controllers/front.py @@ -139,6 +139,7 @@ def GET_verify_email(self, cache_evt, key, dest): cache_evt.clear() c.user.email_verified = True c.user._commit() + Award.give_if_needed("verified_email", c.user) return self.redirect(dest) @validate(cache_evt = VCacheKey('reset', ('key',)), @@ -414,14 +415,16 @@ def GET_search_reddits(self, query, reverse, after, count, num): prev_search = query, elapsed_time = t, num_results = num, + # update if we ever add sorts + search_params = {}, title = _("search results")).render() return res verify_langs_regex = re.compile(r"^[a-z][a-z](,[a-z][a-z])*$") @base_listing @validate(query = nop('q'), - time = VMenu('action', TimeMenu, remember = False), - sort = VMenu('sort', SearchSortMenu, remember = False), + time = VMenu('action', TimeMenu), + sort = VMenu('sort', SearchSortMenu), langs = nop('langs')) def GET_search(self, query, num, time, reverse, after, count, langs, sort): """Search links page.""" @@ -464,6 +467,7 @@ def GET_search(self, query, num, time, reverse, after, count, langs, sort): res = SearchPage(_('search results'), query, t, num, content=spane, nav_menus = [TimeMenu(default = time), SearchSortMenu(default=sort)], + search_params = dict(sort = sort, t = time), infotext = infotext).render() return res diff --git a/r2/r2/controllers/health.py b/r2/r2/controllers/health.py index 7c8a041df3..ce98150f79 100644 --- a/r2/r2/controllers/health.py +++ b/r2/r2/controllers/health.py @@ -6,7 +6,7 @@ from pylons import c, g from reddit_base import RedditController -from r2.lib.utils import worker +from r2.lib.amqp import worker class HealthController(RedditController): def shutdown(self): diff --git a/r2/r2/controllers/listingcontroller.py b/r2/r2/controllers/listingcontroller.py index a41061b7bc..1d9279fad0 100644 --- a/r2/r2/controllers/listingcontroller.py +++ b/r2/r2/controllers/listingcontroller.py @@ -295,9 +295,6 @@ def keep(item): elif wouldkeep and c.user_is_loggedin and c.user._id == item.author_id: # also let the author of the link see them return True - elif item._date > timeago(g.new_incubation): - # it's too young to show yet - return False else: # otherwise, fall back to the regular logic (don't # show hidden links, etc) @@ -484,6 +481,19 @@ class MessageController(ListingController): show_sidebar = False render_cls = MessagePage + @property + def menus(self): + if self.where in ('inbox', 'messages', 'comments', 'selfreply'): + buttons = (NavButton(_("all"), "inbox"), + NavButton(plurals.messages, "messages"), + NavButton(_("comment replies"), 'comments'), + NavButton(_("post replies"), 'selfreply')) + + return [NavMenu(buttons, base_path = '/message/', + default = 'inbox', type = "flatlist")] + return [] + + def title(self): return _('messages') + ': ' + _(self.where) @@ -497,11 +507,23 @@ def builder_wrapper(thing): w.to_id = c.user._id w.was_comment = True w.permalink, w._fullname = p, f - return w else: - return ListingController.builder_wrapper(thing) + w = ListingController.builder_wrapper(thing) + + if c.user.pref_mark_messages_read and thing.new: + w.new = True + thing.new = False + thing._commit() + + return w def query(self): + if self.where == 'messages': + q = queries.get_inbox_messages(c.user) + elif self.where == 'comments': + q = queries.get_inbox_comments(c.user) + elif self.where == 'selfreply': + q = queries.get_inbox_selfreply(c.user) if self.where == 'inbox': q = queries.get_inbox(c.user) @@ -613,9 +635,4 @@ class CommentsController(ListingController): title_text = _('comments') def query(self): - q = Comment._query(Comment.c._spam == (True,False), - sort = desc('_date')) - if not c.user_is_admin: - q._filter(Comment.c._spam == False) - - return q + return queries.get_all_comments() diff --git a/r2/r2/controllers/post.py b/r2/r2/controllers/post.py index c9eee9d28c..dcdcefe3ae 100644 --- a/r2/r2/controllers/post.py +++ b/r2/r2/controllers/post.py @@ -104,7 +104,10 @@ def POST_unlogged_options(self, all_langs, pref_lang): pref_num_comments = VInt('num_comments', 1, g.max_comments, default = g.num_comments), pref_show_stylesheets = VBoolean('show_stylesheets'), + pref_no_profanity = VBoolean('no_profanity'), + pref_label_nsfw = VBoolean('label_nsfw'), pref_show_promote = VBoolean('show_promote'), + pref_mark_messages_read = VBoolean("mark_messages_read"), all_langs = nop('all-langs', default = 'all')) def POST_options(self, all_langs, pref_lang, **kw): #temporary. eventually we'll change pref_clickgadget to an @@ -115,6 +118,12 @@ def POST_options(self, all_langs, pref_lang, **kw): elif not kw.get('pref_show_promote'): kw['pref_show_promote'] = False + if not kw.get("pref_over_18") or not c.user.pref_over_18: + kw['pref_no_profanity'] = True + + if kw.get("pref_no_profanity") or c.user.pref_no_profanity: + kw['pref_label_nsfw'] = True + self.set_options(all_langs, pref_lang, **kw) u = UrlParser(c.site.path + "prefs") u.update_query(done = 'true') diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index e2c320052d..f25c08c89b 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -66,22 +66,22 @@ def query(self): STATUS.rejected)) elif self.sort == "unpaid_promos": q._filter(Link.c.promote_status == STATUS.unpaid) + elif self.sort == "rejected_promos": + q._filter(Link.c.promote_status == STATUS.rejected) elif self.sort == "live_promos": q._filter(Link.c.promote_status == STATUS.promoted) return q - @validate(VPaidSponsor(), - VVerifiedUser()) def GET_listing(self, sort = "", **env): + if not c.user_is_loggedin or not c.user.email_verified: + return self.redirect("/ad_inq") self.sort = sort return ListingController.GET_listing(self, **env) GET_index = GET_listing - - # To open up: VSponsor -> VVerifiedUser - @validate(VPaidSponsor(), - VVerifiedUser()) + + @validate(VVerifiedUser()) def GET_new_promo(self): return PromotePage('content', content = PromoteLinkForm()).render() @@ -103,8 +103,7 @@ def GET_edit_promo(self, link): return page.render() - @validate(VPaidSponsor(), - VVerifiedUser()) + @validate(VVerifiedUser()) def GET_graph(self): content = Promote_Graph() if c.user_is_sponsor and c.render_style == 'csv': @@ -163,17 +162,19 @@ def POST_promote(self, thing): reason = nop("reason")) def POST_unpromote(self, thing, reason): if thing: + # reject anything that hasn't yet been promoted if (c.user_is_sponsor and - (thing.promote_status in (promote.STATUS.unpaid, - promote.STATUS.unseen, - promote.STATUS.accepted, - promote.STATUS.promoted)) ): + thing.promote_status < promote.STATUS.promoted): + promote.reject_promo(thing, reason = reason) + # also reject anything that is live but has a reason given + elif (c.user_is_sponsor and reason and + thing.promte_status == promote.STATUS.promoted): promote.reject_promo(thing, reason = reason) + # otherwise, mark it as "finished" else: promote.unpromote(thing) - # TODO: when opening up, may have to refactor - @validatedForm(VPaidSponsor('link_id'), + @validatedForm(VSponsor('link_id'), VModhash(), VRatelimit(rate_user = True, rate_ip = True, @@ -221,12 +222,21 @@ def POST_new_promo(self, form, jquery, l, ip, title, url, dates, # check dates and date range start, end = [x.date() for x in dates] if dates else (None, None) - if not l or (l._date.date(), l.promote_until.date()) == (start,end): + if (not l or + (l.promote_status != promote.STATUS.promoted and + (l._date.date(), l.promote_until.date()) != (start,end))): if (form.has_errors('startdate', errors.BAD_DATE, errors.BAD_FUTURE_DATE) or form.has_errors('enddate', errors.BAD_DATE, errors.BAD_FUTURE_DATE, errors.BAD_DATE_RANGE)): return + # if the dates have been updated, it is possible that the + # bid is no longer valid + duration = max((end - start).days, 1) + if float(bid) / duration < g.min_promote_bid: + c.errors.add(errors.BAD_BID, field = 'bid', + msg_params = {"min": g.min_promote_bid, + "max": g.max_promote_bid}) # dates have been validated at this point. Next validate title, etc. if (form.has_errors('title', errors.NO_TEXT, @@ -384,12 +394,6 @@ def POST_update_pay(self, form, jquery, bid, link, customer_id, pay_id, form.set_html(".status", _("that promotion is already over, so updating " "your bid is kind of pointless, don't you think?")) - # don't create or modify a transaction if no changes have been made. - elif (link.promote_status > promote.STATUS.unpaid and - not address_modified and - getattr(link, "promote_bid", "") == bid): - form.set_html(".status", - _("no changes needed to be made")) elif pay_id: # valid bid and created or existing bid id. # check if already a transaction @@ -411,7 +415,8 @@ def GET_pay(self, article): customer_id = data.customerProfileId, profiles = data.paymentProfiles) res = LinkInfoPage(link = article, - content = content) + content = content, + show_sidebar = False) return res.render() def GET_link_thumb(self, *a, **kw): diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index 8a961b7e81..feece61a73 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -520,9 +520,6 @@ def pre(self): if not g.disallow_db_writes: c.user.update_last_visit(c.start_time) - #TODO: temporary - c.user_is_paid_sponsor = c.user.name.lower() in g.paid_sponsors - c.over18 = over18() #set_browser_langs() diff --git a/r2/r2/controllers/validator/validator.py b/r2/r2/controllers/validator/validator.py index 0d1e515acf..89eb6dcbab 100644 --- a/r2/r2/controllers/validator/validator.py +++ b/r2/r2/controllers/validator/validator.py @@ -47,8 +47,7 @@ def visible_promo(article): # promos are visible only if comments are not disabled and the # user is either the author or the link is live/previously live. if is_promo: - return (not article.disable_comments and - (is_author or + return (is_author or (not article.disable_comments and article.promote_status >= promote.STATUS.promoted)) # not a promo, therefore it is visible return True @@ -515,21 +514,13 @@ def run(self, link_id = None): return except (NotFound, ValueError): pass - abort(403, 'forbidden') + abort(403, 'forbidden') class VTrafficViewer(VSponsor): def user_test(self, thing): return (VSponsor.user_test(self, thing) or promote.is_traffic_viewer(thing, c.user)) -# TODO: tempoary validator to be replaced with Vuser once we get he -# bugs worked out -class VPaidSponsor(VSponsor): - def run(self, link_id = None): - if c.user_is_paid_sponsor: - return - VSponsor.run(self, link_id) - class VSrModerator(Validator): def run(self): if not (c.user_is_loggedin and c.site.is_moderator(c.user) @@ -1100,10 +1091,10 @@ def run(self, date): business_days = self.business_days) if self.future is not None and date.date() < future.date(): self.set_error(errors.BAD_FUTURE_DATE, - {"day": future.days}) + {"day": self.future}) elif self.past is not None and date.date() > past.date(): self.set_error(errors.BAD_PAST_DATE, - {"day": past.days}) + {"day": self.past}) return date.replace(tzinfo=g.tz) except (ValueError, TypeError): self.set_error(errors.BAD_DATE) diff --git a/r2/r2/lib/amqp.py b/r2/r2/lib/amqp.py index 6e897a6658..6e961cd587 100644 --- a/r2/r2/lib/amqp.py +++ b/r2/r2/lib/amqp.py @@ -20,13 +20,15 @@ # CondeNet, Inc. All Rights Reserved. ################################################################################ -from threading import local +from Queue import Queue +from threading import local, Thread from datetime import datetime import os import sys import time import errno import socket +import itertools from amqplib import client_0_8 as amqp @@ -44,9 +46,35 @@ have_init = False #there are two ways of interacting with this module: add_item and -#handle_items. add_item should only be called from the utils.worker -#thread since it might block for an arbitrary amount of time while -#trying to get a connection amqp. +#handle_items. _add_item (the internal function for adding items to +#amqp that are added using add_item) might block for an arbitrary +#amount of time while trying to get a connection amqp. + +class Worker: + def __init__(self): + self.q = Queue() + self.t = Thread(target=self._handle) + self.t.setDaemon(True) + self.t.start() + + def _handle(self): + while True: + fn = self.q.get() + try: + fn() + self.q.task_done() + except: + import traceback + print traceback.format_exc() + + def do(self, fn, *a, **kw): + fn1 = lambda: fn(*a, **kw) + self.q.put(fn1) + + def join(self): + self.q.join() + +worker = Worker() def get_connection(): global connection @@ -63,9 +91,9 @@ def get_connection(): print 'error connecting to amqp' time.sleep(1) - #don't run init_queue until someone actually needs it. this allows - #the app server to start and serve most pages if amqp isn't - #running + # don't run init_queue until someone actually needs it. this + # allows the app server to start and serve most pages if amqp + # isn't running if not have_init: init_queue() have_init = True @@ -73,7 +101,6 @@ def get_connection(): def get_channel(reconnect = False): global connection global channel - global log # Periodic (and increasing with uptime) errors appearing when # connection object is still present, but appears to have been @@ -91,67 +118,22 @@ def get_channel(reconnect = False): channel.chan = connection.channel() return channel.chan + def init_queue(): - from r2.models import admintools + from r2.lib.queues import RedditQueueMap exchange = 'reddit_exchange' chan = get_channel() - #we'll have one exchange for now - chan.exchange_declare(exchange=exchange, - type='direct', - durable=True, - auto_delete=False) - - #prec_links queue - chan.queue_declare(queue='prec_links', - durable=True, - exclusive=False, - auto_delete=False) - chan.queue_bind(routing_key='prec_links', - queue='prec_links', - exchange=exchange) - - chan.queue_declare(queue='scraper_q', - durable=True, - exclusive=False, - auto_delete=False) - - chan.queue_declare(queue='searchchanges_q', - durable=True, - exclusive=False, - auto_delete=False) - - # new_link - chan.queue_bind(routing_key='new_link', - queue='scraper_q', - exchange=exchange) - chan.queue_bind(routing_key='new_link', - queue='searchchanges_q', - exchange=exchange) - - # new_subreddit - chan.queue_bind(routing_key='new_subreddit', - queue='searchchanges_q', - exchange=exchange) - - # new_comment (nothing here for now) - - # while new items will be put here automatically, we also need a - # way to specify that the item has changed by hand - chan.queue_bind(routing_key='searchchanges_q', - queue='searchchanges_q', - exchange=exchange) - - admintools.admin_queues(chan, exchange) + RedditQueueMap(exchange, chan).init() -def add_item(routing_key, body, message_id = None): +def _add_item(routing_key, body, message_id = None): """adds an item onto a queue. If the connection to amqp is lost it will try to reconnect and then call itself again.""" if not amqp_host: - print "Ignoring amqp message %r to %r" % (body, routing_key) + log.error("Ignoring amqp message %r to %r" % (body, routing_key)) return chan = get_channel() @@ -172,14 +154,17 @@ def add_item(routing_key, body, message_id = None): else: raise +def add_item(routing_key, body, message_id = None): + if amqp_host: + log.debug("amqp: adding item %r to %r" % (body, routing_key)) + + worker.do(_add_item, routing_key, body, message_id = message_id) + def handle_items(queue, callback, ack = True, limit = 1, drain = False): """Call callback() on every item in a particular queue. If the connection to the queue is lost, it will die. Intended to be used as a long-running process.""" - # debuffer stdout so that logging comes through more real-time - sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) - chan = get_channel() while True: msg = chan.basic_get(queue) @@ -199,11 +184,26 @@ def handle_items(queue, callback, ack = True, limit = 1, drain = False): break # the innermost loop only msg = chan.basic_get(queue) - callback(items) - - if ack: + try: + count_str = '' + if 'message_count' in items[-1].delivery_info: + # the count from the last message, if the count is + # available + count_str = '(%d remaining)' % items[-1].delivery_info['message_count'] + print "%s: %d items %s" % (queue, len(items), count_str) + callback(items, chan) + + if ack: + for item in items: + chan.basic_ack(item.delivery_tag) + + # flush any log messages printed by the callback + sys.stdout.flush() + except: for item in items: - chan.basic_ack(item.delivery_tag) + # explicitly reject the items that we've not processed + chan.basic_reject(item.delivery_tag, requeue = True) + raise def empty_queue(queue): """debug function to completely erase the contents of a queue""" diff --git a/r2/r2/lib/app_globals.py b/r2/r2/lib/app_globals.py index 2bfbca5051..584f41cdd7 100644 --- a/r2/r2/lib/app_globals.py +++ b/r2/r2/lib/app_globals.py @@ -21,9 +21,9 @@ ################################################################################ from __future__ import with_statement from pylons import config -import pytz, os, logging, sys, socket -from datetime import timedelta -from r2.lib.cache import LocalCache, Memcache, CacheChain +import pytz, os, logging, sys, socket, re, subprocess +from datetime import timedelta, datetime +from r2.lib.cache import LocalCache, Memcache, HardCache, CacheChain from r2.lib.db.stats import QueryStats from r2.lib.translation import get_active_langs from r2.lib.lock import make_lock_factory @@ -55,7 +55,8 @@ class Globals(object): 'max_promote_bid', ] - bool_props = ['debug', 'translator', + bool_props = ['debug', 'translator', + 'log_start', 'sqlprinting', 'template_debug', 'uncompressedJS', @@ -74,8 +75,6 @@ class Globals(object): 'rendercaches', 'admins', 'sponsors', - # TODO: temporary until we open it up to all users - 'paid_sponsors', 'monitored_servers', 'automatic_reddits', 'agents', @@ -120,8 +119,6 @@ def __init__(self, global_conf, app_conf, paths, **extra): v = tuple(self.to_iter(v)) setattr(self, k, v) - self.paid_sponsors = set(x.lower() for x in self.paid_sponsors) - # initialize caches mc = Memcache(self.memcaches, pickleProtocol = 1) self.memcache = mc @@ -142,6 +139,9 @@ def __init__(self, global_conf, app_conf, paths, **extra): #load the database info self.dbm = self.load_db_params(global_conf) + # can't do this until load_db_params() has been called + self.hardcache = CacheChain((LocalCache(), mc, HardCache(self))) + #make a query cache self.stats_collector = QueryStats() @@ -190,6 +190,8 @@ def __init__(self, global_conf, app_conf, paths, **extra): else: self.log.setLevel(logging.WARNING) + if self.log_start: + self.log.error("reddit app started on %s" % datetime.now()) # set log level for pycountry which is chatty logging.getLogger('pycountry.db').setLevel(logging.CRITICAL) @@ -206,6 +208,16 @@ def __init__(self, global_conf, app_conf, paths, **extra): with open(stylesheet_path) as s: self.default_stylesheet = s.read() + self.profanities = None + if self.profanity_wordlist and os.path.exists(self.profanity_wordlist): + with open(self.profanity_wordlist, 'r') as handle: + words = [] + for line in handle: + words.append(line.strip(' \n\r')) + if words: + self.profanities = re.compile(r"\b(%s)\b" % '|'.join(words), + re.I | re.U) + self.reddit_host = socket.gethostname() self.reddit_pid = os.getpid() @@ -216,6 +228,19 @@ def __init__(self, global_conf, app_conf, paths, **extra): if self.write_query_queue and not self.amqp_host: raise Exception("amqp_host must be defined to use the query queue") + # try to set the source control revision number + try: + popen = subprocess.Popen(["git", "log", "--date=short", + "--pretty=format:%H %h", '-n1'], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + resp, stderrdata = popen.communicate() + resp = resp.strip().split(' ') + self.version, self.short_version = resp + except object, e: + self.log.info("Couldn't read source revision (%r)" % e) + self.version = self.short_version = '(unknown)' + @staticmethod def to_bool(x): return (x.lower() == 'true') if x else None @@ -241,6 +266,11 @@ def load_db_params(self, gc): dbm.type_db = dbm.engines[gc['type_db']] dbm.relation_type_db = dbm.engines[gc['rel_type_db']] + dbm.hardcache_db = dbm.engines[gc['hardcache_db']] + + def split_flags(p): + return ([n for n in p if not n.startswith("!")], + dict((n.strip('!'), True) for n in p if n.startswith("!"))) prefix = 'db_table_' for k, v in gc.iteritems(): @@ -249,10 +279,14 @@ def load_db_params(self, gc): name = k[len(prefix):] kind = params[0] if kind == 'thing': - dbm.add_thing(name, [dbm.engines[n] for n in params[1:]]) + engines, flags = split_flags(params[1:]) + dbm.add_thing(name, [dbm.engines[n] for n in engines], + **flags) elif kind == 'relation': + engines, flags = split_flags(params[3:]) dbm.add_relation(name, params[1], params[2], - [dbm.engines[n] for n in params[3:]]) + [dbm.engines[n] for n in engines], + **flags) return dbm def __del__(self): diff --git a/r2/r2/lib/cache.py b/r2/r2/lib/cache.py index d630529416..1e36925f62 100644 --- a/r2/r2/lib/cache.py +++ b/r2/r2/lib/cache.py @@ -24,6 +24,8 @@ from utils import lstrips from contrib import memcache +from r2.lib.hardcachebackend import HardCacheBackend + class CacheUtils(object): def incr_multi(self, keys, amt=1, prefix=''): for k in keys: @@ -75,6 +77,36 @@ def delete_multi(self, keys, prefix='', time=0): memcache.Client.delete_multi(self, keys, time = time, key_prefix = prefix) +class HardCache(CacheUtils): + backend = None + + def __init__(self, gc): + self.backend = HardCacheBackend(gc) + + def _split_key(self, key): + tokens = key.split("-", 1) + if len(tokens) != 2: + raise ValueError("key %s has no dash" % key) + + category, ids = tokens + return category, ids + + def set(self, key, val, time=0): + category, ids = self._split_key(key) + if time <= 0: + raise ValueError ("HardCache.set() *must* have an expiration time") + self.backend.set(category, ids, val, time) + + def get(self, key, default=None): + category, ids = self._split_key(key) + r = self.backend.get(category, ids) + if r is None: return default + return r + + def delete(self, key, time=0): + category, ids = self._split_key(key) + self.backend.delete(category, ids) + class LocalCache(dict, CacheUtils): def __init__(self, *a, **kw): return dict.__init__(self, *a, **kw) diff --git a/r2/r2/lib/comment_tree.py b/r2/r2/lib/comment_tree.py index 27a5fa7208..eacaf18d40 100644 --- a/r2/r2/lib/comment_tree.py +++ b/r2/r2/lib/comment_tree.py @@ -37,7 +37,7 @@ def add_comment(comment): def add_comment_nolock(comment): cm_id = comment._id - p_id = comment.parent_id if hasattr(comment, 'parent_id') else None + p_id = comment.parent_id link_id = comment.link_id cids, comment_tree, depth, num_children = link_comments(link_id) @@ -108,7 +108,7 @@ def load_link_comments(link_id): #make a tree comment_tree = {} for cm in comments: - p_id = cm.parent_id if hasattr(cm, 'parent_id') else None + p_id = cm.parent_id comment_tree.setdefault(p_id, []).append(cm._id) #calculate the depths diff --git a/r2/r2/lib/contrib/nymph.py b/r2/r2/lib/contrib/nymph.py index 0ad17760eb..6a45de14b3 100644 --- a/r2/r2/lib/contrib/nymph.py +++ b/r2/r2/lib/contrib/nymph.py @@ -21,6 +21,11 @@ ################################################################################ import re, sys, Image, os, hashlib, StringIO +def optimize_png(fname, optimizer = "/usr/bin/env optipng"): + if os.path.exists(fname): + os.popen("%s %s" % (optimizer, fname)) + return fname + class Spriter(object): spritable = re.compile(r" *background-image: *url\((.*)\) *.*/\* *SPRITE *\*/") @@ -31,7 +36,7 @@ def __init__(self, padding = (4, 4), self.im_lookup = {} self.ypos = [0] self.padding = padding - + self.css_path = css_path self.actual_path = actual_path @@ -65,12 +70,19 @@ def finish(self, out_file, out_string): master.paste(image, (self.padding[0], self.padding[1] + self.ypos[i])) - master.save(os.path.join(self.actual_path, out_file)) + f = os.path.join(self.actual_path, out_file) + master.save(f) + + # optimize the file + optimize_png(f) d = dict(('pos_' + str(i), -self.padding[1] - y) for i, y in enumerate(self.ypos)) - h = hashlib.md5(master.tostring()).hexdigest() + # md5 the final contents + with open(f) as handle: + h = hashlib.md5(handle.read()).hexdigest() + d['sprite'] = os.path.join(self.css_path, "%s?v=%s" % (out_file, h)) return out_string % d diff --git a/r2/r2/lib/cssfilter.py b/r2/r2/lib/cssfilter.py index 00541ad697..2163118946 100644 --- a/r2/r2/lib/cssfilter.py +++ b/r2/r2/lib/cssfilter.py @@ -29,6 +29,11 @@ from pylons import g, c from pylons.i18n import _ +import tempfile +from r2.lib import s3cp +from md5 import md5 +from r2.lib.contrib.nymph import optimize_png + import re import cssutils @@ -372,10 +377,6 @@ def save_sr_image(sr, data, resource = None): http:/${g.s3_thumb_bucket}/${sr._fullname}[_${num}].png?v=${md5hash} [Note: g.s3_thumb_bucket begins with a "/" so the above url is valid.] """ - import tempfile - from r2.lib import s3cp - from md5 import md5 - hash = md5(data).hexdigest() try: @@ -389,8 +390,8 @@ def save_sr_image(sr, data, resource = None): resource = "" resource = g.s3_thumb_bucket + sr._fullname + resource + ".png" - s3cp.send_file(f.name, resource, 'image/png', 'public-read', - None, False) + s3cp.send_file(optimize_png(f.name, g.png_optimizer), resource, + 'image/png', 'public-read', None, False) finally: f.close() diff --git a/r2/r2/lib/db/queries.py b/r2/r2/lib/db/queries.py index b77f7a8cfa..f28f5f742b 100644 --- a/r2/r2/lib/db/queries.py +++ b/r2/r2/lib/db/queries.py @@ -3,9 +3,12 @@ from r2.lib.db.thing import Thing, Merge from r2.lib.db.operators import asc, desc, timeago from r2.lib.db import query_queue +from r2.lib.normalized_hot import expire_hot from r2.lib.db.sorts import epoch_seconds -from r2.lib.utils import fetch_things2, worker, tup, UniqueIterator +from r2.lib.utils import fetch_things2, tup, UniqueIterator, set_last_modified from r2.lib.solrsearch import DomainSearchQuery +from r2.lib import amqp, sup +import cPickle as pickle from datetime import datetime import itertools @@ -121,15 +124,15 @@ def insert(self, items): def delete(self, items): """Deletes an item from the cached data.""" self.fetch() - changed = False + did_change = False for item in tup(items): t = self.make_item_tuple(item) while t in self.data: self.data.remove(t) - changed = True + did_change = True - if changed: + if did_change: query_cache.set(self.iden, self.data) def update(self): @@ -253,6 +256,11 @@ def user_query(kind, user, sort, time): q._filter(db_times[time]) return make_results(q) +def get_all_comments(): + """the master /comments page""" + q = Comment._query(sort = desc('_date')) + return make_results(q) + def get_comments(user, sort, time): return user_query(Comment, user, sort, time) @@ -272,7 +280,7 @@ def user_rel_query(rel, user, name): eager_load = True, thing_data = not g.use_query_cache ) - + return make_results(q, filter_thing2) vote_rel = Vote.rel(Account, Link) @@ -297,9 +305,13 @@ def get_inbox_messages(user): def get_inbox_comments(user): return user_rel_query(inbox_comment_rel, user, 'inbox') +def get_inbox_selfreply(user): + return user_rel_query(inbox_comment_rel, user, 'selfreply') + def get_inbox(user): return merge_results(get_inbox_comments(user), - get_inbox_messages(user)) + get_inbox_messages(user), + get_inbox_selfreply(user)) def get_sent(user): q = Message._query(Message.c.author_id == user._id, @@ -311,7 +323,10 @@ def add_queries(queries, insert_items = None, delete_items = None): """Adds multiple queries to the query queue. If insert_items or delete_items is specified, the query may not need to be recomputed at all.""" - log = g.log.debug + if not g.write_query_queue: + return + + log = g.log make_lock = g.make_lock def _add_queries(): for q in queries: @@ -320,16 +335,16 @@ def _add_queries(): with make_lock("add_query(%s)" % q.iden): if insert_items and q.can_insert(): - log("Inserting %s into query %s" % (insert_items, q)) + log.debug("Inserting %s into query %s" % (insert_items, q)) q.insert(insert_items) elif delete_items and q.can_delete(): - log("Deleting %s from query %s" % (delete_items, q)) + log.debug("Deleting %s from query %s" % (delete_items, q)) q.delete(delete_items) else: - log('Adding precomputed query %s' % q) + log.debug('Adding precomputed query %s' % q) query_queue.add_query(q) - worker.do(_add_queries) - + # let the amqp worker handle this + amqp.worker.do(_add_queries) #can be rewritten to be more efficient def all_queries(fn, obj, *param_lists): @@ -357,36 +372,60 @@ def display_jobs(jobs): ## The following functions should be called after their respective ## actions to update the correct listings. def new_link(link): + "Called on the submission and deletion of links" sr = Subreddit._byID(link.sr_id) author = Account._byID(link.author_id) results = all_queries(get_links, sr, ('hot', 'new', 'old'), ['all']) - results.extend(all_queries(get_links, sr, ('top', 'controversial'), db_times.keys())) + + results.extend(all_queries(get_links, sr, ('top', 'controversial'), + db_times.keys())) results.append(get_submitted(author, 'new', 'all')) #results.append(get_links(sr, 'toplinks', 'all')) if link._spam: results.append(get_spam_links(sr)) if link._deleted: + results.append(get_links(sr, 'new', 'all')) add_queries(results, delete_items = link) else: + # only 'new' qualifies for insertion, which will be done in + # run_new_links add_queries(results, insert_items = link) + amqp.add_item('new_link', link._fullname) + + def new_comment(comment, inbox_rel): author = Account._byID(comment.author_id) job = [get_comments(author, 'new', 'all')] if comment._deleted: + job.append(get_all_comments()) add_queries(job, delete_items = comment) else: #if comment._spam: # sr = Subreddit._byID(comment.sr_id) # job.append(get_spam_comments(sr)) add_queries(job, insert_items = comment) + amqp.add_item('new_comment', comment._fullname) + + # note that get_all_comments() is updated by the amqp process + # r2.lib.db.queries.run_new_comments if inbox_rel: inbox_owner = inbox_rel._thing1 - add_queries([get_inbox_comments(inbox_owner)], - insert_items = inbox_rel) + if inbox_rel._name == "inbox": + add_queries([get_inbox_comments(inbox_owner)], + insert_items = inbox_rel) + else: + add_queries([get_inbox_selfreply(inbox_owner)], + insert_items = inbox_rel) + + +def new_subreddit(sr): + "no precomputed queries here yet" + amqp.add_item('new_subreddit', sr._fullname) + def new_vote(vote): user = vote._thing1 @@ -432,6 +471,13 @@ def new_savehide(rel): elif name == 'unhide': add_queries([get_hidden(user)], delete_items = rel) +def changed(things): + """Indicate to solrsearch that a given item should be updated""" + things = tup(things) + for thing in things: + amqp.add_item('searchchanges_q', thing._fullname, + message_id = thing._fullname) + def _by_srid(things): """Takes a list of things and returns them in a dict separated by sr_id, in addition to the looked-up subreddits""" @@ -452,8 +498,8 @@ def ban(things): for sr_id, things in by_srid.iteritems(): sr = srs[sr_id] - links = [ x for x in things if isinstance(x, Link) ] - #comments = [ x for x in things if isinstance(x, Comment) ] + links = [x for x in things if isinstance(x, Link)] + comments = [x for x in things if isinstance(x, Comment)] if links: add_queries([get_spam_links(sr)], insert_items = links) @@ -462,11 +508,16 @@ def ban(things): get_links(sr, 'new', 'all'), get_links(sr, 'top', 'all'), get_links(sr, 'controversial', 'all')] - results.extend(all_queries(get_links, sr, ('top', 'controversial'), db_times.keys())) + results.extend(all_queries(get_links, sr, + ('top', 'controversial'), + db_times.keys())) add_queries(results, delete_items = links) - #if comments: - # add_queries([get_spam_comments(sr)], insert_items = comments) + if comments: + # add_queries([get_spam_comments(sr)], insert_items = comments) + add_queries([get_all_comments()], delete_items = comments) + + changed(things) def unban(things): by_srid, srs = _by_srid(things) @@ -475,8 +526,8 @@ def unban(things): for sr_id, things in by_srid.iteritems(): sr = srs[sr_id] - links = [ x for x in things if isinstance(x, Link) ] - #comments = [ x for x in things if isinstance(x, Comment) ] + links = [x for x in things if isinstance(x, Link)] + comments = [x for x in things if isinstance(x, Comment)] if links: add_queries([get_spam_links(sr)], delete_items = links) @@ -485,11 +536,16 @@ def unban(things): get_links(sr, 'new', 'all'), get_links(sr, 'top', 'all'), get_links(sr, 'controversial', 'all')] - results.extend(all_queries(get_links, sr, ('top', 'controversial'), db_times.keys())) + results.extend(all_queries(get_links, sr, + ('top', 'controversial'), + db_times.keys())) add_queries(results, insert_items = links) - #if comments: - # add_queries([get_spam_comments(sr)], delete_items = comments) + if comments: + #add_queries([get_spam_comments(sr)], delete_items = comments) + add_queries([get_all_comments()], insert_items = comments) + + changed(things) def new_report(thing): if isinstance(thing, Link): @@ -546,6 +602,7 @@ def update_user(user): results = [get_inbox_messages(user), get_inbox_comments(user), + get_inbox_selfreply(user), get_sent(user), get_liked(user), get_disliked(user), @@ -559,3 +616,138 @@ def add_all_users(): q = Account._query(sort = asc('_date')) for user in fetch_things2(q): update_user(user) + + +# amqp queue processing functions + +def run_new_comments(): + + def _run_new_comments(msgs, chan): + fnames = [msg.body for msg in msgs] + comments = Comment._by_fullname(fnames, return_dict=False) + add_queries([get_all_comments()], + insert_items = comments) + + amqp.handle_items('newcomments_q', _run_new_comments, limit=100) + + +#def run_new_links(): +# """queue to add new links to the 'new' page. note that this isn't +# in use until the spam_q plumbing is""" +# +# def _run_new_links(msgs, chan): +# fnames = [ msg.body for msg in msgs ] +# links = Link._by_fullname(fnames, data=True, return_dict=False) +# +# srs = Subreddit._byID([l.sr_id for l in links], return_dict=True) +# +# results = [] +# +# _sr = lambda l: l.sr_id +# for sr_id, sr_links in itertools.groupby(sorted(links, key=_sr), +# key=_sr): +# sr = srs[sr_id] +# results = [get_links(sr, 'new', 'all')] +# add_queries(results, insert_items = sr_links) +# +# amqp.handle_items('newpage_q', _run_new_links, limit=100) + + +def queue_vote(user, thing, dir, ip, organic = False): + if g.amqp_host: + key = "registered_vote_%s_%s" % (user._id, thing._fullname) + g.cache.set(key, '1' if dir is True else '0' if dir is None else '-1') + amqp.add_item('register_vote_q', + pickle.dumps((user._id, thing._fullname, dir, ip, organic))) + else: + handle_vote(user, thing, dir, ip, organic) + +def get_likes(user, items): + if not user or not items: + return {} + keys = {} + res = {} + for i in items: + keys['registered_vote_%s_%s' % (user._id, i._fullname)] = (user, i) + r = g.cache.get_multi(keys.keys()) + + # populate the result set based on what we fetched from the cache first + for k, v in r.iteritems(): + res[keys[k]] = v + + # now hit the vote db with the remainder + likes = Vote.likes(user, [i for i in items if (user, i) not in res]) + + for k, v in likes.iteritems(): + res[k] = v._name + + # lastly, translate into boolean: + for k in res.keys(): + res[k] = (True if res[k] == '1' + else False if res[k] == '-1' else None) + + return res + +def handle_vote(user, thing, dir, ip, organic): + from r2.lib.db import tdb_sql + from sqlalchemy.exc import IntegrityError + try: + v = Vote.vote(user, thing, dir, ip, organic) + except (tdb_sql.CreationError, IntegrityError): + g.log.error("duplicate vote for: %s" % str((user, thing, dir))) + return + + if isinstance(thing, Link): + new_vote(v) + if v.valid_thing: + expire_hot(thing.subreddit_slow) + + #update the modified flags + set_last_modified(user, 'liked') + if user._id == thing.author_id: + set_last_modified(user, 'overview') + set_last_modified(user, 'submitted') + #update sup listings + sup.add_update(user, 'submitted') + + #update sup listings + if dir: + sup.add_update(user, 'liked') + elif dir is False: + sup.add_update(user, 'disliked') + + elif isinstance(thing, Comment): + #update last modified + if user._id == thing.author_id: + set_last_modified(user, 'overview') + set_last_modified(user, 'commented') + #update sup listings + sup.add_update(user, 'commented') + + +def process_votes(drain = False, limit = 100): + + def _handle_votes(msgs, chan): + to_do = [] + uids = set() + tids = set() + for x in msgs: + uid, tid, dir, ip, organic = pickle.loads(x.body) + print (uid, tid, dir, ip, organic) + uids.add(uid) + tids.add(tid) + to_do.append((uid, tid, dir, ip, organic)) + + users = Account._byID(uids, data = True, return_dict = True) + things = Thing._by_fullname(tids, data = True, return_dict = True) + + for uid, tid, dir, ip, organic in to_do: + handle_vote(users[uid], things[tid], dir, ip, organic) + + amqp.handle_items('register_vote_q', _handle_votes, limit = limit, + drain = drain) + +try: + from r2admin.lib.admin_queries import * +except ImportError: + pass diff --git a/r2/r2/lib/db/query_queue.py b/r2/r2/lib/db/query_queue.py index f1c42e38d5..41af293adf 100644 --- a/r2/r2/lib/db/query_queue.py +++ b/r2/r2/lib/db/query_queue.py @@ -7,13 +7,13 @@ working_prefix = 'working_' prefix = 'prec_link_' -TIMEOUT = 120 +TIMEOUT = 600 def add_query(cached_results): amqp.add_item('prec_links', pickle.dumps(cached_results, -1)) def run(): - def callback(msgs): + def callback(msgs, chan): for msg in msgs: # will be len==1 # r2.lib.db.queries.CachedResults cr = pickle.loads(msg.body) @@ -36,16 +36,18 @@ def callback(msgs): cr = pickle.loads(msg.body) - print 'working: ', iden, cr.query._rules + print 'working: ', iden, cr.query._rules, cr.query._sort start = datetime.now() - cr.update() + try: + cr.update() + g.memcache.set(key, datetime.now()) + finally: + g.memcache.delete(working_key) + done = datetime.now() q_time_s = (done - msg.timestamp).seconds proc_time_s = (done - start).seconds + ((done - start).microseconds/1000000.0) print ('processed %s in %.6f seconds after %d seconds in queue' % (iden, proc_time_s, q_time_s)) - g.memcache.set(key, datetime.now()) - g.memcache.delete(working_key) - amqp.handle_items('prec_links', callback, limit = 1) diff --git a/r2/r2/lib/db/tdb_lite.py b/r2/r2/lib/db/tdb_lite.py new file mode 100644 index 0000000000..3970d11582 --- /dev/null +++ b/r2/r2/lib/db/tdb_lite.py @@ -0,0 +1,84 @@ +# The contents of this file are subject to the Common Public Attribution +# License Version 1.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://code.reddit.com/LICENSE. The License is based on the Mozilla Public +# License Version 1.1, but Sections 14 and 15 have been added to cover use of +# software over a computer network and provide for limited attribution for the +# Original Developer. In addition, Exhibit A has been modified to be consistent +# with Exhibit B. +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +# the specific language governing rights and limitations under the License. +# +# The Original Code is Reddit. +# +# The Original Developer is the Initial Developer. The Initial Developer of the +# Original Code is CondeNet, Inc. +# +# All portions of the code written by CondeNet are Copyright (c) 2006-2009 +# CondeNet, Inc. All Rights Reserved. +################################################################################ + +import sqlalchemy as sa + +class tdb_lite(object): + def __init__(self, gc): + self.gc = gc + + def make_metadata(self, engine): + metadata = sa.MetaData(engine) + metadata.bind.echo = self.gc.sqlprinting + return metadata + + def index_str(self, table, name, on, where = None): + index_str = 'create index idx_%s_' % name + index_str += table.name + index_str += ' on '+ table.name + ' (%s)' % on + if where: + index_str += ' where %s' % where + return index_str + + def create_table(self, table, index_commands=None): + t = table + if self.gc.db_create_tables: + #@@hackish? + if not t.bind.has_table(t.name): + t.create(checkfirst = False) + if index_commands: + for i in index_commands: + t.bind.execute(i) + + def py2db(self, val, return_kind=False): + if isinstance(val, bool): + val = 't' if val else 'f' + kind = 'bool' + elif isinstance(val, (str, unicode)): + kind = 'str' + elif isinstance(val, (int, float, long)): + kind = 'num' + elif val is None: + kind = 'none' + else: + kind = 'pickle' + val = pickle.dumps(val) + + if return_kind: + return (val, kind) + else: + return val + + def db2py(self, val, kind): + if kind == 'bool': + val = True if val is 't' else False + elif kind == 'num': + try: + val = int(val) + except ValueError: + val = float(val) + elif kind == 'none': + val = None + elif kind == 'pickle': + val = pickle.loads(val) + + return val diff --git a/r2/r2/lib/db/tdb_sql.py b/r2/r2/lib/db/tdb_sql.py index 2b789664fa..85463b1327 100644 --- a/r2/r2/lib/db/tdb_sql.py +++ b/r2/r2/lib/db/tdb_sql.py @@ -42,6 +42,8 @@ BigInteger = postgres.PGBigInteger +MAX_THING_ID = 9223372036854775807 # http://www.postgresql.org/docs/8.3/static/datatype-numeric.html + def make_metadata(engine): metadata = sa.MetaData(engine) metadata.bind.echo = g.sqlprinting @@ -81,7 +83,7 @@ def index_commands(table, type): commands.append(index_str(table, 'thing_id', 'thing_id')) commands.append(index_str(table, 'key_value', 'key, substring(value, 1, %s)' \ % max_val_len)) - + #lower name commands.append(index_str(table, 'lower_key_value', 'key, lower(value)', where = "key = 'name'")) @@ -98,6 +100,9 @@ def index_commands(table, type): commands.append(index_str(table, 'thing2_id', 'thing2_id')) commands.append(index_str(table, 'name', 'name')) commands.append(index_str(table, 'date', 'date')) + else: + print "unknown index_commands() type %s" % type + return commands def get_type_table(metadata): @@ -114,7 +119,6 @@ def get_rel_type_table(metadata): sa.Column('name', sa.String, nullable = False)) return table - def get_thing_table(metadata, name): table = sa.Table(g.db_app_name + '_thing_' + name, metadata, sa.Column('thing_id', BigInteger, primary_key = True), @@ -214,6 +218,7 @@ def build_thing_tables(): thing = storage(type_id = type_id, name = name, + avoid_master_reads = dbm.avoid_master_reads.get(name), tables = tables) types_id[type_id] = thing @@ -259,6 +264,7 @@ def build_rel_tables(): rel = storage(type_id = type_id, type1_id = type1_id, type2_id = type2_id, + avoid_master_reads = dbm.avoid_master_reads.get(name), name = name, tables = tables) @@ -279,7 +285,7 @@ def get_write_table(tables): return tables[0] def get_read_table(tables): - #shortcut with 1 entry + # short-cut for only one element if len(tables) == 1: return tables[0] @@ -340,7 +346,7 @@ def get_read_table(tables): print 'yer stupid' return random.choice(tables) -def get_table(kind, action, tables): +def get_table(kind, action, tables, avoid_master_reads = False): if action == 'write': #if this is a write, store the kind in the c.use_write_db dict #so that all future requests use the write db @@ -354,15 +360,21 @@ def get_table(kind, action, tables): if c.use_write_db and c.use_write_db.has_key(kind): return get_write_table(tables) else: + if avoid_master_reads and len(tables) > 1: + return get_read_table(tables[1:]) return get_read_table(tables) + def get_thing_table(type_id, action = 'read' ): return get_table('t' + str(type_id), action, - types_id[type_id].tables) + types_id[type_id].tables, + avoid_master_reads = types_id[type_id].avoid_master_reads) def get_rel_table(rel_type_id, action = 'read'): return get_table('r' + str(rel_type_id), action, - rel_types_id[rel_type_id].tables) + rel_types_id[rel_type_id].tables, + avoid_master_reads = rel_types_id[rel_type_id].avoid_master_reads) + #TODO does the type actually exist? def make_thing(type_id, ups, downs, date, deleted, spam, id=None): diff --git a/r2/r2/lib/db/thing.py b/r2/r2/lib/db/thing.py index bdb455e880..184e4c289c 100644 --- a/r2/r2/lib/db/thing.py +++ b/r2/r2/lib/db/thing.py @@ -269,6 +269,10 @@ def _byID(cls, ids, data=False, return_dict=True, extra_props=None): ids, single = tup(ids, True) prefix = thing_prefix(cls.__name__) + if not all(x <= tdb.MAX_THING_ID for x in ids): + g.log.debug("Attempted to look up too-big thing_id?") + raise NotFound('thing_id greater than MAX_THING_ID') + def items_db(ids): items = cls._get_item(cls._type_id, ids) for i in items.keys(): diff --git a/r2/r2/lib/emailer.py b/r2/r2/lib/emailer.py index 43199bbcb3..dcb1016bd2 100644 --- a/r2/r2/lib/emailer.py +++ b/r2/r2/lib/emailer.py @@ -23,7 +23,7 @@ from pylons.i18n import _ from pylons import c, g from r2.lib.utils import timeago, query_string -from r2.models import passhash, Email, Default, has_opted_out, Account +from r2.models import passhash, Email, Default, has_opted_out, Account, Award import os, random, datetime import traceback, sys, smtplib @@ -52,6 +52,7 @@ def verify_email(user, dest): key = passhash(user.name, user.email) user.email_verified = False user._commit() + Award.take_away("verified_email", user) emaillink = ('http://' + g.domain + '/verification/' + key + query_string(dict(dest=dest))) print "Generated email verification link: " + emaillink @@ -136,7 +137,7 @@ def sendmail(email): clear = True should_queue = email.should_queue() - # check only on sharing that the mail is invalid + # check only on sharing that the mail is invalid if email.kind == Email.Kind.SHARE and should_queue: email.body = Share(username = email.from_name(), msg_hash = email.msg_hash, @@ -160,7 +161,7 @@ def sendmail(email): body = email.body).render(style="email") # handle unknown types here - elif email.kind not in Email.Kind: + elif not email.body: email.set_sent(rejected = True) continue sendmail(email) diff --git a/r2/r2/lib/filters.py b/r2/r2/lib/filters.py index 77b6672b32..f86ee642e7 100644 --- a/r2/r2/lib/filters.py +++ b/r2/r2/lib/filters.py @@ -131,6 +131,8 @@ def edit_comment_filter(text = ''): #@memoize('markdown') def safemarkdown(text, nofollow=False, target=None): from contrib.markdown import markdown + if c.user.pref_no_profanity: + text = profanity_filter(text) if text: # increase escaping of &, < and > once text = text.replace("&", "&").replace("<", "<").replace(">", ">") @@ -180,3 +182,18 @@ def keep_space(text): def unkeep_space(text): return text.replace(' ', ' ').replace(' ', '\n').replace(' ', '\t') + + +def profanity_filter(text): + from pylons import g + + def _profane(m): + x = m.group(1) + return ''.join(u"\u2731" for i in xrange(len(x))) + + if g.profanities: + try: + return g.profanities.sub(_profane, text) + except UnicodeDecodeError: + return text + return text diff --git a/r2/r2/lib/hardcachebackend.py b/r2/r2/lib/hardcachebackend.py new file mode 100644 index 0000000000..1c074d607f --- /dev/null +++ b/r2/r2/lib/hardcachebackend.py @@ -0,0 +1,132 @@ +# The contents of this file are subject to the Common Public Attribution +# License Version 1.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://code.reddit.com/LICENSE. The License is based on the Mozilla Public +# License Version 1.1, but Sections 14 and 15 have been added to cover use of +# software over a computer network and provide for limited attribution for the +# Original Developer. In addition, Exhibit A has been modified to be consistent +# with Exhibit B. +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +# the specific language governing rights and limitations under the License. +# +# The Original Code is Reddit. +# +# The Original Developer is the Initial Developer. The Initial Developer of the +# Original Code is CondeNet, Inc. +# +# All portions of the code written by CondeNet are Copyright (c) 2006-2009 +# CondeNet, Inc. All Rights Reserved. +################################################################################ + +from pylons import g +from datetime import timedelta as timedelta +from datetime import datetime +import sqlalchemy as sa +from r2.lib.db.tdb_lite import tdb_lite + +class HardCacheBackend(object): + def __init__(self, gc): + self.tdb = tdb_lite(gc) + metadata = self.tdb.make_metadata(gc.dbm.hardcache_db) + + self.table = sa.Table(gc.db_app_name + '_hardcache', metadata, + sa.Column('category', sa.String, nullable = False, + primary_key = True), + sa.Column('ids', sa.String, nullable = False, + primary_key = True), + sa.Column('value', sa.String, nullable = False), + sa.Column('kind', sa.String, nullable = False), + sa.Column('expiration', + sa.DateTime(timezone = True), + nullable = False) + ) + + indstr = self.tdb.index_str(self.table, 'expiration', 'expiration') + self.tdb.create_table(self.table, [ indstr ]) + + def set(self, category, ids, val, time): + + self.delete(category, ids) # delete it if it already exists + + expiration = datetime.now(g.tz) + timedelta(0, time) + + value, kind = self.tdb.py2db(val, True) + + self.table.insert().execute( + category=category, + ids=ids, + value=value, + kind=kind, + expiration=expiration + ) + + def get(self, category, ids): + s = sa.select([self.table.c.value, + self.table.c.kind, + self.table.c.expiration], + sa.and_(self.table.c.category==category, + self.table.c.ids==ids), + limit = 1) + rows = s.execute().fetchall() + if len(rows) < 1: + return None + elif rows[0].expiration < datetime.now(g.tz): + return None + else: + return self.tdb.db2py(rows[0].value, rows[0].kind) + + def delete(self, category, ids): + self.table.delete( + sa.and_(self.table.c.category==category, + self.table.c.ids==ids)).execute() + + def ids_by_category(self, category, limit=1000): + s = sa.select([self.table.c.ids], + self.table.c.category==category, + limit = limit) + rows = s.execute().fetchall() + return [ r.ids for r in rows ] + + def clause_from_expiration(self, expiration): + if expiration is None: + return True + elif expiration == "now": + return self.table.c.expiration < datetime.now(g.tz) + else: + return self.table.c.expiration < expiration + + def expired(self, expiration_clause, limit=1000): + s = sa.select([self.table.c.category, + self.table.c.ids, + self.table.c.expiration], + expiration_clause, + limit = limit, + order_by = self.table.c.expiration + ) + rows = s.execute().fetchall() + return [ (r.expiration, r.category, r.ids) for r in rows ] + +def delete_expired(expiration="now", limit=5000): + hcb = HardCacheBackend(g) + + expiration_clause = hcb.clause_from_expiration(expiration) + + # Get all the expired keys + rows = hcb.expired(expiration_clause, limit) + + if len(rows) == 0: + return + + # Delete them from memcache + mc_keys = [ "%s-%s" % (c, i) for e, c, i in rows ] + g.memcache.delete_multi(mc_keys) + + # Now delete them from the backend. + hcb.table.delete(expiration_clause).execute() + + # Note: In between the previous two steps, a key with a + # near-instantaneous expiration could have been added and expired, and + # thus it'll be deleted from the backend but not memcache. But that's + # okay, because it should be expired from memcache anyway by now. diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py index dc9ab563bc..86674c87b6 100644 --- a/r2/r2/lib/jsontemplates.py +++ b/r2/r2/lib/jsontemplates.py @@ -202,6 +202,7 @@ class LinkJsonTemplate(ThingJsonTemplate): saved = "saved", clicked = "clicked", hidden = "hidden", + over_18 = "over_18", likes = "likes", domain = "domain", title = "title", @@ -270,9 +271,9 @@ def thing_attr(self, thing, attr): return make_fullname(Subreddit, thing.sr_id) return None elif attr == "parent_id": - try: + if getattr(thing, "parent_id", None): return make_fullname(Comment, thing.parent_id) - except AttributeError: + else: return make_fullname(Link, thing.link_id) elif attr == "body_html": return spaceCompress(safemarkdown(thing.body)) @@ -336,11 +337,8 @@ def thing_attr(self, thing, attr): def rendered_data(self, wrapped): from r2.models import Message - try: - parent_id = wrapped.parent_id - except AttributeError: - parent_id = None - else: + parent_id = wrapped.parent_id + if parent_id: parent_id = make_fullname(Message, parent_id) d = ThingJsonTemplate.rendered_data(self, wrapped) d['parent'] = parent_id diff --git a/r2/r2/lib/manager/db_manager.py b/r2/r2/lib/manager/db_manager.py index 737066b1ca..933350bd0b 100644 --- a/r2/r2/lib/manager/db_manager.py +++ b/r2/r2/lib/manager/db_manager.py @@ -21,7 +21,8 @@ ################################################################################ import sqlalchemy as sa -def get_engine(name, db_host='', db_user='', db_pass='', pool_size = 5, max_overflow = 5): +def get_engine(name, db_host='', db_user='', db_pass='', + pool_size = 5, max_overflow = 5): host = db_host if db_host else '' if db_user: if db_pass: @@ -40,11 +41,15 @@ def __init__(self): self.things = {} self.relations = {} self.engines = {} + self.avoid_master_reads = {} - def add_thing(self, name, thing_dbs): + def add_thing(self, name, thing_dbs, avoid_master = False, **kw): """thing_dbs is a list of database engines. the first in the list is assumed to be the master, the rest are slaves.""" self.things[name] = thing_dbs + self.avoid_master_reads[name] = avoid_master - def add_relation(self, name, type1, type2, relation_dbs): + def add_relation(self, name, type1, type2, relation_dbs, + avoid_master = False, **kw): self.relations[name] = (type1, type2, relation_dbs) + self.avoid_master_reads[name] = avoid_master diff --git a/r2/r2/lib/media.py b/r2/r2/lib/media.py index 1d31f83061..9cb5893669 100644 --- a/r2/r2/lib/media.py +++ b/r2/r2/lib/media.py @@ -29,6 +29,7 @@ from r2.lib.db.operators import desc from r2.lib.scraper import make_scraper, str_to_image, image_to_str, prepare_image from r2.lib import amqp +from r2.lib.contrib.nymph import optimize_png import tempfile import traceback @@ -41,7 +42,6 @@ def thumbnail_url(link): """Given a link, returns the url for its thumbnail based on its fullname""" return 'http:/%s%s.png' % (s3_thumbnail_bucket, link._fullname) - def upload_thumb(link, image): """Given a link and an image, uploads the image to s3 into an image based on the link's fullname""" @@ -50,7 +50,8 @@ def upload_thumb(link, image): resource = s3_thumbnail_bucket + link._fullname + '.png' log.debug('uploading to s3: %s' % link._fullname) - s3cp.send_file(f.name, resource, 'image/png', 'public-read', None, False) + s3cp.send_file(optimize_png(f.name, g.png_optimizer), + resource, 'image/png', 'public-read', None, False) log.debug('thumbnail %s: %s' % (link._fullname, thumbnail_url(link))) @@ -91,12 +92,11 @@ def force_thumbnail(link, image_data): update_link(link, thumbnail = True, media_object = None) def run(): - def process_msgs(msgs): + def process_msgs(msgs, chan): def _process_link(fname): - print "media: Processing %s" % fname - link = Link._by_fullname(fname, data=True, return_dict=False) set_media(link) + for msg in msgs: fname = msg.body try: diff --git a/r2/r2/lib/menus.py b/r2/r2/lib/menus.py index 9d2de00525..c01dfc15fb 100644 --- a/r2/r2/lib/menus.py +++ b/r2/r2/lib/menus.py @@ -97,7 +97,7 @@ def __getattr__(self, attr): code = _("source code"), mobile = _("mobile"), store = _("store"), - ad_inq = _("advertise on reddit"), + ad_inq = _("inquire about advertising"), toplinks = _("top links"), random = _('random'), iphone = _("iPhone app"), @@ -151,7 +151,7 @@ def __getattr__(self, attr): deleted = _("deleted"), reported = _("reported"), - promote = _('self-serve'), + promote = _('self-serve advertising'), new_promo = _('create promotion'), my_current_promos = _('my promoted links'), current_promos = _('all promoted links'), @@ -159,7 +159,8 @@ def __getattr__(self, attr): graph = _('analytics'), live_promos = _('live'), unpaid_promos = _('unpaid'), - pending_promos = _('pending') + pending_promos = _('pending'), + rejected_promos = _('rejected') ) def menu_style(type): diff --git a/r2/r2/lib/organic.py b/r2/r2/lib/organic.py index da011bbf0b..3e7139f17d 100644 --- a/r2/r2/lib/organic.py +++ b/r2/r2/lib/organic.py @@ -60,7 +60,7 @@ def keep(item): return True else: return item.keep_item(item) - + builder = IDBuilder(promoted_items, keep_fn = keep, skip = True, num = max_promoted) promoted_items = builder.get_items()[0] diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 3ce70866a7..d1c82f5fed 100644 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -147,13 +147,14 @@ def sr_admin_menu(self): return [NavMenu(buttons, type = "flat_vert", base_path = "/about/", css_class = "icon-menu", separator = '')] - def sr_moderators(self): - accounts = [Account._byID(uid, True) for uid in c.site.moderators] + def sr_moderators(self, limit = 10): + accounts = [Account._byID(uid, True) + for uid in c.site.moderators[:limit]] return [WrappedUser(a) for a in accounts if not a._deleted] def rightbox(self): """generates content in
""" - + ps = PaneStack(css_class='spacer') if self.searchbox: @@ -169,7 +170,14 @@ def rightbox(self): moderators = self.sr_moderators() if moderators: - ps.append(SideContentBox(_('moderators'), moderators)) + total = len(c.site.moderators) + more_text = mod_href = "" + if total > len(moderators): + more_text = "...and %d more" % (total - len(moderators)) + mod_href = "http://%s/about/moderators" % get_domain() + ps.append(SideContentBox(_('moderators'), moderators, + more_href = mod_href, + more_text = more_text)) if (c.user_is_loggedin and (c.site.is_moderator(c.user) or c.user_is_admin)): @@ -326,6 +334,8 @@ def __init__(self): title = _('reddit tools'), type = 'flat_vert', separator = ''), NavMenu([NamedButton("blog", False, nocname=True), + NamedButton("promote", False, nocname=True, + dest = '/promoted', css_class = "red"), NamedButton("ad_inq", False, nocname=True), OffsiteButton('reddit.tv', "http://www.reddit.tv"), OffsiteButton('redditall', "http://www.redditall.com"), @@ -435,9 +445,12 @@ class SponsorshipBox(Templated): pass class SideContentBox(Templated): - def __init__(self, title, content, helplink=None, extra_class=None): - Templated.__init__(self, title=title, helplink=helplink, - content=content, extra_class=extra_class) + def __init__(self, title, content, helplink=None, extra_class=None, + more_href = None, more_text = "more"): + Templated.__init__(self, title=title, helplink = helplink, + content=content, extra_class=extra_class, + more_href = more_href, + more_text = more_text) class SideBox(CachedTemplate): """ @@ -512,7 +525,9 @@ def content(self): def build_toolbars(self): buttons = [NamedButton('compose'), - NamedButton('inbox'), + NamedButton('inbox', aliases = ["/message/comments", + "/message/messages", + "/message/selfreply"]), NamedButton('sent')] return [PageNameNav('nomenu', title = _("message")), NavMenu(buttons, base_path = "/message", type="tabmenu")] @@ -580,10 +595,12 @@ class SearchPage(BoringPage): """Search results page""" searchbox = False - def __init__(self, pagename, prev_search, elapsed_time, num_results, *a, **kw): + def __init__(self, pagename, prev_search, elapsed_time, + num_results, search_params = {}, *a, **kw): self.searchbar = SearchBar(prev_search = prev_search, elapsed_time = elapsed_time, - num_results = num_results) + num_results = num_results, + search_params = search_params) BoringPage.__init__(self, pagename, robots='noindex', *a, **kw) def content(self): @@ -753,13 +770,15 @@ class SubredditsPage(Reddit): searchbox = False submit_box = False def __init__(self, prev_search = '', num_results = 0, elapsed_time = 0, - title = '', loginbox = True, infotext = None, *a, **kw): + title = '', loginbox = True, infotext = None, + search_params = {}, *a, **kw): Reddit.__init__(self, title = title, loginbox = loginbox, infotext = infotext, *a, **kw) self.searchbar = SearchBar(prev_search = prev_search, elapsed_time = elapsed_time, num_results = num_results, - header = _('search reddits') + header = _('search reddits'), + search_params = {} ) self.sr_infobar = InfoBar(message = strings.sr_subscribe) @@ -858,7 +877,22 @@ def rightbox(self): class TrophyCase(Templated): def __init__(self, user): self.user = user - self.trophies = Trophy.by_account(user) + self.trophies = [] + self.invisible_trophies = [] + + self.dupe_trophies = [] + + award_ids_seen = [] + + for trophy in Trophy.by_account(user): + if trophy._thing2.awardtype == 'invisible': + self.invisible_trophies.append(trophy) + elif trophy._thing2_id in award_ids_seen: + self.dupe_trophies.append(trophy) + else: + self.trophies.append(trophy) + award_ids_seen.append(trophy._thing2_id) + self.cup_date = user.should_show_cup() Templated.__init__(self) @@ -1088,15 +1122,17 @@ def insert(self, *a): class SearchForm(Templated): """The simple search form in the header of the page. prev_search is the previous search.""" - def __init__(self, prev_search = ''): - Templated.__init__(self, prev_search = prev_search) + def __init__(self, prev_search = '', search_params = {}): + Templated.__init__(self, prev_search = prev_search, + search_params = search_params) class SearchBar(Templated): """More detailed search box for /search and /reddits pages. Displays the previous search as well as info of the elapsed_time and num_results if any.""" - def __init__(self, num_results = 0, prev_search = '', elapsed_time = 0, **kw): + def __init__(self, num_results = 0, prev_search = '', elapsed_time = 0, + search_params = {}, **kw): # not listed explicitly in args to ensure it translates properly self.header = kw.get('header', _("previous search")) @@ -1110,7 +1146,7 @@ def __init__(self, num_results = 0, prev_search = '', elapsed_time = 0, **kw): else: self.num_results = num_results - Templated.__init__(self) + Templated.__init__(self, search_params = search_params) class Frame(Templated): @@ -1343,14 +1379,25 @@ def __init__(self): if not g.show_awards: abort(404, "not found"); - self.winners = [] + self.regular_winners = [] + self.manuals = [] + self.invisibles = [] + for award in Award._all_awards(): - trophies = Trophy.by_award(award) - # Don't show awards that nobody's ever won - # (e.g., "9-Year Club") - if trophies: - winner = trophies[0]._thing1.name - self.winners.append( (award, winner, trophies[0]) ) + if award.awardtype == 'regular': + trophies = Trophy.by_award(award) + # Don't show awards that nobody's ever won + # (e.g., "9-Year Club") + if trophies: + winner = trophies[0]._thing1.name + self.regular_winners.append( (award, winner, trophies[0]) ) + elif award.awardtype == 'manual': + self.manuals.append(award) + elif award.awardtype == 'invisible': + self.invisibles.append(award) + else: + raise NotImplementedError + class AdminAwards(Templated): @@ -1364,7 +1411,10 @@ class AdminAwardGive(Templated): """The interface for giving an award""" def __init__(self, award): now = datetime.datetime.now(g.display_tz) - self.description = "??? -- " + now.strftime("%Y-%m-%d") + if award.awardtype == 'regular': + self.description = "??? -- " + now.strftime("%Y-%m-%d") + else: + self.description = "" self.url = "" Templated.__init__(self, award = award) @@ -1613,11 +1663,10 @@ def __init__(self, title, nav_menus = None, *a, **kw): buttons += [NamedButton('future_promos'), NamedButton('unpaid_promos'), + NamedButton('rejected_promos'), NamedButton('pending_promos'), - NamedButton('live_promos')] - - if c.user_is_sponsor or c.user_is_paid_sponsor: - buttons.append(NamedButton('graph')) + NamedButton('live_promos'), + NamedButton('graph')] menu = NavMenu(buttons, base_path = '/promoted', type='flatlist') diff --git a/r2/r2/lib/pages/things.py b/r2/r2/lib/pages/things.py index 42013bdfe1..5497de8cab 100644 --- a/r2/r2/lib/pages/things.py +++ b/r2/r2/lib/pages/things.py @@ -127,6 +127,8 @@ def __init__(self, thing, delete = False, report = True): profilepage = c.profilepage, permalink = permalink, was_comment = was_comment, + unread = thing.new, + recipient = thing.recipient, can_reply = c.user_is_loggedin, parent_id = getattr(thing, "parent_id", None), show_report = True, diff --git a/r2/r2/lib/promote.py b/r2/r2/lib/promote.py index aea5a463bc..678b82997c 100644 --- a/r2/r2/lib/promote.py +++ b/r2/r2/lib/promote.py @@ -192,7 +192,8 @@ def auth_paid_promo(thing, user, pay_id, bid): if trans_id is not None: # we won't reset to unseen if already approved and the payment went ok - promotion_log(thing, "updated payment and/or bid: SUCCESS") + promotion_log(thing, "updated payment and/or bid: SUCCESS (id: %s)" + % trans_id) if trans_id < 0: promotion_log(thing, "FREEBIE") thing.promote_status = max(thing.promote_status, STATUS.unseen) @@ -202,10 +203,10 @@ def auth_paid_promo(thing, user, pay_id, bid): promotion_log(thing, "updated payment and/or bid: FAILED") thing.promore_status = STATUS.unpaid thing.promote_trans_id = 0 - PromoteDates.update_bid(thing) - # commit last to guarantee consistency thing._commit() + emailer.promo_bid(thing) + PromoteDates.update_bid(thing) return bool(trans_id) diff --git a/r2/r2/lib/queues.py b/r2/r2/lib/queues.py new file mode 100644 index 0000000000..68fe6f50f5 --- /dev/null +++ b/r2/r2/lib/queues.py @@ -0,0 +1,97 @@ +# The contents of this file are subject to the Common Public Attribution +# License Version 1.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://code.reddit.com/LICENSE. The License is based on the Mozilla Public +# License Version 1.1, but Sections 14 and 15 have been added to cover use of +# software over a computer network and provide for limited attribution for the +# Original Developer. In addition, Exhibit A has been modified to be consistent +# with Exhibit B. +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +# the specific language governing rights and limitations under the License. +# +# The Original Code is Reddit. +# +# The Original Developer is the Initial Developer. The Initial Developer of the +# Original Code is CondeNet, Inc. +# +# All portions of the code written by CondeNet are Copyright (c) 2006-2009 +# CondeNet, Inc. All Rights Reserved. +################################################################################ +class QueueMap(object): + """Represents a set of queues and bindings in a single exchange""" + def __init__(self, exchange, chan, exchange_type='direct', + durable=True, auto_delete=False): + self.exchange = exchange + self.chan = chan + + self._exchange(exchange,exchange_type=exchange_type, + durable=durable, auto_delete=auto_delete) + + def _exchange(self, name, exchange_type, durable, auto_delete): + self.chan.exchange_declare(exchange=name, + type=exchange_type, + durable=durable, + auto_delete=auto_delete) + + def _q(self, name, durable=True, exclusive=False, + auto_delete=False, self_refer=False): + self.chan.queue_declare(queue=name, + durable=durable, + exclusive=exclusive, + auto_delete=auto_delete) + if self_refer: + # make a routing key with the same name as the queue to + # allow things to be placed directly in it + self._bind(name, name) + + def _bind(self, rk, q): + self.chan.queue_bind(routing_key=rk, + queue=q, + exchange=self.exchange) + + def init(self): + self.queues() + self.bindings() + + def queues(self): + raise NotImplementedError + + def bindings(self): + raise NotImplementedError + + +class RedditQueueMap(QueueMap): + def queues(self): + self._q('prec_links', self_refer=True) + self._q('scraper_q') + self._q('searchchanges_q', self_refer=True) + self._q('newcomments_q') + # this isn't in use until the spam_q plumbing is + #self._q('newpage_q') + self._q('register_vote_q', self_refer=True) + + def bindings(self): + self.newlink_bindings() + self.newcomment_bindings() + self.newsubreddit_bindings() + + def newlink_bindings(self): + self._bind('new_link', 'scraper_q') + # note that we don't add searchchanges_q here, because the + # initial vote on that item will add it + + # this isn't in use until the spam_q plumbing is + #self._bind('new_link', 'newpage_q') + + def newcomment_bindings(self): + self._bind('new_comment', 'newcomments_q') + + def newsubreddit_bindings(self): + self._bind('new_subreddit', 'searchchanges_q') + +try: + from r2admin.lib.adminqueues import * +except ImportError: + pass diff --git a/r2/r2/lib/scraper.py b/r2/r2/lib/scraper.py index 87fdc71279..aa07ffa15b 100644 --- a/r2/r2/lib/scraper.py +++ b/r2/r2/lib/scraper.py @@ -335,9 +335,47 @@ class YoutubeScraper(MediaScraper): domains = ['youtube.com'] height = 295 width = 480 - media_template = '' + media_template = '' thumbnail_template = 'http://img.youtube.com/vi/$video_id/default.jpg' video_id_rx = re.compile('.*v=([A-Za-z0-9-_]+).*') + video_deeplink_rx = re.compile('.*#t=(\d+)m(\d+)s.*') + + def video_id_extract(self): + vid = self.video_id_rx.match(self.url) + if(vid): + video_id = vid.groups()[0] + d = self.video_deeplink_rx.match(self.url) + if(d): + seconds = int(d.groups()[0])*60 + int(d.groups()[1]) + video_id += "&start=%d" % seconds + return video_id + + def largest_image_url(self): + # Remove the deeplink part from the video id + return self.thumbnail_template.replace("$video_id", + self.video_id.split("&")[0]) + +class TedScraper(MediaScraper): + domains = ['ted.com'] + height = 326 + width = 446 + media_template = ' ' + flashvars_rx = re.compile('.*flashvars="(.*)".*') + + def video_id_extract(self): + if "/talks/" in self.url: + content_type, content = fetch_url(self.url.replace("/talks/","/talks/embed/")) + if content: + m = self.flashvars_rx.match(content) + if m: + return m.groups()[0] + def largest_image_url(self): + if not self.soup: + self.download() + + if self.soup: + return self.soup.find('link', rel = 'image_src')['href'] + class MetacafeScraper(MediaScraper): domains = ['metacafe.com'] @@ -641,6 +679,7 @@ def find_media_object(self, scraper): ComedyCentralScraper, ColbertNationScraper, TheDailyShowScraper, + TedScraper, LiveLeakScraper, DailyMotionScraper, RevverScraper, diff --git a/r2/r2/lib/solrsearch.py b/r2/r2/lib/solrsearch.py index 84d2bbe54f..173bb57d14 100644 --- a/r2/r2/lib/solrsearch.py +++ b/r2/r2/lib/solrsearch.py @@ -710,8 +710,7 @@ def run_changed(drain=False): last run. Note: unlike many queue-using functions, this one is run from cron and totally drains the queue before terminating """ - - def _run_changed(msgs): + def _run_changed(msgs, chan): print "changed: Processing %d items" % len(msgs) fullnames = set([x.body for x in msgs]) diff --git a/r2/r2/lib/utils/utils.py b/r2/r2/lib/utils/utils.py index 6254676336..176bdca502 100644 --- a/r2/r2/lib/utils/utils.py +++ b/r2/r2/lib/utils/utils.py @@ -19,20 +19,18 @@ # All portions of the code written by CondeNet are Copyright (c) 2006-2009 # CondeNet, Inc. All Rights Reserved. ################################################################################ -from urllib import unquote_plus, quote_plus, urlopen, urlencode +from urllib import unquote_plus, urlopen from urlparse import urlparse, urlunparse -from threading import local, Thread -import Queue +from threading import local import signal from copy import deepcopy import cPickle as pickle -import re, datetime, math, random, string, sha, os -from operator import attrgetter +import re, math, random from datetime import datetime, timedelta from pylons.i18n import ungettext, _ from r2.lib.filters import _force_unicode -from mako.filters import url_escape, url_unescape +from mako.filters import url_escape iters = (list, tuple, set) @@ -766,7 +764,10 @@ def unicode_safe(res): try: return str(res) except UnicodeEncodeError: - return unicode(res).encode('utf-8') + try: + return unicode(res).encode('utf-8') + except UnicodeEncodeError: + return res.decode('utf-8').encode('utf-8') def decompose_fullname(fullname): """ @@ -786,33 +787,6 @@ def decompose_fullname(fullname): return (type_class, type_id, id) - - -class Worker: - def __init__(self): - self.q = Queue.Queue() - self.t = Thread(target=self._handle) - self.t.setDaemon(True) - self.t.start() - - def _handle(self): - while True: - fn = self.q.get() - try: - fn() - self.q.task_done() - except: - import traceback - print traceback.format_exc() - - def do(self, fn): - self.q.put(fn) - - def join(self): - self.q.join() - -worker = Worker() - def cols(lst, ncols): """divides a list into columns, and returns the rows. e.g. cols('abcdef', 2) returns (('a', 'd'), ('b', 'e'), ('c', @@ -899,7 +873,38 @@ def set_emptying_cache(): from r2.lib.cache import SelfEmptyingCache g.cache.caches = [SelfEmptyingCache(),] + list(g.cache.caches[1:]) -def find_recent_broken_things(from_time = None, to_time = None, delete = False): + +def fix_if_broken(thing, delete = True): + from r2.models import Link, Comment + + # the minimum set of attributes that are required + attrs = {Link: ('author_id', 'sr_id'), + Comment: ('author_id', 'sr_id', 'body', 'link_id')} + + if thing.__class__ not in attrs: + raise TypeError + + for attr in attrs[thing.__class__]: + try: + # try to retrieve the attribute + getattr(thing, attr) + except AttributeError: + # that failed; let's explicitly load it and try again + thing._load() + try: + getattr(thing, attr) + except AttributeError: + if not delete: + raise + # it still broke. We should delete it + print "%s is missing %r, deleting" % (thing._fullname, a) + thing._deleted = True + thing._commit() + break + + +def find_recent_broken_things(from_time = None, to_time = None, + delete = False): """ Occasionally (usually during app-server crashes), Things will be partially written out to the database. Things missing data @@ -907,41 +912,21 @@ def find_recent_broken_things(from_time = None, to_time = None, delete = False): breaks various pages. This function hunts for and destroys them as appropriate. """ - from r2.models import Link,Comment + from r2.models import Link, Comment + from r2.lib.db.operators import desc from pylons import g from_time = from_time or timeago('1 hour') to_time = to_time or datetime.now(g.tz) - for (cls,attrs) in ((Link,('author_id','sr_id')), - (Comment,('author_id','sr_id','body','link_id'))): - find_broken_things(cls,attrs, - from_time, to_time, - delete=delete) + for cls in (Link, Comment): + q = cls._query(cls.c._date > from_time, + cls.c._date < to_time, + data=True, + sort=desc('_date')) + for thing in fetch_things2(q): + fix_if_broken(thing, delete = delete) -def find_broken_things(cls,attrs,from_time,to_time,delete = False): - """ - Take a class and list of attributes, searching the database - for Things of that class that are missing those attributes, - deleting them if requested - """ - for t in fetch_things(cls,from_time,to_time): - for a in attrs: - try: - # try to retreive the attribute - getattr(t,a) - except AttributeError: - # that failed; let's explicitly load it, and try again - t._load() - try: - getattr(t,a) - except AttributeError: - # it still broke. We should delete it - print "%s is missing '%s'" % (t._fullname,a) - if delete: - t._deleted = True - t._commit() - break def timeit(func): "Run some function, and return (RunTimeInSeconds,Result)" diff --git a/r2/r2/lib/workqueue.py b/r2/r2/lib/workqueue.py index 65b6454d60..68dc2654dc 100644 --- a/r2/r2/lib/workqueue.py +++ b/r2/r2/lib/workqueue.py @@ -105,27 +105,36 @@ def wait(self): finished.""" self.jobs.join() + def __enter__(self): + "required for 'with' blocks" + self.start() + return self + + def __exit__(self, _type, _value, _tb): + "required for 'with' blocks" + self.wait() + + def test(): + import random, time + def make_job(n): - import random, time def job(): print 'starting %s' % n - blah time.sleep(random.randint(1, 10)) print 'ending %s' % n return job + print "TEST 1 (premade jobs)" jobs = [make_job(n) for n in xrange(10)] wq = WorkQueue(jobs, timeout = 5) wq.start() wq.wait() - #wq = WorkQueue() - #wq.start() - #wq.add(make_job(10)) - #print 'added job' - #wq.add(make_job(3)) - #print 'added another' - #q.wait() + print "TEST 2 (jobs added while running)" + with WorkQueue(jobs, timeout = 5) as wq: + for x in range(10): + print 'added job %d' % x + wq.add(make_job(x)) print 'DONE' diff --git a/r2/r2/models/__init__.py b/r2/r2/models/__init__.py index 925789ad25..fb605121f8 100644 --- a/r2/r2/models/__init__.py +++ b/r2/r2/models/__init__.py @@ -30,5 +30,3 @@ from bidding import * from mail_queue import Email, has_opted_out, opt_count from admintools import * -import thing_changes - diff --git a/r2/r2/models/account.py b/r2/r2/models/account.py index 8638ea3503..ba4c5062d8 100644 --- a/r2/r2/models/account.py +++ b/r2/r2/models/account.py @@ -54,7 +54,10 @@ class Account(Thing): pref_over_18 = False, pref_compress = False, pref_organic = True, + pref_no_profanity = False, + pref_label_nsfw = True, pref_show_stylesheets = True, + pref_mark_messages_read = True, reported = 0, report_made = 0, report_correct = 0, @@ -291,6 +294,7 @@ def should_show_cup(self): class FakeAccount(Account): _nodb = True + pref_no_profanity = True def valid_cookie(cookie): @@ -355,7 +359,8 @@ def register(name, password): except NotFound: a = Account(name = name, password = passhash(name, password, True)) - + # new accounts keep the profanity filter settings until opting out + a.pref_no_profanity = True a._commit() #clear the caches diff --git a/r2/r2/models/admintools.py b/r2/r2/models/admintools.py index 9a939afdba..0feb3dda47 100644 --- a/r2/r2/models/admintools.py +++ b/r2/r2/models/admintools.py @@ -22,7 +22,6 @@ from r2.lib.utils import tup from r2.lib.filters import websafe from r2.models import Report, Account -from r2.models.thing_changes import changed from pylons import g @@ -51,8 +50,6 @@ def spam(self, things, auto, moderator_banned, banner, date = None, **kw): t.ban_info = ban_info t._commit() - changed(t) - if not auto: self.author_spammer(things, True) @@ -73,7 +70,6 @@ def unspam(self, things, unbanner = None): t.ban_info = ban_info t._spam = False t._commit() - changed(t) # auto is always False for unbans self.author_spammer(things, False) @@ -86,7 +82,10 @@ def author_spammer(self, things, spam): passed thing""" by_aid = {} for thing in things: - if hasattr(thing, 'author_id'): + if (hasattr(thing, 'author_id') + and not getattr(thing, 'ban_info', {}).get('auto',True)): + # only decrement 'spammer' for items that were not + # autobanned by_aid.setdefault(thing.author_id, []).append(thing) if by_aid: @@ -111,8 +110,6 @@ def set_last_sr_ban(self, things): sr._commit() sr._incr('mod_actions', len(sr_things)) - def admin_queues(self, chan, exchange): - pass admintools = AdminTools() diff --git a/r2/r2/models/award.py b/r2/r2/models/award.py index 0c36803341..ee5bafeee3 100644 --- a/r2/r2/models/award.py +++ b/r2/r2/models/award.py @@ -22,12 +22,15 @@ from r2.lib.db.thing import Thing, Relation, NotFound from r2.lib.db.userrel import UserRel from r2.lib.db.operators import desc, lower -from r2.lib.db import queries from r2.lib.memoize import memoize from r2.models import Account from pylons import c, g, request class Award (Thing): + _defaults = dict( + awardtype = 'regular', + ) + @classmethod @memoize('award.all_awards') def _all_awards_cache(cls): @@ -39,10 +42,11 @@ def _all_awards(cls, _update=False): return Award._byID(all, data=True).values() @classmethod - def _new(cls, codename, title, imgurl): + def _new(cls, codename, title, awardtype, imgurl): # print "Creating new award codename=%s title=%s imgurl=%s" % ( # codename, title, imgurl) - a = Award(codename=codename, title=title, imgurl=imgurl) + a = Award(codename=codename, title=title, awardtype=awardtype, + imgurl=imgurl) a._commit() Award._all_awards_cache(_update=True) @@ -57,6 +61,57 @@ def _by_codename(cls, codename): else: raise NotFound, 'Award %s' % codename + @classmethod + def give_if_needed(cls, codename, user, cup_expiration=None): + """Give an award to a user, unless they already have it. + Returns silently (except for g.log.debug) if the award + doesn't exist""" + + try: + award = Award._by_codename(codename) + except NotFound: + g.log.debug("No award named '%s'" % codename) + return + + trophies = Trophy.by_account(user) + + for trophy in trophies: + if trophy._thing2.codename == codename: + g.log.debug("%s already has %s" % (user, codename)) + return + + Trophy._new(user, award, cup_expiration=cup_expiration) + g.log.debug("Gave %s to %s" % (codename, user)) + + @classmethod + def take_away(cls, codename, user): + """Takes an award out of a user's trophy case. Returns silently + (except for g.log.debug) if there's no such award.""" + + found = False + + try: + award = Award._by_codename(codename) + except NotFound: + g.log.debug("No award named '%s'" % codename) + return + + trophies = Trophy.by_account(user) + + for trophy in trophies: + if trophy._thing2.codename == codename: + if found: + g.log.debug("%s had multiple %s awards!" % (user, codename)) + trophy._delete() + Trophy.by_account(user, _update=True) + Trophy.by_award(award, _update=True) + found = True + + if found: + g.log.debug("Took %s from %s" % (codename, user)) + else: + g.log.debug("%s didn't have %s" % (user, codename)) + class Trophy(Relation(Account, Award)): @classmethod def _new(cls, recipient, award, description = None, diff --git a/r2/r2/models/builder.py b/r2/r2/models/builder.py index 4bf2585fd9..69dbf84324 100644 --- a/r2/r2/models/builder.py +++ b/r2/r2/models/builder.py @@ -56,6 +56,7 @@ def keep_item(self, item): return item.keep_item(item) def wrap_items(self, items): + from r2.lib.db import queries from r2.lib.template_helpers import add_attr user = c.user if c.user_is_loggedin else None @@ -79,9 +80,7 @@ def wrap_items(self, items): if sr.can_ban(user)) #get likes/dislikes - #TODO Vote.likes should accept empty lists - likes = Vote.likes(user, items) if user and items else {} - + likes = queries.get_likes(user, items) uid = user._id if user else None types = {} @@ -154,18 +153,11 @@ def wrap_items(self, items): if hasattr(item, "sr_id"): w.subreddit = subreddits[item.sr_id] - vote = likes.get((user, item)) - if vote: - w.likes = (True if vote._name == '1' - else False if vote._name == '-1' - else None) - else: - w.likes = None - + w.likes = likes.get((user, item)) # update vote tallies compute_votes(w, item) - + w.score = w.upvotes - w.downvotes if w.likes: base_score = w.score - 1 @@ -491,7 +483,7 @@ def empty_listing(*things): l = Listing(None, None, parent_name = parent_name) l.things = list(things) return Wrapped(l) - + comment_dict = dict((cm._id, cm) for cm in comments) #convert tree into objects @@ -518,7 +510,7 @@ def empty_listing(*things): top = self.comment dont_collapse.append(top._id) #add parents for context - while self.context > 0 and hasattr(top, 'parent_id'): + while self.context > 0 and top.parent_id: self.context -= 1 new_top = comment_dict[top.parent_id] comment_tree[new_top._id] = [top] @@ -577,8 +569,7 @@ def sort_candidates(): cm.num_children = num_children[cm._id] if cm.collapsed and cm._id in dont_collapse: cm.collapsed = False - parent = cids.get(cm.parent_id) \ - if hasattr(cm, 'parent_id') else None + parent = cids.get(cm.parent_id) if parent: if not hasattr(parent, 'child'): parent.child = empty_listing() @@ -602,7 +593,7 @@ def sort_candidates(): to_add = candidates.pop(0) direct_child = True #ignore top-level comments for now - if not hasattr(to_add, 'parent_id'): + if not to_add.parent_id: p_id = None else: #find the parent actually being displayed @@ -610,10 +601,7 @@ def sort_candidates(): p_id = to_add.parent_id while p_id and not cids.has_key(p_id): p = comment_dict[p_id] - if hasattr(p, 'parent_id'): - p_id = p.parent_id - else: - p_id = None + p_id = p.parent_id direct_child = False mc2 = more_comments.get(p_id) diff --git a/r2/r2/models/link.py b/r2/r2/models/link.py index 21a7dffaeb..945a02101c 100644 --- a/r2/r2/models/link.py +++ b/r2/r2/models/link.py @@ -21,12 +21,13 @@ ################################################################################ from r2.lib.db.thing import Thing, Relation, NotFound, MultiRelation, \ CreationError -from r2.lib.utils import base_url, tup, domain, worker, title_to_url +from r2.lib.utils import base_url, tup, domain, title_to_url from account import Account, DeletedUser from subreddit import Subreddit from printable import Printable from r2.config import cache from r2.lib.memoize import memoize +from r2.lib.filters import profanity_filter from r2.lib import utils from mako.filters import url_escape from r2.lib.strings import strings, Score @@ -34,7 +35,7 @@ from pylons import c, g, request from pylons.i18n import ungettext, _ -import random +import random, re class LinkExists(Exception): pass @@ -53,6 +54,7 @@ class Link(Thing, Printable): selftext = '', ip = '0.0.0.0') + _nsfw = re.compile(r"\bnsfw\b", re.I) def __init__(self, *a, **kw): Thing.__init__(self, *a, **kw) @@ -118,7 +120,8 @@ def resubmit_link(self, sr_url = False): def _submit(cls, title, url, author, sr, ip): from r2.models import admintools - l = cls(title = title, + l = cls(_ups = 1, + title = title, url = url, _spam = author._spam, author_id = author._id, @@ -201,6 +204,15 @@ def keep_item(self, wrapped): if wrapped.hidden: return False + # Uncomment to skip based on nsfw + # + # skip the item if 18+ and the user has that preference set + # ignore skip if we are visiting a nsfw reddit + #if ( (user and user.pref_no_profanity) or + # (not user and g.filter_over18) ) and wrapped.subreddit != c.site: + # return not bool(wrapped.subreddit.over_18 or + # wrapped._nsfw.findall(wrapped.title)) + return True # none of these things will change over a link's lifetime @@ -297,7 +309,13 @@ def add_props(cls, user, wrapped): elif pref_media != 'off' and not user.pref_compress: show_media = True - if not show_media: + item.over_18 = bool(item.subreddit.over_18 or + item._nsfw.findall(item.title)) + item.nsfw = item.over_18 and user.pref_label_nsfw + + if user.pref_no_profanity and item.over_18 and not c.site.over_18: + item.thumbnail = "" + elif not show_media: item.thumbnail = "" elif item.has_thumbnail: item.thumbnail = thumbnail_url(item) @@ -344,6 +362,9 @@ def add_props(cls, user, wrapped): item.nofollow = True else: item.nofollow = False + + if c.user.pref_no_profanity: + item.title = profanity_filter(item.title) item.subreddit_path = item.subreddit.path if cname: @@ -447,8 +468,8 @@ def add_props(cls, user, wrapped): class Comment(Thing, Printable): _data_int_props = Thing._data_int_props + ('reported',) - _defaults = dict(reported = 0, - moderator_banned = False, + _defaults = dict(reported = 0, parent_id = None, + moderator_banned = False, new = False, banned_before_moderator = False) def _markdown(self): @@ -460,7 +481,8 @@ def _delete(self): @classmethod def _new(cls, author, link, parent, body, ip): - c = Comment(body = body, + c = Comment(_ups = 1, + body = body, link_id = link._id, sr_id = link.sr_id, author_id = author._id, @@ -472,20 +494,25 @@ def _new(cls, author, link, parent, body, ip): if parent: c.parent_id = parent._id - c._commit() - link._incr('num_comments', 1) to = None + name = 'inbox' if parent: to = Account._byID(parent.author_id) elif link.is_self: to = Account._byID(link.author_id) + name = 'selfreply' + + if to: + c.new = True + + c._commit() inbox_rel = None # only global admins can be message spammed. if to and (not c._spam or to.name in g.admins): - inbox_rel = Inbox._add(to, c, 'inbox') + inbox_rel = Inbox._add(to, c, name) return (c, inbox_rel) @@ -512,7 +539,7 @@ def keep_item(self, wrapped): @staticmethod def wrapped_cache_key(wrapped, style): s = Printable.wrapped_cache_key(wrapped, style) - s.extend([wrapped.body]) + s.extend([wrapped.body, wrapped.new]) return s def make_permalink(self, link, sr=None, context=None, anchor=False): @@ -577,7 +604,7 @@ def add_props(cls, user, wrapped): link = item.link.make_permalink(item.subreddit)) if not hasattr(item, 'target'): item.target = None - if hasattr(item, 'parent_id'): + if item.parent_id: if cids.has_key(item.parent_id): item.parent_permalink = '#' + utils.to36(item.parent_id) else: @@ -677,17 +704,26 @@ class MoreChildren(MoreComments): pass class Message(Thing, Printable): - _defaults = dict(reported = 0, was_comment = False) + _defaults = dict(reported = 0, was_comment = False, parent_id = None, + new = False, first_message = None) _data_int_props = Thing._data_int_props + ('reported', ) cache_ignore = set(["to"]).union(Printable.cache_ignore) @classmethod - def _new(cls, author, to, subject, body, ip): + def _new(cls, author, to, subject, body, ip, parent = None): m = Message(subject = subject, body = body, author_id = author._id, + new = True, ip = ip) m._spam = author._spam + if parent: + m.parent_id = parent._id + if parent.first_message: + m.first_message = parent.first_message + else: + m.first_message = parent._id + m.to_id = to._id m._commit() @@ -716,14 +752,17 @@ def add_props(cls, user, wrapped): subreddits = Subreddit._byID(set(l.sr_id for l in links.values()), data = True, return_dict = True) parents = Comment._byID(set(l.parent_id for l in wrapped - if hasattr(l, "parent_id") and l.was_comment), + if l.parent_id and l.was_comment), data = True, return_dict = True) for item in wrapped: item.to = tos[item.to_id] + item.recipient = (item.to_id == c.user._id) + # TODO: can be removed (holdover from when there was no new attr) if msgtime and item._date >= msgtime: item.new = True - else: + # don't mark non-recipient messages as new + if not item.recipient: item.new = False item.score_fmt = Score.none @@ -733,7 +772,7 @@ def add_props(cls, user, wrapped): sr = subreddits[link.sr_id] item.link_title = link.title item.link_permalink = link.make_permalink(sr) - if hasattr(item, "parent_id"): + if item.parent_id: item.subject = _('comment reply') item.message_style = "comment-reply" parent = parents[item.parent_id] @@ -742,6 +781,8 @@ def add_props(cls, user, wrapped): else: item.subject = _('post reply') item.message_style = "post-reply" + if c.user.pref_no_profanity: + item.subject = profanity_filter(item.subject) # Run this last Printable.add_props(user, wrapped) @@ -749,7 +790,7 @@ def add_props(cls, user, wrapped): @staticmethod def wrapped_cache_key(wrapped, style): s = Printable.wrapped_cache_key(wrapped, style) - s.extend([c.msg_location]) + s.extend([c.msg_location, wrapped.new]) return s @@ -769,10 +810,10 @@ def _add(cls, to, obj, *a, **kw): if not to._loaded: to._load() - + #if there is not msgtime, or it's false, set it if not hasattr(to, 'msgtime') or not to.msgtime: to.msgtime = obj._date to._commit() - + return i diff --git a/r2/r2/models/subreddit.py b/r2/r2/models/subreddit.py index c987bcc684..111e2ae9ec 100644 --- a/r2/r2/models/subreddit.py +++ b/r2/r2/models/subreddit.py @@ -47,8 +47,8 @@ class Subreddit(Thing, Printable): stylesheet_hash = '0', firsttext = strings.firsttext, header = None, + allow_top = False, # overridden in "_new" description = '', - allow_top = True, images = {}, ad_type = None, ad_file = os.path.join(g.static_path, 'ad_default.html'), @@ -57,6 +57,7 @@ class Subreddit(Thing, Printable): show_media = False, css_on_cname = True, domain = None, + over_18 = False, mod_actions = 0, sponsorship_url = None, sponsorship_img = None, @@ -74,6 +75,8 @@ def _new(cls, name, title, author_id, ip, lang = g.lang, type = 'public', sr = Subreddit._by_name(name) raise SubredditExists except NotFound: + if "allow_top" not in kw: + kw['allow_top'] = True sr = Subreddit(name = name, title = title, lang = lang, @@ -81,7 +84,6 @@ def _new(cls, name, title, author_id, ip, lang = g.lang, type = 'public', over_18 = over_18, author_id = author_id, ip = ip, - allow_top = True, **kw) sr._commit() @@ -299,7 +301,7 @@ def wrapped_cache_key(wrapped, style): return s @classmethod - def top_lang_srs(cls, lang, limit): + def top_lang_srs(cls, lang, limit, filter_allow_top = False): """Returns the default list of subreddits for a given language, sorted by popularity""" pop_reddits = Subreddit._query(Subreddit.c.type == ('public', @@ -316,6 +318,11 @@ def top_lang_srs(cls, lang, limit): if not c.over18: pop_reddits._filter(Subreddit.c.over_18 == False) + if filter_allow_top: + pop_reddits._limit = 2 * limit + return filter(lambda sr: sr.allow_top == True, + pop_reddits)[:limit] + return list(pop_reddits) @classmethod @@ -331,7 +338,8 @@ def default_subreddits(cls, ids = True, limit = g.num_default_reddits): # _by_name to support lists of them auto_srs = [ Subreddit._by_name(n) for n in g.automatic_reddits ] - srs = cls.top_lang_srs(c.content_langs, limit + len(auto_srs)) + srs = cls.top_lang_srs(c.content_langs, limit + len(auto_srs), + filter_allow_top = True) rv = [] for i, s in enumerate(srs): if len(rv) >= limit: diff --git a/r2/r2/models/thing_changes.py b/r2/r2/models/thing_changes.py deleted file mode 100644 index a3647bd76b..0000000000 --- a/r2/r2/models/thing_changes.py +++ /dev/null @@ -1,34 +0,0 @@ -# The contents of this file are subject to the Common Public Attribution -# License Version 1.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://code.reddit.com/LICENSE. The License is based on the Mozilla Public -# License Version 1.1, but Sections 14 and 15 have been added to cover use of -# software over a computer network and provide for limited attribution for the -# Original Developer. In addition, Exhibit A has been modified to be consistent -# with Exhibit B. -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for -# the specific language governing rights and limitations under the License. -# -# The Original Code is Reddit. -# -# The Original Developer is the Initial Developer. The Initial Developer of the -# Original Code is CondeNet, Inc. -# -# All portions of the code written by CondeNet are Copyright (c) 2006-2009 -# CondeNet, Inc. All Rights Reserved. -################################################################################ -import sqlalchemy as sa - -from pylons import g - -from r2.lib import amqp -from r2.lib.utils import worker - - -def changed(thing): - def _changed(): - amqp.add_item('searchchanges_q', thing._fullname, - message_id = thing._fullname) - worker.do(_changed) diff --git a/r2/r2/models/vote.py b/r2/r2/models/vote.py index da1634137a..96528323bd 100644 --- a/r2/r2/models/vote.py +++ b/r2/r2/models/vote.py @@ -61,7 +61,7 @@ def vote(cls, sub, obj, dir, ip, organic = False): is_self_link = (kind == 'link' and hasattr(obj,'is_self') and obj.is_self) - + #check for old vote rel = cls.rel(sub, obj) oldvote = rel._fast_query(sub, obj, ['-1', '0', '1']).values() @@ -101,8 +101,11 @@ def vote(cls, sub, obj, dir, ip, organic = False): up_change, down_change = score_changes(amount, oldamount) - update_score(obj, up_change, down_change, - v.valid_thing, old_valid_thing) + if not (is_new and obj.author_id == sub._id and amount == 1): + # we don't do this if it's the author's initial automatic + # vote, because we checked it in with _ups == 1 + update_score(obj, up_change, down_change, + v.valid_thing, old_valid_thing) if v.valid_user: author = Account._byID(obj.author_id, data=True) diff --git a/r2/r2/public/static/adowngray.png b/r2/r2/public/static/adowngray.png index 0a72437c397c359700b0926c3b64f53910dc2cfd..bddea24c197f48d2de1efd395c922895657efb54 100644 GIT binary patch delta 141 zcmV;80CNAB0>c5283+IX007nD88eX~D0*c{L_t&t*G8^k%4`)P00000NkvXXu0mjf*tk9z delta 227 zcmV<90383r0hj`i83+OZ004jJ(YTQzD1W+1L_t(|+Kf`m4ul{KRK!2f#DgaK{~rY$ ziSfiuM0R$Y09)P19CSLJHj{=r##j|t*ENJdTuRw>UD=h@JDhX-zW?hEFA#5=# dwp;xnzyOnHe0}XU=RyDg002ovPDHLkV1nC^Xo~;< diff --git a/r2/r2/public/static/adownmod.png b/r2/r2/public/static/adownmod.png index 77185b7e08ef7b7c1e84adac2aa4cbf1d0cc3846..bcffccb302898bb761c424f2e9a9df4e6390b838 100644 GIT binary patch delta 214 zcmV;{04e{%0k4)$h)4nt}Y zpuN6O1U#cpRb{IxGeXWlL(CN9ognWdFwR7t0|Cbs;yNI}m~9TwfqXaM57p=xC~IJD QwEzGB07*qoM6N<$g1(<@E&u=k delta 233 zcmVT2283+OZ004jJ(YTQzOn<;hL_t(|+Le&Y34}llhNCQs+Jtx!I}ndz zl@=p-u?Rsg+JPYWz-(rfd4ueS4F4p5GBFM!g2Xt&wmmusAdclEd_ZNMVObs>MQ`qX zXWxzQYe~aRWAI5l@6COlqBrS3dUL^X`X1X>FR;#CRp8JDX=_cRbh<8ZU2&zdvQ~s7 z`MK{kYXzoN%uSc$fUbjeRjgqMMe$e(@m`ujp0l)Ur3l42uG}fhSf~5v=p;=M1vD52 jtZR0fSlq-kS;P1RU{0G~t_5O300000NkvXXu0mjf`=4ke diff --git a/r2/r2/public/static/alien-clippy.png b/r2/r2/public/static/alien-clippy.png index bf82a488e592baa5012c10adc16a98ed9a90d74e..6ad3a70267f403fbaeb1a0dd4dec4fd333e6738e 100644 GIT binary patch delta 1674 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 diff --git a/r2/r2/public/static/apple-touch-icon.png b/r2/r2/public/static/apple-touch-icon.png index c9a8d57b7ec886c5ff5e2572146ec0347eda731c..917d70e3e7cb86e13c424c711dec53a7c97d55f2 100644 GIT binary patch delta 930 zcmV;T16};g56}mY83+Ra006tjbGMNpCw~BnP)t-s1P2EY6crN|791iZBPJ#&FEcYW zH8ed!KuS?UMMX_mUs6<5S!HfwWMpM?eQ|Shae$0{j+=plgNmD}k&=>@skoq`qN29P zuEf@`v9Y?*<-ozg$KUkN(9qxD;O|Q#@9*#NVLtL~O!IhJ^n+*hj&=5#gZHJ8_-Led2s=7BttE3rcfW1GPFBY@ zeq1CUr*ock?U|2LWEw{@8&(t@PQM`YxXB=>Pn+i^E*HpC6s2-Ci8=f1ELy9w&;hn` zlW7#0V_P;0xgJQ^Q@vFouyfUCuQZSz80S6^a-mxts1G%Rr;{fzAu^Ckn18JxM7qL; zJYgubS`?sMOxanXe5j2Fl5;{@@b-EAymi3s@Ac2EL#dHWa17D8`gXZot{r)mqsNz3*Rai$XGT?C)CLThXr!u$Zav5 z6xc10o}5Gj13BvSQ>1C1|4AzMoz2Tq-Et8)I$3LJc_tHiL>Zp?Li6slR0%fW8OCj} zKvffOv4&D92X|>`ZGR6=wIvM|e}IE=DNqot4veQPu|dX?2RmJPH;MWV)3vZ<^{u8H zxl8S}x0*bTYz$gd!HrDU8W>zv7Cgj9nzbTA^7edI;#%By$r`y%7fIVuy2l-I?%G## zCmvs?%_PD~*->h{d@zur`Ax0mHDR{p>dRBJX^Q&~3^`_?#t*`!)c^nh07*qoM6N<$ Ef=T|xa{vGU delta 1958 zcmV;X2U+;g2h0zU83+OZ000Ae6w;9)Cw~WSNkl@dz@Wo}q$wah_M7+OcVD2%>@`SMR2!L6IF30sHVs7*mZ6l_$a zozPTeDlM~Bin4!}v=Np0vQO`!=PfUn%QaVj9LICdJ$at*{qFbneJ)AY?ggj334a+K z2@Kr1Nh33B{@kqjT7HsZ9GZv2_Zw`MRrv*rmoCrEUz3(@l5d@DZ*6L*36744ORKGZ z`>wrj5^Gz_3181u4sp3?>2h!{TDF3=!)D1@x$>ahPP?|QuF3KB+^l(p#UH9qm}Hy{ zl&;TBO*1vRJieYQy**d^@7$7cBY*vO?=HyBrs4Pd7cE(`BCo)4-2G)*K+HLfvVroC)^a{|rYoY)ReZE|YI0JQ)tX^4H9DO`Lw`dj+b=Da zOnI{P3YvjCx5AYwgb0NZ&qz(jtM*k_KYRYN!Rd+#)F^wsd_gjR^(D~;fUNDJk4F;F zHBM^?)^qKxnOXBA};tley z@pom^Lm@Sk^iy+kFi*GmI`r)SgFPs%M{2?OYr(u6SXn7UWPN_kOZ*{M_;c``NKM32d2 z+F~|aEtZJ*q6u(aZa2qRRxA4)lvs;=H#fha!Rc1hI#{C}d4=mzrhiTQrndGUN!D%H zz$Hh;o;_T?(ku4{2S47nO*s`ktimNLs^E!=)phoo04f&v$>rj5*6i7ry1HH^Le6w_ zFdIj&&nJ2WT-J>SDOo*9mhIfhxx?exQ(1{c4&1%Fwx}o}p#u}TaQ-}v;*A?czOAxY zkv_{X=_dZbey!h+S(JHgDhkxfuS+P1~D(Y9>9vUIe zL@ak=+W-{?KV}MHNipTs<57LKi&qGstf;fjlFH<<`XeV&5Jf%7v$N#OsSB5dD-1Q$ z|9Y|6S>a<4;jdLS_39~2Q#~Np@FBtrebQWqIsq~L(<+rQFaI7+nwd7E(ms*U5d*8R zbn;EaP?bFA-G7<(6EPBFYWmw>9#$VSDCORXau`87!D{GU0o4L^nJ6~&W2M3vGx??_ zzZ6i65R^(}j7B2j<1iJL12`!mP^BVKe-iGhyqVonBB1h009NQSr6-Tx;*QMUNs=7V z(9kaiL<5Qelv@sH;Ru@IK#jv$Rc0m=Qh*+^hx+ml&411N_U{Lc$QqOlWH`T6YeS}a zC-gHWB2ZL7Ia{GYsd4ZEYFXft#)^uHer#?IiDDq@=2!F6k;$iU$Kyk7vtCeup)^dVZWFS_t zsb-Z*Z`?&k%o0NJ9vmG}p@9j&+S_v#M-lrMV9nNx6%xyN;Py=eu?9y2GQKe{8Q+`M zA(%nGV$;PC-+JvRB>g~O$|OqiWG?1a@C!^x%Qpi3SfMoD@oJU2WJnwLh?sJb#mkl( zh<|lee!(JKyhIe8$rU{#a5xpCVc|1Qg@Tksa8>~SkygIrg#0Sz zK7b+dwX|%Efp|JQV~)h}Gc|m5H-s064@RWibM39L1Nj5H3hkz5Ei5h}{_Fm1qz5ad z=PBp^wx}RpzqhqT8=se-uM8KkLTgQf4wH@B2F|v(0+i76M|bzXPoHv7&SD19tbdkJ z3Q%~j7<}RU`S%wtaM&y`HpBH=x;}SWO7ivYZkfB17xGrG<_wOI&s{BUxA-V>y{AXX zb2R=DL(jg8Qm{@G8Il61o%dB&W0c2^9+eFjGp((wgSVj6kR2q(_$EiMGS!}lkYk%% s9%JuzW2FqZ~y=R07*qoM6N<$f_m`IjsO4v diff --git a/r2/r2/public/static/aupgray.png b/r2/r2/public/static/aupgray.png index 0964e691c7892a1d29b1f8ae6930ec359cd98034..e154b71a47ef16eadcbfc384bd60a47f65797536 100644 GIT binary patch delta 139 zcmV;60CfM80>J^083+IX007nD88eX~D0pK@L_t&t*GoHOU_wk5Awfv# zEH(53UD_u0$G7PB1`VfWKWqjY8r546P<~4SfF!RcpW?P6SWt&Q&LV6$GBDEZKE)Wx t{i`|W>dZvM&aITvoL6REoK-~n+%7j|z>j6^6h;65002ovPDHLkV1nE@Ig$VX delta 222 zcmV<403rXu0h0od83+OZ004jJ(YTQzD1Ws{L_t(|+LTet4uc>NY!^tp_$&PXcX0L~ z!GqC|a3rW{rzP1Eur-|n8RoIBN{=&m?^8;xPPYc@x(>q-LTIfzJmD}1pk$W zJx$ZT@8CGWs{&QgZQED@uL{JwI_JtL7ofxaq;bKPd4U$t;pT!|mc?58Vp6i52}>&g z3U>fsv7BU#i7{s0b)D9_bY=Bi%o9Siv(M8+q?BTQkrr<-|09jJx=8nZkKg`n@23C* Y0I+48-}shcz5oCK07*qoM6N<$f_wC8x&QzG diff --git a/r2/r2/public/static/aupmod.png b/r2/r2/public/static/aupmod.png index 70802441d6fba58e7c2cd31714006879c9286370..2ead66604a8a3bee123e25d5d8893b897fbb6ab7 100644 GIT binary patch delta 221 zcmV<303!d+0=5E>83+Ra0075Sw%w5-On*pFOjJexieCSVVE>F^|C4L~m2Ll-bN`!m z|D%EbriTBljsLBV|Ff6>x}pESr~lT+|JTU>*vbFe&Hvre|K8I7-_!r#)c@q#|NsAZ zE5XnJ003Y~L_t&t*GBu delta 245 zcmVa zm};Oa_bx$E3fBM>hxvgCsubu-hyx(t|33s9C=QebYhe6;>ny|W1t{iy{{m%j@?xNf zd!;b~LlH%2c{{_~r%<-AG(%)1vLp+-L)kePIJgmPRDhwHjT507$R?ngoeSYyAe(?{ vRyKqpAe(?{d2NQD-xz>iXJkYV69xtVe#doetj~{Z00000NkvXXu0mjfv?^r= diff --git a/r2/r2/public/static/award.png b/r2/r2/public/static/award.png index 312c8a27b82bfe714ad66e562aca083e46e32169..a66ecf44650ae1dea88c00224e00294f32a0782c 100644 GIT binary patch delta 126 zcmcb`c$jg51SbnK0|UcdF^Sz16)m#(1AIbU|NsAgeTwS)BcbolWPIG~$~x633aEs! zB*-tA!Qt7BG$2RU)5S4_LzeX*BkutN9%h5-j*E|2a1 zAcY_Xh?cN$W?=a77OsHl=Ld#o*B>yzT4QWqUtec&d~a`WbAO9}e}90Dn~j{RkB^Uo+H2lQM2|u%?!Q{1!Zfn z89O6bI`b{C{t*Yqi_7k7o1o#_j|=QO3*C~`i7iHR=Cg#*X-L2IQS zX}JQUoJjlLwvSdY z^eJi-)bz^{Oq>bNeDGiPm?UZmKGiqmgAsFab!Rf;pWB^7VhXwO8`{XYr2aR!s6B99 ztB84EIvn=hjZGQdhkv;9ZDVHrGOcm-!1sW0=YbDrmC_}6Xkv|C-!kLIb&pHNRy~=- zJHUCX{5@8Q2gcJIlupbR&aX6CWee}c4zND|=v7XVbT^QX-~xQ{d{KLk7sIjK0T$?5 z*E1N@Dc=C+J{Nnw$bW%l71Zf`#Ee?RNUqpgnF1es584HmJf1c=@sA$U6Q-P|Ce4Yk3OC%@P{(}kiUjt7B^hIVMPeIl z0*PEKDrCHxU1!5&bqxfMCZ@1=fNjrn1*L}tBAZ}toaK~L;@Xl?ppr2XjxEzPQA8Le zXjjXW_|U61>T`!9K(D%>*#g^5_2v`t(|oP@H`r#D{@0?^#r~f;XC8R^M#FIox{2K& z_ZoP#BBN&RT`R-(#`g=E-{^$HiGo4FhQ Y0h2DeG}2&%DgXcg07*qoM6N<$f{LX*p8x;= delta 2459 zcmV;M31s%O3B41L83+OZ006p(sdAAaCw~cFNklZZr5J-j zO^QP`)iep4kA=}(R0Ca&y-?CDp$Sp;W&^GtccsoOxoXt4*g~@^F-RoUi>A(&u0nCN zyKxDzQE4ouP2=o_q@e}Jk3w50_V>$9-onzMYny;Yk*)q$CD(XV7enscU$ z=yF+ES#@>wty{Og@y(JXonL@-_=>V_erTf%H+s5OmzNOkH|s7Xk=-hz$3}+tIj(qY15z_51Vl78Vvb&A9US zr{VL_0>my|fHmIv`t|FahZvHte92e_dg$mGOolD0q{?4t0w{O=q!W_*{eFDK8x<#| z?v64AvIF$Jd-v|&{T(RN3V)yvc=H?UYLoby8I581^YlkJGaw_nqXK*hbO-%KPpD^R zW+oPPzRHYF+hy!=L_=ce4Jh~fJU$)JpO9q*2lNhHQEv!(n%6odwYj@@Hf>{ zsg9QC_W`j#U{q$uJz064^7GGcwVn6e{*_UAIPG~oqGO$(pO1PRK7Zy*;%f#P!{Bf4 z2J5l0u?_eC5!pat6Qe)>&XRr^O+S75^dJB9sH11-fBtxQ)3!hhmFCtfv7gKsr>h;8 z`M%z2c(DKJ<1pbE7At{6{&~PsReKJg&C-0L+Ox0I^OqUVzLE`erhKo#;4&zG=Le=v zae=${ed~)5g@bZ%sDEGTfsXE2TlrhC15^qMizNy>Q}Nn^xmmeOhuwpt@nW5-|AXa1 zrZ?Q*nc?~Qv}bh9_}sa%>({G2zl<2STKY_#q8ne34U3yHRpKhE%S*y#P;PB)U0Ykb zcI_JV;q}E!5a=VveE5y6KOUVNKK|+mG>X9|PFHM|S^yQ|`G1PC4(;91=5LM_=(BZ~ z=x&RA?Ck9P_kWDj^_2lSJ118G%~3B~U)`OWoDkgS@6X1}=;OX`ANAonOjsk_I5v~2 zV3yHh8D15Mabj1)|BJ%ug;)myfs~Y#3l}a>ud-x`10J!Tr8UgqUh}ntIb@TM zHvFT%t*oL7FNxqv2m`Wt>qQp|$tXR1wD9J|OYi>d7k}jHg93E6=kloqvz*lAl|e< z6gHXcNYgsm%1f$KzUS3-3yFkgR}m>o}33eIHFMI$v?O~ z&vj@xasOG<`gR5j38|H0s6lB0*QCk#AO2eDYz$aVg|ZBU8t{ioS$Spb^G9IO10_&w z8h`%D1Z=fF)q&2z{rPztvP;ed&_$_l^mfICGTcOP)GiZMQIf4s7j)G0(G>-5brx|HTUCo=O^+N*PCq!O#ueW7yg!tJe&T1a*&LE52$)UwoR>IvDW9h_$=}7FRB5PmWo| z9<0Z&_yi>gRx+xyR6n({oh`6+Ak~St(9vtN(#rE~FVHM0vMbSwIiF_-v>3jbnSYst z{rt*uL}hT4h9V|U4Ly(R;K)K3C=os1xZ(GXwDV+0?R-onU=Q(RVAPl~c0tB{7<_LS8!(=1ML}g(Rr9 zyg4Rc5PKJlnbc{P$XE&J`-7v|4!#)jLSa+(j?lclXK<%ohb)Ow34haw#=8~m-A=9C zBSWXjyBEiNG-?prrZuVbsKRnsRth91qJX={s)yaxVr!*`*bFzg-hLs;L ztEeOzc=9;h=5LX-hIK^wFMCsy6VggXVGU3cTJcXk$<7Hu`0gz-yHE8{JiCiu`mX>3 Z0D1OMsYPj{C;$Ke00>D%PDHLkV1j(L$fp1R diff --git a/r2/r2/public/static/beta.reddit1.png b/r2/r2/public/static/beta.reddit1.png index 5487e68d42904325a3efb52ce9da116fc758c1fa..56aa5ed2fd20cfbbdcbea9b869b2f758ae0800a9 100644 GIT binary patch delta 1300 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 tpUg=2h-2XWtO0u{a8i)K5-ey;!k diff --git a/r2/r2/public/static/beta.reddit2.png b/r2/r2/public/static/beta.reddit2.png index e0392170e44fd90cd53c0dc6b2688afb37ddde06..9faca0c111c45486f508a68ca011bd72690bfbc9 100644 GIT binary patch delta 1346 zcmV-I1-<%)6YUC+83+Ra0006s&KHp(Cw~C;P)t-sGiI4TZ=XOwKt^nmMr@Nzd8JQJ zPgZ=QS%0Njf~;MGsb61TU|?WihOA?WuV#$0W{k6MZ*OpLaB`Kne2JBRe}8|Uzkq;% zjHtzpsm70wkC2d%nX=5EpP!(hprx|ErM%LtxyG-ruduMNu)N8#yvDM{*tNpXx_`#g zzrVk~&)>knz{Ahn$=2h{%*@Q#<;~gV&(F`$(9qM<)7IA3*y8Ki+1cFO+~42d;Naln zFMe0?CkIF@9^;O^7Z)h^Yixh_WAkw{QUg?$Fl#*w*S$<|JB9+*vkLh z&i~`s|K{EQ>f-QE}W!ngMWwpPFL>_ zPYmwsj@Vbpz%k9?DZsPjeDFHh-ok<253Yin3XTf~y(`Y{x7BL(l^dT{s}J%>2f=YSmt4xP2>!y2M>HgO zuYj{K%(j)qL@4pYG^;;OvVZ@lkE@SQBJ>Zdf8{Fgb*Mtm3%3>D^QHiIp6A_VwcuS7 zx*r%Z{xjtPV)32Uf?w|-n{WW|gNGK@0P~@DUwL!wct7iK(1;&49VECTL+;9q2-o6g z?cv@ZT&{5q7 zy!>{3)-ELb;e}8W(?@++%{q5~rDg0H9_$J8@vq6qpURBmO9KiK=zzy1{7>5Ak zrS^LfQ=k>&5MbQIn-TM%RFx={G&G|{&~B*6Yfx1-HmK5Wi?~&l8VYwTT#05-Dg|y5 zqO?)QHmy+y?gd*BH?V>+VPi5L8>vNDnlc2tsVXC;kTS5jCx45KaYPJ=Aa}LEVju-J zwm?%-*AU&fv<{5dD?QklYL~SlP@t_si&!Zi0rFhXNCBo~%mkQ`7El9lhNLU94G!jl zZA453hEtM82CbcHObGe=LxS62TVoga{PKRVd*nsX-T<=#OgUICJ=WNP0CT}M42@_k z1%+NSgcrN93Csw^*?&9mG* zYx454DXT&_ld|-ZRbG?_e^kM}q`U%Qm0VP^Q!y)ESwwz{Hw5XmrL42l&U`HH zSEe{oGEH^1z>{_M9TjQtLFUETFdv3rc*TWsw+1hEgT%eH|5pkKNv=14N7Hg6951J07*qoM6N<$ Eg4YGbH2?qr delta 2403 zcmV-p37q!r3WgJq83+OZ006p(sdAAaCw~bjNkl>k%g7D%cU6ZIF zTtJOLkcY>_(NR@<<;s=alBCP8irAZtjScLB*%DL&Uq*wnVt=%fBS(%54i1tzbLLEmzM0}ILI+GO%W;W0YD-av zt*C=Qf^cGCVWFm`hLlJHKuclVfdMT+n;44j?rvkq4BV3P6WmLn+jWMZhAZpu?+4ji zw{8)%*^kmB!V3n2qD4A9JX~^sMsXNJV}O=C*A2ibv@dpueUkj-@oV%rAtI?X(%H* zFViTTR`sJro1ew+_a6q7cYk(vp6NoyzSh>(){`esOj@y6Y_{{kjmP6; zs;a7v9Xm$m(W6I+L_#6n($Z31US9mokeDH({x!!tUDm3+0&r`nY;JCHZ4QM(oF2PC z4-5=|(f((KM}3w2SVctzDF#~Dt+{`L-N4Aae5rXUWn1zCEpN@4q`rUuzU2lGDVrJt zF@>+#^E51Wxm-(2OMlRo^^zA}@As_(1H!e%6n-!OH*5k4GAb1@qRf6YH#ggNJO68m zL?YtW+-^4>tWYhn%gP60L*Ozf8yOAL*@L`8SUi);=RTr6F6HXY6F|+8Uxr=ARQ2}u z61^0J1+f&)J)3bvs;jH*_lCs;g=`(>(5lcSH?L_{&}3}AM}Nz^65%j6@*JW@L45VzU)9GZH4Gj&JjU~b}PE`?K8Eb3{Q-#-=dzSSJ3&a#7fI$Fs02PZYDOOlg zW(JY5>|I@5d4G3R`3+XcbwE%SHv&>>@edz9G@>lQ8L=%(wY)6QRX7|rt{I^R+DpJ- z8Mm?JEWzl(m|G4lX{n}48`Fqts+Q$h-=o29c6N457gN>JT6{T{*4O=UNPVg~-&GJ0 z|C^4WlHG{G^I$G*)51q>&-l@ZgOT;W> z()nPex~ih1rH-_qs$ce_lI4vfccig@Y4v(;5A~21RP{>~XEvb4xxr|>UtU%MM>rbW z+)B1IXn(jw7Grgu>Uxhm6j`RWyS<5gIJ!19|BPB`vlNR{XzC=MNTMqxba;6rKq^(V z?{3qKSYRf?KuS@1bGx8_ePAZM9NSbwb091yfSl`W(c5V8FKtXJ#s>0}28@pVl}=Qj z%qlpyV4P3EjFu~(O-4h#i)Y^^bNAy9uKBbb8h`HZzIvfkuR7Ov_M}$gOO*^==%g_4 zN#BtEGj+-Ib^q;8?^-fiGIu}vfVB<%@w8D(dP5PEyV@IXU+tl!r?ZvzpZ~Rw)N%r( zw{Fn`+4Kg5K>OH2;1g7XVtF?8Xy97#^J?1Yvk zl1w+XH;J^fmOB16{GLhCwBMOOEhj)~*^g00WMU@5_OSiKV?mt|Cj*~cghs$kA!HZI z?+a)k9vmD5Wo|2ZdjVgKDW_Xu@zmTiXayIT3RuSz+Ypu#CIs=VLrH&-D$If)UVm`t zq8aEq>;QwB_+>c(XhEKm7OPW_3jI)pf#&4VO#V0%pFa4vv|+5kba>?6^nRlbxpQ;z zlk0WfUT{IIfdv3A8O|MNN~$i8Ot4gD#%2gF!i%x+&n5!zhZZSS+WJrLu|rjkoNLgby{gTefY_)$-G8YlQe4eN`1z0170^!N80uPuk_!h++{p_#C+0-b>j>wzf%$Ls#7|HFkP|35j(e;ys$ z_%vXTP-(BA(U^Ets6A1*`T@V*$-}h#tC-*KpPZaj3aMV;Gb%vM=V_>IqcHI<~DClVk z$`Ie?Im-5}zNV&zWxylr)8}-ua?_`NkH@3E{5hSLTf*WkM?{PBmrY9^=L(&Ckv>$sejT1TvNHEWo2b#a=%LN?Cj8z)a&);{s;o&Ha9nw(O_*ybWq8*Nct2is0V8r zgJv?BjOy>MmLt-bf#UJFXvrvOZEbC##ZOkGMqFK8rGNIo^kqOT3KHb_{_>Lm0{|VU Vk}qmCnLYpj002ovPDHLkV1ne}ws-&l diff --git a/r2/r2/public/static/beta.reddit3.png b/r2/r2/public/static/beta.reddit3.png index 7d0c570ca0cfdb7bb1bc6a7ab1e8ac0b11395171..93e7caf932f664e3cbb30344e464c2718aa11ac2 100644 GIT binary patch delta 1552 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 ZU;v$77w$ZCVhR8N002ovPDHLkV1k`za|!?e diff --git a/r2/r2/public/static/beta.reddit4.png b/r2/r2/public/static/beta.reddit4.png index 80948ca3bc85d4e9b0ff385688577e6064375d17..13650ef12f17e1a8d8d6c50f179ba2330d6d85fe 100644 GIT binary patch delta 1844 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 Bc^Uu! delta 401 zcmV;C0dD@U0>lH583+ad007`B)S!_eCw~EENklTqbmh z04p_y8;{>II2kHX>;o2Lj)tr-11}dlL*CR~3~TCx!F-TKFfcL4jloo13eN9baes_q z6_0Op1t|ZuFdy0Q{3*NOY=3JthAcl5;tlt=RtLKV1VEO6G*8=f z79~DF7J__4Qm}wD@p7>-v?Mv8C;$Zm$Rdz|S$@V~%aXb_gT+C?M3mtm#UL-jTn+-| z5mxY^k`m!%`26h`IJjVrAq2pw1%BjWkYbod7yuax^ASky#^X2Ohz2E9DG?rmhBJD! z?)d-u;X?*$15tT-%ydpoFt`mrGc#?7x}4~;h1{S(=9{F?qRen)13(5N^M^;6Q*1b{ vAORZ=s!Umby{D>+LFR$XWu#^84-jAgPVJOXwdt0u00000NkvXXu0mjf8w9c| diff --git a/r2/r2/public/static/blog-collapsed.png b/r2/r2/public/static/blog-collapsed.png index cefb6bb81e213858e9e55baf548f9d4a736b327d..832f5fd2b46e5030568cc6c9670205866845b619 100644 GIT binary patch delta 254 zcmVKWOH0xIHz~D`VO=|#x zZ3zHjDJ@F?TbMn1zESMydt;t_rWLbP10v4KPa}_0Jvfu{6l?8`T)2G1gTz_7C*_@! zOhTlUo${0NklCt>3l71OD2fIjzy?$U!tOHHb@@JQ8by9Oop_0z zav+XlDvE-WH%&v5Byqa{>_3CpS7yFmuLnt3(^UjgS(bUDgCL;m_4?eGn+@!Cm`w@r zfmftA;)1wW1$;o;Tf7-0gP%Pw_hj9zQk|BMGB!>KO_?;hod}OMn3Y X3;_;9$2 w)cJyz3x~^@TWFkf)=&7}^hNI5eqa8>0h`ta*^M1?G5`Po07*qoM6N<$g7}Jb9RL6T delta 389 zcmV;00eb$b0=NT^83+ad007`B)S!_eCw~E2NklTqbmh z04p_y8;{>II2kHX>;o2Lj)tr-11}dlL*CR~3~TCx!F-TKFfcL4jloo13eN9baes_q z6_0Op1t|ZuFdy0Q{3*NOY=3JthAcl5;tlt=RtLKV1VEO6G*8=f z79~DF7J__4Qm}wD@p7>-v?Mv8C;$Zm$Rdz|S$@V~%aXb_gT+C?M3mtm#UL-jTn+-| z5mxY^k`m!%`26h`IJjVrAq2pw1#;wKkYbod7yuax^ASky#^X2Ohz2E9DG?rmhBJD! z?)d-u;X?*$15tT-%ydpoFlspc4QC-o)0vrRIOR;zXHjN2vH_zJO1j~o%9Qojd#V}= jG7n@fBQ0xxfB*vkZfuN&)swmy00000NkvXXu0mjfJc6lW diff --git a/r2/r2/public/static/blog-expanded.png b/r2/r2/public/static/blog-expanded.png index 2db0f6fe4155bc791db6d95c40ef209e12585f50..2bc422fb5ff0b35c61e25cdbc82446afee399231 100644 GIT binary patch delta 250 zcmV1Fiy)83+Ra007tYB$AOKCw~A!P)t-s|NsBCwzkE^#mULZ&CSix(b3e@ z)Y#bA+1c6L+}z;c;N;}w=H}+;=;-Y1?CKX7Xx3}%JTN%ZU1v7| z2(~2vgr&4B0c>IR==nymr|*q<@|jl5G7X40D?g1qPW9kS%2TYfH*(?f5f2h)Nl(f< zC!Lf?D?8;WNf&85atGA!Z1{`sDqrNj{qM^@>^hSoygLqxq5uE@07*qoM6N<$f~Kg2 AV*mgE delta 360 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 delta 107 zcmV-x0F?ig0iyws7zqdh0002l7t64bAuCrxNkl^r6CLqSI0%{#Db#QSeG(M&Z6o(^=qU-sO3V{Cjj{z8|7EaVt1OUV;Idn)H{8<11 N002ovPDHLkV1j!;C}scv diff --git a/r2/r2/public/static/bluer.png b/r2/r2/public/static/bluer.png index 9b8db75e189f363f0467d6f34521851712dc712c..f43c64b853a36cf40027eb7facf1fde4dbdc0060 100644 GIT binary patch delta 95 zcmZ3@IGu5V1Scai0|P_O?sH2fDr$SP1^9%x8mG%1;KHi#Nil*&gKx^;|BMVxilS5Ue%yTwRL|h)>gTe~DWM4fNO>Y+ delta 115 zcmV-(0F3{a0jmL!7zqdh0002l7t64bAuC@>Nkl6IiFJwjK$tS|4CZ*wjfrWk*nU90m78)AWOG!BG$dWf2h-Uh%Kv*9Pw> VG$dUWK+^yK002ovPDHLkV1m65E0q8M diff --git a/r2/r2/public/static/breakout.png b/r2/r2/public/static/breakout.png index 1057d555bbf35df446a3840f2f622b70bab58a06..c26d65eb01121d53d6ef710830cc2f8f7c5b35ad 100644 GIT binary patch delta 114 zcmaFBc$#s71SbWU2w--;w#rOkA)88=PV|8ZTRB`x8aqN~xMXD9U}CuVUzU59 S#}_}Keg;ohKbLh*2~7Zc2r6g* delta 135 zcmV;20C@k)0pJ0U7zqdh0001xD!PV|Axv{#Nklu1H-+{4}L(3u{g-xiDBJ2nU@nC0wUOwyxm795(;2*9$$eR#S*`m!?j!zHh6~)8(2=yyiJYo#e<=d_29Ngl*Ex btzVh6^Yr&K`-)@$O=a+O^>bP0l+XkKNaZW| diff --git a/r2/r2/public/static/button-pressed.png b/r2/r2/public/static/button-pressed.png index 915c59f0fc482a3034504e0b32d45447826183c1..d8871f2544c0092157f2572c4a0509b7945db8d3 100644 GIT binary patch delta 111 zcmcb`c$RU3q$m>u1H-+{4}L(3u{g-xiDBJ2nU@nC0{q#Myxmb3}$M+qWs2AX6 z>gnPb!g1a8)Ir_`1A!wBw_olTnzexY6lcH8qs@~{PnX(TPu4n=A-Xc9J8<@y_itv# cOIvvDaTaFYXJb&P4m6X&)78&qol`;+0B2q;SpWb4 diff --git a/r2/r2/public/static/cclogo.png b/r2/r2/public/static/cclogo.png index f337b82d633b35413413b80a2b46117da0979654..e9f4ea68246f36abc79a754e3526a12271d2c348 100644 GIT binary patch delta 4967 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 delta 5370 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 diff --git a/r2/r2/public/static/clippy-bullet.png b/r2/r2/public/static/clippy-bullet.png index 3c447d0ad6bd9274a90cb76655de293e4ca5104c..d83857541e52edf1f9becf5d4ec0c0894adf401f 100644 GIT binary patch delta 190 zcmcc1G>d71gcu7m0|SH5eraVO#aJBV?!>U}oXpFK4gvML0X`wF48~~;#xohxW-`n? zV{ClJIBljeka6Zr+W-IM<>hT{Z8QJ>-?VAd|Nm$H|NmccN6Q0bOp>>|3t#?T1AidL z(bL5-ghQ6mjN#;ehPx+MoxQ+tXQ_kC1%^{<3W5h17CH$y2rx_#Fjin-IKX02B*1V$ p$ht&;;SQs$ioyeiyAK%UE~rQeT}8 delta 257 zcmV+c0sj7)0^I_T7$^t^0002skp>U|0004VQb$4nuFf3k00006VoOIv0RI600RN!9 zr<0K`P=B~dL_t&-(@o4FcEV5)h2f7JJR%NRjhi~w5SH<}2OP_2_kbalSX{Y ze5A)G=d`GGsC|F4JABVLW|)y=s>A0jJ(m{mAFoxYLqYllWp!0k9UK;U00000NkvXX Hu0mjf$e3)M diff --git a/r2/r2/public/static/continue-thread.png b/r2/r2/public/static/continue-thread.png index 7279c3fd8854d87ded0fc58a2b5b9b110e8c3a20..b3d068b42494ff96269040d201a8f5f2a32b8b3c 100644 GIT binary patch delta 96 zcmZ3(IF)gN1SbzDtWp%hHzX@ zj$mbqmdKI;Vst0E|c^ A7ytkO delta 119 zcmV--0EqvU0jvR#7zqdh0000;T@bI4At+-`NklES3NO diff --git a/r2/r2/public/static/create-a-reddit.png b/r2/r2/public/static/create-a-reddit.png index eab74a08ba1a0a69d6274b84526a6d2c585897a0..473bbfe539a07ff42fd4f78538dc014fa4721cd2 100644 GIT binary patch delta 785 zcmV+s1Md8z3Bd-C83+Ra004n^z;}@$Cw~BkP)t-s0000F4-XI!5FZ~OARr(wFE21K zFh4&(KtMoGPft)#P+wnPU|?WxZ*OpLaDRV)fPjFHkB^X$ke{EQprD|yudlGMu)n{* zz`(%I&(F}%(BI$R;Nalz@9*&N@c%^s|4%!|9`}< z|Iokx+|U2>@Bjb*b8mhx0006|NklfM-0r)Rh zb^z>5Z64-Lrt7t9Iv#MxbiMw9n}1JDnQfA6*PXxNP7|EAVyf0Tcc^o^53ubHq(aPb;-w7cm&^DYA&`a(d+ec)7d)@c!fSMq#{{h}-9*Isot% zLU;xE5yBJLV#Q687uUPj5W+8jO9%l*$>Y52<(ifE=kWXv@b(mb0(m;Ebbt9y^SX)N z&6#M?<5yf2bEWlQ>an+NYz6dihPO^6ScZfL`qZWM4Qnz@N(-5W)rYA!@Kqj#n+3gKdFJ zcmiI+E7Zm9)I)2MX1-}QWq$(jEBst!&?44aExOR#dC~T$Kg%%SopS?VO*$_<5D$>w zu{PRgooyDb%mI31t@QX_qGMF`m@M3!+FRisU&-AK0CkN%FTJ04QuG7R7fRPLm-pCH zKfPTB;w6$7UBi33at7sn2_UHHuYW>tbsIKE< P00000NkvXXu0mjf?Jbc= delta 1142 zcmV-+1d02>2BQg(83+OZ00245rxKANCw~M*NklE#UJwKq7Z-E@Tdh`f8jZ$eGHJKlV1HMS z%29yitbhSI7!0nit{BTAEJM%8C4E5>hiSs#w z!{HFaVrO(}wOS|?YZF?z3c0+z#I|N%Blq|B7$0Zf+}tFil{i)AEx-PQXFVJaoD8dO zj>3VOkq|^!)wtFxrBD}(1$)VQ^nVFa4#&Ri&NxU~2Jk8pw87wmNc7e7^D}LtN}=g+ z39E_wP9*Fy8jaTLb^eF*`MlrnE1;yYb`V$Op<*{6$#MGQ@t7^ZQ~s5d<#LI}K> z5Le`(V##i|O9x;yMSXY0kI~z=cGx=dvU?kK!>Qjhfq}h?MApqiold8qVt-5^XS10* z&5mD!_}{O|$rO+p@6|K_BZ6&E^H>6FDDiudxYMuur2lt+GG%_g9`u(3)a!Me%AUp1 z#A?=fY%4Q#>%L;ENip+zBD=*$Zl`xOhY=v|iw*2^7uaekD3sn5^ZYHX3JpgzE#N4FKJ{=Iz ze8HW@nT;7yS7L9#s5~vU(i=V`2(}Lx<++Vg~h;&`(0ad6=LC^pZyP z-2KT#-Sl-;SG7{Is}i%o{tpKpjrQlPx# diff --git a/r2/r2/public/static/css/reddit.css b/r2/r2/public/static/css/reddit.css index f61fb53834..f5abf78774 100644 --- a/r2/r2/public/static/css/reddit.css +++ b/r2/r2/public/static/css/reddit.css @@ -73,7 +73,8 @@ input[type=checkbox], input[type=radio] { margin-top: .4em; } /* forms */ -.wrong {color: red; font-weight: normal} +label.disabled { color: gray; } +.wrong {color: red; font-weight: normal} .subform input.text { width: 25em } .subform textarea.text { width: 25em } @@ -554,8 +555,12 @@ ul.flat-vert {text-align: left;} vertical-align: top; } -.organic-listing .nextprev img { margin: 5px 5px 2px 0px; border: solid 1px #B3B3B3; } -.organic-listing .nextprev img:hover { cursor: pointer; border: solid 1px #336699; } +.organic-listing .nextprev img { + margin: 5px 5px 2px 0px; border: solid 1px #B3B3B3; +} +.organic-listing .nextprev img:hover { + cursor: pointer; border: solid 1px #336699; +} .organic-listing .nextprev img:active { margin: 6px 4px 1px 1px;} .link.promotedlink { @@ -835,7 +840,24 @@ textarea.gray { color: gray; } .morecomments a:hover { text-decoration: underline} .morecomments .gray {font-weight: normal; color: gray} -.message {margin: 10px; margin-bottom: 20px;} +.message { + margin: 10px 10px 20px 5px; + padding-left: 5px; + margin:10px 10px 20px 5px; + padding:7px; +} + +.message.new { + background-color:#F7F7F7; + border:1px solid #E9E9E9; + padding: 6px; +} + +.message.new .unread { + display: none; +} + + .message .buttons, .message .md { margin-left: 15px; } .message .entry .parent { @@ -853,9 +875,20 @@ textarea.gray { color: gray; } padding: 0 2px; font-weight: bold; } + +.message.was-comment .midcol { margin-left: 0px; } + +.message.was-comment .buttons, +.message.was-comment .parent-link { + margin-left: 0px; } + +.message.was-comment .md { + margin-left: 2px; + } + .message .child { margin-left: 15px; } -.message .head.new {color:orangered } +.message.new .head {color:orangered; font-weight: bold; } .message .subject { font-weight: bold; font-size: larger; } .clippy img { @@ -1108,6 +1141,7 @@ textarea.gray { color: gray; } .status { margin-left: 5px; color: red; font-size: small;} .error { color: red; font-size: small; margin: 5px; } +.red { color:red } .line-through { text-decoration: line-through } #noresults { margin-right: 310px; } @@ -1461,6 +1495,32 @@ textarea.gray { color: gray; } padding: 10px; max-width: 50em;} +.self-service.instructions { + margin-bottom: 50px; + } + +.self-service.instructions p{ + margin-left: 20px; +} + +.self-service.instructions ul { + list-style-type: circle; + margin-left: 60px; +} + +.self-service.instructions li + li { + padding-top: 10px; +} + +.self-service.instructions li.done { + text-decoration: line-through; + list-style-image:url(/static/green-check.png); +} + +.self-service.instructions li.unfinished { + font-weight:bold; + list-style-image:url(/static/red-arrow.png); +} .button-demo a.view-code, .button-demo a.hide-code { float: right; margin-bottom: 1em; } @@ -1756,6 +1816,11 @@ form input[type=radio] {margin: 2px .5em 0 0; } .over18 button { margin: 0 10px 0 10px; padding: 5px} +.link.over18 acronym { + color: red; + font-weight: bold; +} + .reported { background-color: #f6e69f } .suspicious { background-color: #f6e69f } .spam { background-color: #FA8072 } @@ -2490,11 +2555,17 @@ ul.tabmenu.formtab { .award-square { float: left; - padding: 25px 0px 15px 40px; + padding: 10px 0px 30px 40px; white-space: nowrap; width: 300px; } +.award-square.mini { + width: 100px; + white-space: normal; + text-align: center; +} + .award-square img { float: left; margin: 0 10px; @@ -2502,6 +2573,11 @@ ul.tabmenu.formtab { height: 70px; } +.award-square.mini img { + float: none; + margin-bottom: 7px; +} + .award-square .award-name { color: black; font-size: 22px; @@ -2510,6 +2586,10 @@ ul.tabmenu.formtab { line-height: 1em; } +.award-square.mini .award-name { + font-size: 18px; +} + .award-square .winner-info { line-height: 15px; margin-top: 15px; @@ -2770,6 +2850,7 @@ table.award-table { border-color: red; color: black; background: none; + width: 100%; } .create-promo h2 { margin-top: 10px; color: black; } .create-promo ol { margin: 0px 30px 10px 30px; } @@ -2949,6 +3030,16 @@ dd { margin-left: 20px; } font-size: larger; } +.sidecontentbox .more { + margin-top: 5px; + text-align: right; + font-size: smaller; +} + +.sidecontentbox .more a { + color: gray; +} + .sidecontentbox h1 { text-transform:uppercase; margin: 0; @@ -2961,8 +3052,8 @@ dd { margin-left: 20px; } } .titlebox form.toggle { - margin: 5px 0; - padding-left: 20px; + margin: 0; + padding: 5px 0px 5px 20px; font-size: smaller; color: gray; background: white none no-repeat scroll center left; diff --git a/r2/r2/public/static/css_disliked.png b/r2/r2/public/static/css_disliked.png index a87cb3ca59e81cbf23d77fab05d8ef7777760abb..6669b5ce7d10eae3ef1f61acc52fbb64f1d1d4d5 100644 GIT binary patch delta 395 zcmV;60d)S#1>ysc83+Ra00AdO%2|;iOMd`GP)t-sGiI5RlK+&H|C*Zro16chp8uht z|EH(_sj2_2uK%#G|FpFKySx9tzyHC(|Hj_;*4F>n*#Fwv|J~jH-{1e^NPp(T#`1X`m5h3igEdWO0r48KzRgIp z=e7$SD-QauwUEoHfrN#m-LLCv0nnhev;6XGU_GWs+yca{Kw#a6dv-@9%gktIQGXO1 z6=@ksJ7SxIa9nhhv1h+`@P(GtwRm*meZLyu(8g<&(j`cxzUF!Uyhdss$8pXlHG8R@ z0j1Qf>$+Pqx8cTd&PyB%v{=d;Nq&%|`Fz@xk6!AUqN=qgN%m{a`KU?hFDYp?+8Y0` p_OFAb>j$h!Nk3Pa;orWx48IvmXG)ZYrEUNK002ovPDHLkV1gCE)MWqw delta 629 zcmV-*0*d|O1Ih)E83+OZ00E!*tvrz-OMe1LNkl zzG9JqD-v2#w-UDwerZ2Hi)65iWjzaD-*`-&j!0i$BFXQMkJyUU)^$l=U#Ucm234zW z5g#ZXA2Z`hzuVJNCDZm_(#T7U^?z+_cL29sNIl|qxuimY_uS?P#{={YhcuaJ9l#dN zYe#Jj^ZWj$#e%Y$6UW_=w!%*a+;YX3d)ILJmyfSZ@FmD|8_k6jmwb?>t28|^)LI=RNsTZ0`P zmEN)s?Y=s(SbZbS!PArPBzY`JtX6^>jzsxVz(G~7`;Udt{8+cxhqn|~xrGMz?xK-Y zd3u;P(r85eKK=ZN8qaSy6k;nCDwi#%%A0(Xoh(*g)8YgNB#`X&+^faqB~J`0!_T`Q z3@cMdz_WrnxY|8ZsQ}JBo2&KbXKJ_a?Es|sYYU5`qnK-GKalz>EM5Eo@_>e)3$3ne P00000NkvXXu0mjf$D%Ai diff --git a/r2/r2/public/static/css_liked.png b/r2/r2/public/static/css_liked.png index 8dd471cdfa6a611286bd6579ae11c5eb87080b8a..faab902b8f7bdb81c9fc47181f974b4a98639afc 100644 GIT binary patch delta 369 zcmV-%0gnEz1;_)C83+Ra00GtcpZt*_OMd`PP)t-sGiI5_-uM5CUjK_=|BPY(lWYH# zZU32b|C@IIqk;dXhX1UM|E-SyvzPz6q5r?9|JKL<*U10a$^Y8T|J~95-qQcy)BoVq z|K!^L|Nn`uWViqT0PIObK~y-)os!$KgCGn=H;qQErL`V<+5i8eeL&>W!pw2MXn$O@ zOc(;=1H*wNVMzbnzEgZn%aoIQ+50zugh3XQ1-S}xkgQ}+0z@cnLW|^M6hHP*b({Pf zs)&esxb;iTX$oe5h_KeP5uk1c_-?>e)-cZAFu+wr)(UhYClMDRQj_QY9DfVs&`vh( znZujCHI7m{XFUc@+!lEth3I;BL|$A55g8UHd-iJ@6rxk{QMa$zzJ%}>;Ws`L|5R1A z>pE3ceMS+n3DY7w<7FJjOB|>WSr@PKJYNg(Yt&!jmmM9%001HCXlpKbfDafXnq|bsd&df{$k|1~Gb}V8b0^slh zR;8eDAOZj#!vtl{Dq-kJ#IG8rG_8k$gBxxD#6xgzAq6Z1Y@UuMq>R&MG6FG?-hUz? z3Wx+iyP2@qGc6Bbex@N^G(J^frYK#W3{dDTd{3AQB^T@uwC8&x2|3S?Kir@vf+<%UgPL=c+O6D^xZ)bS>ltEaUA+nMT<1h?`0A4|c zzrR5wUI0nwIE_Y6Qu~*K$}1pAL6X97sY3+W@dF2>l#;}O$rW)VR6YX;fDVNQDWcFC zd;pTfn21sf%viv70io#y?u^h_W~%Jix)(G{{rQ5 z@<16tKLCMO8iRrk{;&bM2HBNpj)NC;1Ragdp{hn81P8zvfA<2)7Ls5HDrBG%ASnm4 z5LUt~%m8oc0@HqZ;|F0bfkq@p=w;4kW06Gs_ n)r1KYb*U236av~bAZY*qvCS@U&G67@00000NkvXXu0mjf#ohWA diff --git a/r2/r2/public/static/css_login.png b/r2/r2/public/static/css_login.png index 6e95fea7cfdc6d98d190c1b4f810da824861662f..2801a179f2836de033d0b237090b1b3daac689c7 100644 GIT binary patch delta 382 zcmV-^0fGMH1=ItO7zqLc0003{OL5zgAxnP%2~bQ_MKflZ#@_e;|NjzjyO{t00X<1X zK~y-)osuzX13?T$#gZcIDZ*64KgHImQe^I6a*DyEFsginMU{A`OtF*1c4CA5Krqsu z&q!jdwbojDw;cd!9{?O|tG}5eU^M_(hd$`Gi}l5$)cJ){x-E7_J7uv`D}Pc~Mgo6| z|I{;<^ES>n+DD+DR3kuewB7!oP*EgOQ3;AdD$=GQDH0Va0x6MHjyKIJnO>vZTniNYvE-_4T=lEPu&%BsuM0KfXF$IE{y2+-~*< z4V*OA!*lADt)`4E^FTk?tcSta`v!;Dc1v|F9^LI`^ce$M<;;!N%iH4`S$yMlf|cOT-<$Gh>1$B=OQMW z>XeVd@N`4)dZ@cGxAyES#}L|#r+$ByF{A}r+wG#@_OJDn*)nk7@c~;geJN1IbeTA> z!hLs+yLdEuN;G82OV=Hxm&t>2^KDdB?heS}Q)XAdRVM&HrBs4C4bssi4wCd5g~)e& zK1pS;(|Ax~f6Ax8YlsK5j?i^slNDfSG)Fm$U}gHq%s8ySE@)UJcH8wa(w=|C6Q*Gq z@F|bcSlh68h*qAYP8gM$pxDqoo0*Z=T(8@vDV&_v=>@&dL?o3 z&KIWOJy$_3O9_KH2%6&tV8F{)f*RHc79?1g}q;fy@G9**aE_P5B4sC@BpIS@L^ qiJi{#8W^qWZ&0000vHj#S1YG)Y&bk=wfrKxKXuX69HHI=3`)vt>J1 z*FHv delta 339 zcmV-Z0j&O}0;vO#7zqdh0004zP}5V9AxnP&CrLy>RCwCeRzVWNAPj^~4}QZp=*7=? ztS9e2!Mmq=^f7wz4f+hdVP_zt_65ZEAE_PA`9| zI;$j#ssv5sKZZ|G0i|4$AQ;%P0fc%abm1K-UZTtrftc>^5gF;rAPD)N7?S5yD>L1& zYX>Rj>xAH}1rpcw<+kk){T}_Y(jze>DbiztE`)c57FCPy!)DiD%ngW%eS*iX%&IzC zV?v*IzYFzM{8nl}IUYOs>GLWn6lp&l*u_^l+*5vYNpw0xfIAp-_gsSO1urSC5A8%9 l<=jn(D0h=%xTnr=cmV=-1;LlMs|^4E002ovPDHLkV1l1SoEQKA diff --git a/r2/r2/public/static/css_submit.png b/r2/r2/public/static/css_submit.png index 1e4aa11b618ecb1dd1e67f89d89f0e133f2c9920..65ef97204ac84c47f4865fc6a6c1c8d8d9fef521 100644 GIT binary patch delta 550 zcmV+>0@?lV2l@n%7zqLc0003Zp+rQHAxnP%2~bQ_MKflZ#@_e;|NjzjyO{t00pm$T zK~zY`&6F{Y+b|SFe}oiz%(1ua`n;KB zaX6n}pRD&C^`Rt=Bc(o)BupKC2w(0mb%$?vH+XlY4=KD!sHeDHpiy&PfNm;lMT!Jo;6fhH}7QQ^bhxf<$QFzQ@{hB~qCB4P9jd_hF zbk=J7(qBI+PIMdV4oxkZ$k3#1hhBdo*^!bSf&xvO10aE`LfVHz`rO$*P6=fnRw$G% z0!k#EvqS%Zb|hXMvD+mfr0zcRub&nOt(GPZvrsaChoVwPK5na ziIUHHTZbc15sv^or&7`2VIKR7=cHr}>tS4~+Te<`j)iz^9=ph=8LoBAI)Z;k)a-fm zJf3&JmWbdK2Wg2cD^5#G3)}+|L0OJTF;SW_o#%l86$S)>rdV5v2wx1Y>&0nt9K<_= zbc5U)I7mPx{L>%<*oKH8;Go(N*@H({D&@d~59=U_^V$X<60GCeE+q=enUQ%NGh=1} oXddkmU+g0PPi^}CTz>op%}x?5Rc5JVU;qFB07*qoM6N<$f*(8h=l}o! delta 926 zcmV;P17ZC71n&os7zqdh0005dtvi5`AxnP)ZAnByRCwC$Tsv~xFc76UDsl~b)O!`f94bUcJT7+KHCcH~brZIm{SDWTCfC}HesMY; zY@%q$hx`x|M?;MP6Z=GSSHYs-=8}IfmIy}|V?$y&0%oj@oN-_$@$5j;Lxu@B$teW8l&4m=bM;I{r`x*0f>_E8l_$Z~U~?ctJ}#>a+X^ydg+eEu$B@uL{B03(fOXi}>_m$pA9kwOU@$bm>3G=BS2lGv7z~?X-UhIB zm%(6Y19|je&der(*Rb(B{JOC;_ia7Ls+7c*g_I%KL+!0?Vw)x)t?V_)MSfY7iIniy z0j}c~k@+IjDKdlbw6hfq-L*n0)RI%zHzqlnd*Br|Xw%{PwV3FMHUNLQnZW^SQIHkI zBp>IF{ zs*t2tR28MC5|a#x*Q84&ft;mA&qzKt#1w6I?d64^)PlT7xvNQ)z*rGEr;(@5zE7>g zoh2ZTvo-MzxWv$JC9Z$GK$XWLJ!5L|)A3+$+zstvL(k`geU-&vFtou3&tH8$on1&+000UA07*qoM6N<$f)%X1 A1ONa4 diff --git a/r2/r2/public/static/css_update.png b/r2/r2/public/static/css_update.png index 205f3e59162cd2c4a8c60aa1c191857ee9e93232..a5b68a6c687ee96bd0b2925c8eafd4f3f30f5d74 100644 GIT binary patch delta 351 zcmV-l0igcv1fc_v7zqLc000164+_1JAvb>j3{Xr|MKflZ#@_e;MF9W*|K59SW&i*I z8%ab#R5;7s)JCJkBta?css{I)J?xTS|vb8|33nyt(+95E|MYXeyKP35Q zc{>`*>vAk!mXnUf`TqzZVGcuq+giI!&7kmYFCTJ4_8aUKp3u7FdW@d!$unom7X;sI4)-~s~}NSi&PzQ x7C7D9v2&}rdztaXyTD=L58vkTU+(Zv`w2M_c_n@M6Ndl*002ovPDHLkV1h7PmF@rl delta 557 zcmV+|0@D4V1MLKm7zqdh0001~19f?kAvb>k|4BqaRCwC#TuW}kFc3{5->6)nJqAly zvF8ZvS;3NH^Z=}S2Cl)9TCx<;$&5YzBu<+5q*ks!^Lh3-Gkn_KAI}B=fTl6_=Wx1# z2w>$nAGgM}el9!E0jw6A{nh^NKm-6dAQ%7u!2kg1!SL0lkLEyZGwX_MKFB7!lTnu+*|bzc6ZT7ZHD|unuIhdm1Y0c04xwDyxD!5bV|>JzCn(Q zTkb|Zax|%tBvw+*4za39r$?Y)xY9LN>^tE>VtOzXi1WrVjwD87=-H000>{{0cAt1azoTrIhvH00000NkvXXu0mjf(R>N9 diff --git a/r2/r2/public/static/dislike_firefox.png b/r2/r2/public/static/dislike_firefox.png index 9a69af9be7497e11ea1c2dff27009fb0b42dc819..ba77362ca7212dc3afd2a1df0982cdcb425a92f1 100644 GIT binary patch delta 1004 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 e%d3=+VdOvm8^?|<5R(@G0000#6W(4J<;fk1| zDXJiwDsyRz`ScIK5Oy#@HehWV09}x(0_Z7Mmh%McxE2ZGWWjX^piJ@0;gQ6VHatFK Y00DD4ZiA8`tpET307*qoM6N<$g0vGb@&Et; delta 151 zcmV;I0BHZ$1NZ}wF#+n4GR-B(;QGno`^n?}&*=W=>h0F>|M2ke^Y--m_w@e${{R2~ zEMioPlLG;BVSx?+5C}wjzt;bMlo2P3xr|wFrDHZlk!67wW#*C&=951FL8yZWyZ~$4 zK<61pL;|9e!qa^M>bMr85PBuoA%HZ+&xeN-huiS@j0OR7I&M-mN=yI%002ovPDHLk FV1l3KPEh~= diff --git a/r2/r2/public/static/find.png b/r2/r2/public/static/find.png index 3e62e03fa77ec516a67e56cd4f75969fdee2c7d1..83aed6037a40f0db7d0c2914e6867edbd0809d05 100644 GIT binary patch delta 159 zcmV;Q0AT;RA)p|T83+IX0037zX%Mj?bq{|4bV)=(R2b7^ScnN2@QY2%Nr+6$nS?Ah zC3Dl$-%mGX&P5W--Sp@G|NnnB?PZN>EqJD$Len( z(-C43;Su>sQAznT5bleJ2uJrvM0hy5-y$L+(EW=l1QR1Atni8f0Pl0 N002ovPDHLkV1nbVLwEoH delta 314 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 Q6_29&T1%-?!7BX!05r)CfdBvi delta 9022 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�%|)OPIbjaT0Y#ett!j{VxV=iYr{ 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 diff --git a/r2/r2/public/static/gagged-alien.png b/r2/r2/public/static/gagged-alien.png index 6f144eac02eee05e1bf17840bb52096178abc73d..6641d41c0129e4835b4fd7a4fd7a2593775d404b 100644 GIT binary patch delta 2542 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 Eg7P(*H~;_u delta 4435 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 mcm@S) delta 83 zcmZ3-xRG&!Cr7ZSi(^Q|t(=L03J&a_H{H6%=fUQc|3kU+M~+widkg(`_KTSv0yf|0 ng?)eZST8rC^N;T>c}6ydYiS|x!wceHFaUw4tDnm{r-UW|#zP{{ diff --git a/r2/r2/public/static/gradient-button.png b/r2/r2/public/static/gradient-button.png index 4274d8c5ea6bea8449131a5e2eebe4bf0e7d67e7..4c8fb113423fc6aca2831ae679d639122096ac93 100644 GIT binary patch delta 72 zcmbQr*u^-((^1FM#W95AdTEa#AA^EGGspk>%{yLNT1>da8Wt%L!4WYxen*@8;rE|R bgnn#foSCR1-0B&@$N&VMu6{1-oD!MD57 nz4A5{pIz^ry~DmfhmnoJ=%@O(#}0*u7=Xaj)z4*}Q$iB}b7&y6 diff --git a/r2/r2/public/static/green-check.png b/r2/r2/public/static/green-check.png new file mode 100644 index 0000000000000000000000000000000000000000..5745a64ee5f8bf2b8cfda33f154e498cee3aa96a GIT binary patch literal 834 zcmV-I1HJr-P)CryZBk|ij#*hzN(=eHA}A$VTnJ5z%0d%tamh3>5=sP% z2#a)_aZ4L#=DmCGzYp&^MTz<$I-kz}o%4S8e>nF&2LJ%*AH}2zcY%eP+abqXR%Z6;c~x~w=WedrjRrIG+Ye`n8Dfjr7IBex+1;^7 z!{NMj^+B0)QX5{loO5m3W9sWSXyv=QI`5rti1ejI^XqR$?RD;q<-Gua5|+$Y!V9zP zh8S!F0P5beex=!AEkp?kMA4BIS^4{IZi7ePRtD@i^O1Els3M<5)mx3@A zuFRx~!3)OIPxg5iojOEBl-A_famBq|*EUW1@)q$TRJvk+qcofiM%)vQXp~nrsq%bF zboQE)v9ER&1PpbH#j-O3iD<_cSi$XgU=*AJ8<<{9 literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/help.png b/r2/r2/public/static/help.png index bcde64e54fbbc9a462b2189bbb61e2627e665775..19558da9eee601c29fac3d45c215324dbd02f3c2 100644 GIT binary patch delta 98 zcmX@dxSMf;1Sbcp_?Ri(+>sr}Hr`1>Qrx4tKV)DDf?Ae8rGpD-b{5X9_1!J%gvKpUXO@geCwH C7b714 delta 117 zcmV-*0E+*+0nP!C7zqdh0000c&fsy8AxvRRNkl+tUcdsxc6N5Sqz@fB z#DdIESq5dyi9$64E)ADJW;4N6AnQYS2c|{Hs+lk~p&7=6UmA-FxOYe}g9Q>Sc)}C_ XX%Q5Q$APX300000NkvXXu0mjfwje2z diff --git a/r2/r2/public/static/ie.png b/r2/r2/public/static/ie.png index 41d643c45f1dadb0cd81473071c44fc5eb0c84bc..707386ac08d41b7089eb037c80e8e1ea3ed58cfb 100644 GIT binary patch delta 7475 zcmZ{IWl)?=({%{W1_jGU0dC>bYQ!OrZr~; zE4Z|p@PzHn7AzR(6&6n-46eMjzapWc;B_#*uXtaeB+m~Sj!N-tj zJ!@L|gn@}kL(e35cAs{p$mnFY$mQg-mBJ-p4skyUZ)zH?YdVUWdshnl=mx4=;u!az zT5zZ=rliUrC*;weF0yr~d#p!khFiXHlTEGQX7glAQY#6JrkBoMI5hkSyGX;qj7oudd0a$G&yLQE()v|2-pK%zfl{bIwdE<$L>YfYYtGsfc7kqky`-MPVhs%MFH zTcCuZ`TExK0SUKIQ*p}vCwS}?E+A%kh$BUk0UF6>g!#kCBl%xn13L%pmZ`t34XvrW zS<7k-%S|@m(9Iun)pmX-C)BTDaMn^=Pklr^ z-Dk?f8?-3vBezE8F0h}k4&2`5fcZ|2|4CF*j7YW$*LFKd;?_YpAIKCo`Mzy4=B0d_!Kq`d^o5 zQM;4W71xaXH$zig`o!~_xRbB~&85I?&jfEc+K%T=GnAO^V1&ng|B$00rGsFQCzs7@ z|LPIWm5Y=5cpyXo+;@*x`{xwheqy;YdRJ~F&jzybu-{{Cb8Fi}OFU+K6N7>Y)7kPJ zV~ArqYB&boO2W^z`SnJb`L#J2kYTa>$|P^#IfWt{Vh1rau{|IJy#xgAoWTt{P<3fO zihWcdf1lLOpep}vRZ4!<9c9=PZ$}D#{(~RJsmXK-^P$OL;bj9C1M8m({EGZazipf2aWO` z#jgKmzrj&HU~1r(d@Y@Lqa6;Ocauk&Txl?@W7S<^NQd@?_TGXq?Ux(qedXgAkrNyd zhJg6Q_oM*uymeCuOO|yNp&C^T?-B!&q6;DmDQ@`LMhUAsihVJutYN-1fitm+lNUe6 zfcqTzb&0`2m$Mm)RjI5h@3)>=baZ>SOnq|xdEjI%RHhR1GcVrcBBM>6(sgfCS(j3g z5hVsRB%m`V0F?y2nUqXnjef1p@CyQ1mkqKSW^l?{7@fe0?Q`y}D}~F!Bkp3KD<=te z?hO{rDTH>7KX1S3={msM^KKV( zh;@HjgrStiDQw}#tAuNCuQ!|)bob9K-(iVC34VU93U%&9=aC62xB~;d-r85r1A6rX z3$_Hrmz_14EqKJquYagxBzhqGAh@s3iv7C}J-oWoYn93@SEjvwOpD|0kLgm}#e#dW ze_qN2;g<#uS;>Wr62e9!@@3&wcf0Kl7c?-Dlo)O2t858G)&l&W65Ld4?aS!JLQpYT z8%w`!*TdOee?VF(K?E>{$rq0C2=RlmwFNb?Q~jb2$1}L;c=*un2cnKx8exE)`b%Dz z@ho3~cXY9LcCaVRd8!n&;dGKap^=LbuQt$w-;ZXSYDtP9*3pASE?`aR&M>$vKVIOszc| z|IK7$roGC-18`Ue+r}n*Mn&j=Q5;~m@$0oGr<(ASo5A&B_e5+vb!sfdOpEkPh zFfcfInjA>B9&m5QNMdZ18IG2d1Bd-ifx#9&c@3-<)aP@Iqw+w?RfVQ~5$HQEnf={o z;OlH_ZT2}GJhv2AK|6)|m86|F2Fo&iPL~7Ui@j7I+1Mw0S>hi&2M2##*4oeN=>60q z7_cp7wJDaE5}&dSDXT88C@V)`>9b_i14Jib{!Ir>4L=q|eTs^H2X&bx$<~ldvkBDS zG>b0s9k8ammbFdwE3Kj1_`byQCNkYQJ*{)v3yMr(8(FScsHrr)`cOlXw6^}st3#xJ zS2-xb8qMb5u>5T&OZ*zy;DQ59gvFjrI96s5Y7ojT%B|OpXTy#A!o_7BvcA}n7tlse z?O0|c<^Fp8WHQgV&egQ&iWEUchq>_<|#- z^z#l5b#C1bOU!p?Kk^?(q+JblHzKLd$(-k#J6k+XzacTb+$7+qr%ZBe7zoOhrAtJVf*DfEVskL#d!$Y2oIw94%GN4s=b8lLBkhYGLE1GR)>c zVNI9F#l_T5p@nC*WeRJ~#!P?yJPb>aToc=?@Er@F4+)Xhm(S-1Y9E=B&YPsxC=1Ip z0>@b1O9|KBo2v&jPPZJiYY|GT(szX64M}gtAzV>KnItg$Ra&Cn{{Dt!;OW)w+LTyf zQ9gU=dP4k^==(zOHx1qEJgl0|?1^lZ-M39S%1p1r&?8+gic?b!mm69Oe#%uOZilH+ zW@KizWoM|P1TKyy#6WN{PjP8)bY{E`tCbzIiOGd>)5@WuHoenMfz1o_uHg>*W^}VP z{SIXdR+M*Q>TlUrLNr%r019R}Z1hMKgbPz?URh21DITXSC-=IxirC;ITT6apn2~`N zNNR&bq<16He4RMAtge@A|6gM;D(?Gmg#zk?Da}a?ns@7fs+KHmXz|NA&X4$2Qrb`_ zCn(g(+8VTdbEftBTY#;jBWEBa-#$;)922W4gM~L4f{mM_+771zFusO@c^wD%E#XyZ zJ=1pNPjH9*pm1*Ft#k6!5bdY^-=BAn&^Q2t42fGDu3MzlhcUjNj3s1lCU3w(q|xG0 zpBcNLETMQLc-=OgWmbmj@~EYGRg5ipw88p=@0p-O-hbu#33z$ic2b7e|#T*d=2hp?=Ac(3-uj4~c z!d8Y){p*Wg0L_8Q+VsIDCVCOU5P#M}#J4)r7C^?z(M&J62M@D-OGmf5EUyS$o5v~A z!p&An&r!)llNp`dsxY*opn%poS}EYrE0Bcx<)%|JFuS^pWWF$ljx1jhO$Wo(>UT*< zNC>*7a9X1$d55^%FT5`t%dI6Mytmz!?t%Md|XphGjBa{nh1pl4fc9 zckAF1dQTZWMTY_Bw%nOdW`thtG@8@nw7sxLjq5`B{aCK?FSmFs zL$bx3SrVyAX6LZPP}zgAhzG31H<-9IvgTiM{B+2euXY^H@Z^Jj(EN zI*;_I*6^w%D$)Mco^#!;G5^(%O)xhFA&##`B7#qzo*CyPh^*QWu;z{eRQ})47rat0 zpn>oHr_&}csOvrQ>}cG$NMZzny42y=6#cw}?iINR20>OhGXOKdC99wh$>`;9#ME#?-mLEhT7yNjK)jvrCMz%Gp%L2U|72o%7FU${QFAymB_a7>@Zcw7LmVhtLTbiD zXo>m7`kYgF4<AVfF{uww5}h>VokRr=lUHa{5UWxK93ZalQo3hmAPrc zzZpmCY0mDIGb*uUSEpqrbxDHm+zFyOVUa@*_uJSGT1b1w1H?k>@@hH|w}DN4e0+VA zYSl4{kerxGA!o6EZ)Il%hq&U*Y29)MPjA$@deU9tS6!V;G-jGMRgOMJE;+k!P6B>EQ?#fhFAck8kb-aS_|X_>ZhX%5GH&e(uKXPY zb|9;{T^ydce7d=lu~QRB8``Q49DO$dRdM%eoZMXFnKUV`xW9&5OKQ!$(%<8@slF@g z1V5!7emEw`IBP0HT{P86~^xdApqp*jJk_I$``W2sv#j*Cqxz!rJk&&xJ zudnhmpBu6A3O9GggcfP|j?nI62p~)j;~^IIOE28NzGO8eS$D>a*tL)!o9J0=bE3Mr z!M#JH%wXd<8|r00|IxchJXRr?cM)$Zj{a$2pt-rZlp1D5iI)Kd*p?FDnkQMTJX}ZA zbSgky&)u5lRgnGp#EsGM@xYg0gYEYc+cw-?8$V%{F6gtP!$pXe{reMwV6g`?ZY3hs?JTH*bHo z)m+hT5q&*whbjOHZwSSlFR3XKUtoPg7GiQZ=VmvYb>+a5tk`0;-VHx_v3k$=LaBlj; z!dF?fZVWpZE8RMvLLF2UQ>9&`?!r`nMdNgquf} zttLRECXkR7@C`o!%q&0`w?Y1Thd2?%1A;GrR6g^9lrA!})J?0k5Eay>tTaj_)NOf{ zTcfo}a5)R?kzPkQeF99RjNH4}1XE|22*b!J7<>iz`SZ5FuCMi(^Tb~h6pv2)(#77W z{rcZ=iMu(~d86W|fwDxCuenRd*22tS8f6Zy7-ex`_c)K~4*5pZaQM@174X&c{-NgU zY-oWK?_peFCmp-fvVICE31J@Vj58*4nA>y~3B+9}u`|i)wY9Y&(QsSM(tQd|)+J8R zCerT7B>|CTD;bk9h^{!em!AjRxk;LMuQ{#E<;}lWkg=4*hsPQa%H_1#;>IHrZ<=xN z$iefLKjts|H9eEJnX1of=$i8W?DzR2`7UaE&}~;x5Q#6(%TH3YYEXg!`}W3}Ujigc z5&#K?@p=)bv2Ien&RNnvlEg zaRnu}@8m~9+LF8Q>}mR8whindKGbu^NO?&^{Y+!}t%bVxFBBJ->bomyx%Elu4XrLm zkI*kl%$lT3O=vX(gX?w6A*7C`=S|1c%Rm*aoT-+{3quVb7nDNbB>h^qp=QLaUKuv) zc$ZU9S6A0PLJ%qH-SXM)&AsP$@i!lO{Ga($83&s zqxHb6(qsXj>a&--W(`C>wq#-th@JM5vBF^33L#Hjk~Fv^5!5|=_462!3O`%fFv$hEKewV9O7Ps*#v zdu~|Mf^}aXd>k8Xd;edqXfV$L)K{p4&q~37_lB^C!Q%M1h3mjZlgDO@YQR~~1(eB; zNUfdPvOVo{V9Q^=k_^6f;&ZxUz}UmIBlbhveDrOCDbjk2mAA^hf6+@1Pj|gJuXqz3 z!%WhG_Dxr!YS)lE#iEyZiR|rRsm9SuQ{5!{NQL}ZW}uO|IHq%4gt&pSk8~$NT@+u# z=Jh1u15dgp1(*Jlob6)tM!ys!E8xMrZE3) zQ-G$mBWE0_e!nja>pJEgz3^c_*)F?IbwskAKI?G|SUuuqPlS83+ z!B&P|G`ftG33`vk-tAUBK+Wi1%EZP-)EXcdW&g#=Ytt|C={Imv*wicrgD!q$xeG3o zkGr~V6dU?F*{;M}gA*-#FKjqR=dqj<@PS5^J+Ih1421Qa(A`Jn9_aDV=WP~W-rujV zp0c9@d5Kx!$LS|sN&Wnnf1E>a$k|fwv}H#^qWx3Pm#Ph|3}s&eE}k`IB_gTpLk#ct zxv!%fbbLW4RNLAyHuN{%;uD700X|J?Tz62nJ_SXfupvxS^NXdWyfIB}bbnx)ciSAH zBi7e88`z;l}78o zSQq!jUtW2|gxwbqOY@SM|2L(QaNPHRaoow6A!CLPNqkCIpoH|5vZ&PZ{?Wr{0@Ql4 z{d-m>Y*`#yRWlrNblUVMaR~@yHx*n($$`aWVV!NwZ5#H?fVt_S0s;aK8=|BC(?IO` zVb>qdtK}^WMfBNCSV*g9!?88+H;z7{=3~X2tTo zE0()&fsKB+ec$2~Q&Xwgf%Z|IrxT%GwSh<_k4dZ|O<3Qzh3(N@iTCWXsaQ%Q699X; z_a{K5P~6!v0-VHR!OlJeJIw3RFM!41FEOYW#fG3oK{3x@n`)ytrvsy2!OTDgODTlz z-Lo7=$P;4Ljas_eQ+6dP(VRpWGu-bQA6x+F?{d2sEEuN8=Q>+gc6CPpS8?Aevk)I^39F%3P@H_Ewi(ng5z~wwyFBaG!e;9LqkTdF(%h zDae@U34$Ysv;X3rbHJL4^zdNs5f4+pOSI?R@_llwvbHp`3a@eglZFpcbnw39|q5OJsEvR9{;im<%8#o1+|q}t|J=SImO0UY ztM^OTZv|7pgjnemr%s%UI*42QyFaNDq%bS7@Azb7m;l<`7e4X5;A+$miyb9mY*Fvb zZ1b;GYFdQfWk-N*ORZkx;hp>m+ltdx`Amvo$&~@HGD_=2l=O4|ZAfn{ zD!Oh%wjIt!!MxCl8vZzBneXk1IE^5e%{@q+xOP$Pq&qm-Nf(5Xx4b76j3v3nXq5Xk zvr@_WLov-oRD=mUG3Szdo{a-`)H{Whio*1)(nNItnK_X{hNTP6osZ|lk)EK0>*2#F zN4q~Cr^-Y`xfTH)*J4ylWDtcl3rqt-UB5w5x8$sjv>0IizMfZm8hr9nO|5XS!>k8sa=%%Ffk zAc*}J(#?5rP{FwmU`x!=#dC4x!S;E%PMOxfztAbgmAd==wo1ctm4@2-<```Ko&RI$?OpiE@SMUr^e*B z_gn6~C_kSp&CUu>g)c@f>&=2t6Rq=w<4omZRg~i06$ebO!oUl*B(~jm*b8CM%-?e_ zp%Z&DUh@0@<=Y~vlZ}sVm`-fXK{Wj;> zr8S>lu?-rklkVoC2!sG?pEI*4C@CoyTXVUeAN4t?zxqLa z44P9I(Of!hrC4!8U$bX03R~N2=4j(!#=dxIEb0AOvLoEiBEaq~eyIIh*z0>*pc1MMD_;YR==5I4B4RZ!o|n9|vQ!D=li&XXWbDnZ delta 8065 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 E0}27kuK)l5 diff --git a/r2/r2/public/static/js/jquery.reddit.js b/r2/r2/public/static/js/jquery.reddit.js index 23bd6d348b..2c63ad9562 100644 --- a/r2/r2/public/static/js/jquery.reddit.js +++ b/r2/r2/public/static/js/jquery.reddit.js @@ -142,7 +142,8 @@ function handleResponse(action) { }; var api_loc = '/api/'; -$.request = function(op, parameters, worker_in, block, type, get_only) { +$.request = function(op, parameters, worker_in, block, type, + get_only, errorhandler) { /* Uniquitous reddit AJAX poster. Automatically addes handleResponse(action) worker to deal with the API result. The @@ -168,6 +169,14 @@ $.request = function(op, parameters, worker_in, block, type, get_only) { release_ajax_lock(action); return worker_in(r); }; + /* do the same for the error handler, and make sure to release the lock*/ + errorhandler_in = $.with_default(errorhandler, function() { }); + errorhandler = function(r) { + release_ajax_lock(action); + return errorhandler_in(r); + }; + + get_only = $.with_default(get_only, false); @@ -188,11 +197,12 @@ $.request = function(op, parameters, worker_in, block, type, get_only) { /*if( document.location.host == reddit.ajax_domain ) /* normal AJAX post */ - if(get_only) { - $.get(op, parameters, worker, type); - } else { - $.post(op, parameters, worker, type); - } + $.ajax({ type: (get_only) ? "GET" : "POST", + url: op, + data: parameters, + success: worker, + error: errorhandler, + dataType: type}); /*else { /* cross domain it is... * / op = "http://" + reddit.ajax_domain + op + "?callback=?"; $.getJSON(op, parameters, worker); diff --git a/r2/r2/public/static/js/reddit.js b/r2/r2/public/static/js/reddit.js index ccb77a468f..11146e98be 100644 --- a/r2/r2/public/static/js/reddit.js +++ b/r2/r2/public/static/js/reddit.js @@ -71,8 +71,17 @@ function get_form_fields(form, fields, filter_func) { return fields; }; +function form_error(form) { + return function(r) { + $(form).find(".status") + .html("an error occurred while posting " + + "(status: " + r.status + ")").end(); + } +} + function simple_post_form(form, where, fields, block) { - $.request(where, get_form_fields(form, fields), null, block); + $.request(where, get_form_fields(form, fields), null, block, + "json", false, form_error(form)); return false; }; @@ -83,7 +92,8 @@ function post_pseudo_form(form, where, block) { }; $(form).find(".error").not(".status").hide(); $(form).find(".status").html(reddit.status_msg.submitting).show(); - $.request(where, get_form_fields(form, {}, filter_func), null, block); + $.request(where, get_form_fields(form, {}, filter_func), null, block, + "json", false, form_error(form)); return false; } @@ -127,7 +137,7 @@ function deleteRow(elem) { /* general things */ -function change_state(elem, op, callback) { +function change_state(elem, op, callback, keep) { var form = $(elem).parents("form"); /* look to see if the form has an id specified */ var id = form.find("input[name=id]"); @@ -139,10 +149,29 @@ function change_state(elem, op, callback) { simple_post_form(form, op, {id: id}); /* call the callback first before we mangle anything */ if (callback) callback(form, op); - form.html(form.attr("executed").value); + if(!$.defined(keep)) { + form.html(form.attr("executed").value); + } return false; }; +function unread_thing(elem) { + var t = $(elem); + if (!t.hasClass("thing")) { + t = t.thing(); + } + $(t).addClass("new unread"); +} + +function read_thing(elem) { + var t = $(elem); + if (!t.hasClass("thing")) { + t = t.thing(); + } + $(t).removeClass("new"); + $.request("read_message", {"id": $(t).thing_id()}); +} + function save_thing(elem) { $(elem).thing().addClass("saved"); } @@ -151,6 +180,20 @@ function unsave_thing(elem) { $(elem).thing().removeClass("saved"); } +function click_thing(elem) { + var t = $(elem); + if (!t.hasClass("thing")) { + t = t.thing(); + } + if (t.hasClass("message") && t.hasClass("recipient")) { + if (t.hasClass("unread")) { + t.removeClass("unread"); + } else if ( t.hasClass("new")) { + read_thing(elem); + } + } +} + function hide_thing(elem) { var thing = $(elem).thing(); thing.hide(); @@ -1076,11 +1119,11 @@ var toolbar_p = function(expanded_size, collapsed_size) { }; function clear_all_langs(elem) { - $(elem).parents("form").find("input[type=checkbox]").attr("checked", false); + $(elem).parents("td").find("input[type=checkbox]").attr("checked", false); } function check_some_langs(elem) { - $(elem).parents("form").find("#some-langs").attr("checked", true); + $(elem).parents("td").find("#some-langs").attr("checked", true); } function fetch_parent(elem, parent_permalink, parent_id) { diff --git a/r2/r2/public/static/js/sponsored.js b/r2/r2/public/static/js/sponsored.js index b5a46b56a4..4e7729f7e1 100644 --- a/r2/r2/public/static/js/sponsored.js +++ b/r2/r2/public/static/js/sponsored.js @@ -3,7 +3,7 @@ function update_box(elem) { }; function update_bid(elem) { - var form = $(elem).parents("form:first"); + var form = $(elem).parents(".pretty-form:first"); var bid = parseFloat(form.find("*[name=bid]").val()); var ndays = ((Date.parse(form.find("*[name=enddate]").val()) - Date.parse(form.find("*[name=startdate]").val())) / (86400*1000)); diff --git a/r2/r2/public/static/kill.png b/r2/r2/public/static/kill.png index ef7cb6513d6d41be49c70c2aae1bd2641a1e6ffa..ab602af979c5aae4321581cb73e4039158fbbc94 100644 GIT binary patch delta 101 zcmcb?xQ}sy1Sbcp_?Ri(=+fF6U!isyvZi4tH1=I@V0E@Q_=<$KdmvU-x2jJqJ(=gQu&X%Q~lo FCIE^+Bv}9e delta 127 zcmV-_0D%9#0oVbM7zqdh0000c&fsy8AxvvlNkl+tUcdsxc6N5Sqz@fB z!~|ibEJK%ri$GP(i9%5XWCKM|R3IxtmPSzlSA;B$t^y*B<|ZaIX-qdUp-E#p9N`x< h02g6_1Ph)p1pu=MA){*E4e$T}002ovPDHLkV1nloDnbAN diff --git a/r2/r2/public/static/like_firefox.png b/r2/r2/public/static/like_firefox.png index ebdc3413d46edad2b0cb3390e2cf7a7f3e5b0a8a..a43091e5bae2799b768ed49f602de56a27b822be 100644 GIT binary patch delta 956 zcmV;t14I1e2#yGl83+Ra00GRXuUU~HOMd~FP)t-s0001ada8PUt$Tv9e22Dvi@JZ0 zzJZg%f|tgGo6Cit&W5DYh^NO8u)zawy)6&+{;PBPy|JK#n*VftB*4o$J=-2E2*w@?H*xcFZ_}T3L+S=&a z-{{-p?cCem-0uI~+~D2r|K8o;-reEe?*HH3;^5!o;P3z8;N;@r<>TV!E`DD=JWsP=YQ+y=>O>R|LN%L>gnz3^!)4U?(6ID>+ApP_5bYa z@9pgH?e_ic_W$nf@$T;b?)U%i?(*>O^YHlp@$mHV@&EDo{_^ql^7i`j_Wbhr|MT+p z^Yj1n_WJYs|MUC*^z--i^!WAq|MvCy_V)kx`~Ud&`S|zy`1twx`26|#{D1lR|N8m; z`u+d=`u_a;|NQ*_{Qdv^{r~;`|Nj2}|NsAibq37<00HPpL_t&-8I8e334l(Q4CTQa#dM`UtT@b5`oU9XGH*E@L2blF)#?= zxD`{d^7Ryy3G?~SPmY9ZbONOEcIoBm%a({hAVr)62~S=h=$(u*Gm4nmBtRx;DCrMs zd>e5q`lrZIq^ORyh%jHz!q;3KA!NeM`TV189Igonp?3XTIrqMcwSUGZsC29>+&j?W zON~cRX?yYbc3+z>t03?Q!Ywy0_3dr(compk0-L5o`}S;aa!mz{Loh)@nG@7Z6FkTL zo#P}3(R#T3%lM_J27cP_}4G#fj`+WXv>yGMO;k^u176d3R<0;?{#4 zu1A9j0)?vD`LXb0>3{Xr{X2Gdo_(%mP$;xYycB^{McU^UKD>FF9vPTxw|pssKp+AU z0K#69K&m3GGY``DM~05~&a_&-ltCbXh@gbMB!NVjo5xR`>^t1ky=%NV>Twwu3}!Hx z8OBWz$e18#yj#`S?*!}cr)>fSMQ-Be`HE|9unvF9CPePUM=4{mSo|MivDmE(XChck e4blc!_NQM%u}21dOiNY(0000 delta 1042 zcmV+t1nv8d2;>Nm83+OZ00DFq$UKoDOMe66NklB(@}LSJFy+ z>rI5>SZ)ygMqZ!2oc;Ek-E(#g&c*Y;_UH=B%gglp)15d@4)&XMT_v26QQz7_$ zuDm38fOVA0lW2+}=}P0}-^Uww7so3@#dTffeZ6R`9(%?U^Qi62*jA&_h_6tYE~RA_ zSih-f(k^=4rGu{FT643rD@g_z183+mxeliJAwBr+QFeJ>e|2Ab61X^b(tq}}QEM5m zULN#%Jx%hT02Q@8IOfe}vw-s_CMG`kaNY1+u03A>yU+KSZQD^O3n=UGFrxt;Y&V!~ z;p;i>!^f`>7}1-cL)6sU5D9LY1RtI{{F^WC{jmK4-N{(!jbN7*U&xrkn5O5dJM|W- zV1Q}k{jd0SMRMN_$qh)FlYf=P6;$)o(u1U{m;93RPM@NfypYa0rsL_!8_C@3dT?Gw z-{&n)>GwnG3PLqcAAvnPS3#+Juk7c1`{AP@l01GK=d{=8oL;D7n3EyKcn*8qYPHzm z;bDQpLxcEPT3RypUmw8}wOVa@W~$gk1>pC^@$oSth_&18t*tG!9Dhj#g18tMW4Q2e z*Qo4+gPL}H|9F3-!snkZeDqG`t#HHbVHm3G4C|n)e5Os8TzvcGhB=6dI3Ztz&DPoK z+R9N!{P=U@v-c~T@6B75^?&HE#V%bxriePkM5(0m0QwU$4QB5=Yc$(u8)fm!AKtv} z-MO=RGpunJ;_AZF0!ou3UwGuu3>9;5<!j7u)}Kn{e3?)r zDTql#<;33x`Px# M07*qoM6N<$g00RMTmS$7 diff --git a/r2/r2/public/static/like_ie.png b/r2/r2/public/static/like_ie.png index d9accafbd9069f1f41a4eca02f550a361e5c06cd..2b5c6597b5c142bdc1080dd2cc332805acb4ad13 100644 GIT binary patch delta 931 zcmV;U16=%p3iSt&83+Ra00DX39Q~0YOMd}T}%zys={{H^| z%6h~k0005%NklO%|g{cDJ3)DoY<4E%PlV;%MlWv;nt%h@J&!nS97BnT_SxC?36ck_FbZN%zAl%`Fyc{OrjVY~KmL=OOM}!@Ma3|`wzeL?5%5nVWXi-Zfn!NL8;$|VLn zJKWmUefIj@hj%U?>woTQ9TqkK3kz#uEdX0(3RwnQ+uJkdw>EbC&c>D>>**CH00RRU zV-PYSU07tWF{0D&>m;EA(9qBt8d_`UkjiHmtkk>F#z{Zbf3<(gPd1K{kkN`OX$DIv zh-j#{^)2-HzrD=O;`);!9wc zczf6TyDyFriR}B&J{b0-DSr*lB3>%uf2KP#mJl zvh+<;Arg)rc=vF}rYFK&gmNAVx-fzfloTSUC9~b04d9j~_(DV5R?EqODl1qJK+(W0|^mx-OSX zh$Y4|u0+*=x8Gq>Ni-xb)z zo;@}vBc)O{%0<5Z_-Mf!@RHE{DH6CEJTSOsLf_&1%F41b zxkAd#^F2R)v+LEpbqyO}^tz`!H~fv7HPk0Fl+2_rl={npl9mR*ihbMgrGZl?)S7BW zrktOhH0mF$(N^u~Xz@>3`!AlkIq9idXVldhtryPe)>f-4H-F|QX^vEtm!Mcsh5FEL z&Ma&xD-_64%RrTi-Q3=2Hk--GpUA%bF@8y=}D#1&d$!Zwl>SJ=RW!J z_*?IPDl$&o910e?nKH+i>6SxVAYJ27x%GNIG!LT^Gw8Lmw3 z4+`SJf|$(C*KX3(R;)BqQWHTDv|w9p(`0AAlU+f`MLa2HH{jKOKtxe56-39G$tLy( z%PceR`^@t`yD%$?ya3OVpE(2=TOF7c`E&}{FIWs6%d!Ocgb+$7Wf6n~3;E_9<$ohp zSLoh6hhu%N7y!mui_(vr0VP?p;oM*xe5Gm`ozZCYu*nxRdPy8ZWK&8eX-iTg!MGEH zYgwqC4!Qify8rrX9a(4yen-hvFW#!)3O;w9P}YsXQ}~K748kam;v`96HZ#5!-tuCq zu6?n!yp?YqCNcPJVxT2E5$vl)5`Rf1W`i+)02>%%iND}1r3a_$s`oBXWlbVkd%ulj z`T-$}zyqbD8u3`tKWI}m_VmcgX2q&juU=VMF~RxA43|M@=#e;MKMa-oc$9#@#PiBy zPt0Gu8kX4i#0T)p?>@9%tmE!*=zh@H^uGZ+lio^W-nfkK6uBOjd83+OZ00HvdQ_7JcOMe60Nkl$IyxF19nH_rPf1A`A0Ib#UB}$s-p=>b)PGb> z&Wms>C^R%QIyyQoE{?;ov9Si%ew)HayWOr$Pfsr|FWXGPkwg)_yu94)USgM)mNqpt zaW5<^Y+_=9&p|;!n#xW@Zi~g(-Q8VZUss;hp`xN9eQj-xQ`Obg;o;$8ZEbBO7Is}K z!sK*1gM)(&!x$PG63^~zmzI_!l7G!2Wo2dB?Ch+(93LOw+}t=E4qE^r^Q5Gt%*;$r zrk|gmD=RBJ#c_Ro{rmenmfqgpj*br15=rUu^788HiX`cXZa0OS4pX@H^74X(qut%z zudlDUxw$npHCb^Td2*73i1@Dl03oA}GP(`p@<+S=NXkPsNf zzGON<8XT2TxmJv^DndO{=N1zK@4yoR>2Ggu`}_Ow6Z(8ugmPgftjE5!wZ&LJKR=^m zWDm%)aCim3;$0LKTYt5YO+rcTe+cC6?oRV3s$-3fjq~&KQBhIqKBL#u(?jl9U~6Ar zAA1@&`uqEaK(Wb}CjQIfOHpB#V$85tS$;LH3;BJ2ZDp#pg1cmAyb z0__Dt(ml$JHRa3vQJM89=itQ;L#ERI{tx4`S*(iM4F3SKpZfKZ6dINQ0000}%W!f`#BgO!Pm<>3Fu|IE!- wrB<8rtpESN{_KZmSF^G?xOLd3xn5;t@O&xxF>0S)0#Fx&r>mdKI;Vst0HcO8=>Px# delta 190 zcmV;v073uD0rdfp7$^t^0001>yY3_a0004VQb$4nuFf3k00006VoOIv0RI4K0049$ zj9if}D}QxKL_t(2&tv@m|33pIfQf-ZK(PUg#%VJd7#J8B&M>E=_{HS!Oh#lrE_oK1 z1b!L1G1jLrY}|H||H4qJQc_=e>F_O=|{I&9NiuQD?H X{2<<-*XAe!)WzWG>gTe~DWM4f{ZlFi delta 145 zcmV;C0B--T0mcE47zqdl0001>yY3{BAt-%lNklgPZJ3Bi*JUT!?Kt@VVM@L6WPE$)uOHol#Qd?zHTxC^NRaIVRR$5+LVP;)qYhP-0 zUu=3{U0YyaU}0flVrp|^ZFpp5XJl$^WpRCHbAV}ef@*7QYinz4aCUBRa&CEqZ-0J_ zaD0eyaBp>Wb$5G!cZZmGh?sebn|pwOe2STVetv*}fPsO5h=_=Yn4^h@hKh}ii;Ihl zovw|cw2q&!kfXSjm6e*W#h;#?prD|mxXz`cp{BXcrn||gsj8`|sj8}~ti#u>!O5I*6zT-z{1+|#ohME;QGno`^n?}%F4>i%gfKq z$gww7@bK~R@$>fd^z`)h_V)St`TFok&dmP){{R2~;%HCP0005MNklzQs3mC%kHB&QUq5Zm%7b?7+c(Q|$Oe?OetHC@a!e1H1Rp83qIS+f`TFZuN1 zTUkIU^ZMoSOSjHlxFPaqVQsBAlYhB+_L1)Aa_7{O(`SAh`x^&p#lU|&%%fkKrgi@2 zyDI=M?rd!7+`v%DJ#&Nwix63Ym`nj?2nyzVe1C8F@fOwX&0XEy z+*WNF7t$jlQ?z^UD{uxW$pCbykhBe4di7U&MMw`rI+RHaJjn=ja3lvCdE2t;%*yAL z8P(;sI!{rleHbKU0Wg6j88!0R=0#l^9T{EH#pc;M&kl=|FOMe6lNkl{TGPD_H%Y^zW4C>L-|P3w5gwC#;K(sZ)1&-XaPLx(%jH-p{#?1)Xm(B5H4RsLos;Dd| zBJt=+<=(@`{+8=2L1biPYHDgoNJv&zRzN@iI45{`{q!}kfBigYF^zruYIxkfexuak zoQjj}P!yaIOV&*P{P8bcmq;X4RaGG3 zbya0?VXJL@Pp;Qq0ROh820GAW#{K>MsK1>&K-AaQb9|+Sg@s{@Ri#o1l}QbtLT5lJ z7ZenbC?O#MrNTsecyxAlf@ZZ20;h49FfWFjs&f~ugCBSAO21NDGvRc&<^vq?A%zY! zq3`B_iez_WW@chrSXfAju79YgzzQ1e15!#{vN=izY6`hlllf$f}QYndW8k>GZ zLrPl^IMC~Q>7|OIb7xyyTRooMx#bGl;Cj~Sp|OGn$K`?)I?(iWosOnx!2_Htbk}4u z)z#IJ-(-mC!CZ$F1Ux1y7II(L*_LQ;!EBC8>o*VN=H_}ffq`7qR)3Cf3(pD~9FBt& zI?!BDb26DMBO`+@z?zbhf@~tiSdj{F^m;uF6Qxo~Ci(gKEV__l&Cbpa4Gjem5fMR2 zSQg$kO-bKv?VcTc@`IiqAt{-A+rzYDx67cp;0U@Bpn&Ol2o-2JP(p-Oo}|x0C_+;% zHaCTs8;)PbCi;51h=11U?-`B8@$qr2pos}7be1@auE+3l&qr}_F?rwB= zjER7bj*gW?ea`i~)8|VsR~w!_0UaH+wXLm9tyW_N4G#E_LT8Dys6247r~P?oG#bnY zY|*UPHZ?WDX^x*l%!)(^Gg+b1*i$V7YE$|>cs-;zep*?mYJa=0|Iqi&Vm4s~4G#E_ zGEHHd!ebU-olZx`q5&ugSW!q2p+`Bs9U&6lE*u^7@PuXCRD}P6Zy4*R0aNdr@1u6S zfbbd$4h@$jrAEcX33ccj#%8mjJaAumc{vjy^$60F#+?DGWP_V%iz$HFac_RkV!;AR0thK!D$ad02~M4Uycf;OF0r9 zbS+7tE!nhZ=iB|d8{4J~ zs1@VZ)TmviQeo)USe6~mRby0!G5KWV1vPXGwG?^fW%w8v#NC)w{Q^M1PnF3{oIy^~Ai$K_ zF2Ii2G{8Voj)8$CAi$E_CBTK-G9Z8js9z!g0VIHYPTPP0T?bzW-GBgFPLKtxW&t)z z3Q8?D0cNZa8@WXE?VauQMY!P3QIQgrQUS97h=mpu>WKWT00000NkvXXu0mjfmX}hE diff --git a/r2/r2/public/static/mail.png b/r2/r2/public/static/mail.png index 48f88e3bc40c84161b8a87585880d4a769f6fe31..11d09a11881c3f803af09c851e5b2bf9b09100b8 100644 GIT binary patch delta 115 zcmV-(0F3|C0k{E>7zqLc0000Mb?j=9Avj+NP)t-s|3v`*bpZeW|9%L`)wX~^bAjdp2DMeI5*Vabt(pK<3jkaF V4k<%fA9Mf!002ovPDHLkV1h&dDEj~a delta 143 zcmV;A0C4}f0n`DI7zqdh0002wd6TY@Avk+xNkl#t0;s zpi03Ud`iK_F(J&xr2(cCNi{AFNJ>#v1AzepiUuIt097+EO#VYaDU9LD07V$$Fj2S= xRsfN8Wncv909w~YC7zqLc0000Mb?j=9Avj+NP)t-sv$M0))6@U||JBaQi~s-tHAzH4 zR0!8&U;qKGRjV2plvb@$V9;2#VgZAe)*>L`)wX~^bAjdp2DMeI5*Vabt(pK<3jkaF V4k<%fA9Mf!002ovPDHLkV1h{lEEE6$ delta 155 zcmV;M0A&BT0p9_T7zqdh0002wd6TY@Avk|=Nkl6xKNKQtsFy#Z@f z2DgM%^(txxrm|ikyr7xooNX?4LAt+tBy_>lliWo+zw-z%0IZu@@Uv7ZoB#j-07(Z$ JPDHLkV1n4CKO_JE diff --git a/r2/r2/public/static/next_organic.png b/r2/r2/public/static/next_organic.png index 85e6a5907273fd3853d9bced29262fabdf7d3861..cb7eff7170d47a332fcd0e479fe32389585e6077 100644 GIT binary patch delta 201 zcmV;)05<>629pMm83+Ra002df#{RJ(J_3J8P)t-sow>Z7y1b>cv#7zvv$CMGvZJ%J zuCueVw6mkMv!>Mb{nhpT;{5*O{Qm0N#PQ$9^#A|*<Nkl^tjegdK@RdM7ow zWL`z*k*zR`*JxdHd(36(=or;|CbqcWKzX^>|M}Gehh!dH4O{MK00000NkvXXu0mjf D@s4xu delta 261 zcmV+g0s8)v2G0hN83+OZ008|mp_{QGJ_3K+Nkll9G9{g_2^I|ofAc^Ncm}Q=~trSp4>HD*pw4i@G0>alX$P6TK(opfC4UB_FD1UJ_ z?S<~I2Y}G|Tt;Tnfw*M@FN?S|Rx2}bw;N!1bq2~n24Mss-SUje(oXQ*aFATV8ZQku;AlbPQ1XUnZr8smk0BtzgyikE$-4~Ghn83+Ra007oQU15%+}$|+wING z&dtuy&Cu4(($&q{=FQ*u&d$%y(9+J))Xvn|&ez}1&(F`&)z8z}(9qD()7H_|+0oY9 z(cS3M($dn`+|t+G(%IkA;Ox`W)6?4F)9e4#+vC*S<<-^I)!ygT-|5xh>eklQ)_>aL z*5K>e+1c6R?Aq@C+}zyVBS&;pp(<;^O1ulq(_2ujG=H}+<>FMd~|LN}Z>Gl8Y?Ck9E_3!WR@Amxg@bK{T_wo7v^78WY^Yirg z`Stbn_4WVu_V)Pt`}z6#{QUg<{eS)c+RXpl&;Q=i|KZjDX z?Em)i|M>O)`uYF;{Qv*|$-$pk000AbNklvFa-v#}(>FIWPuj zzN7fj@bi%aZf3jL7!`)TWAj2UnwyZqarI106Vi8TRKV%2k!!UW=W`aOO6RTjOeA7AFEh{1HzF$RVqs%8|cvB<=p-V-1U$m(ve{VtBu zFpdPIy_gfb0i=hcq#7$8j$1iOl%Il8S5+PwP7H8y?tkk7lSZhk0e^!Oc1H;@G=a)8 z0iwI^>Gb4c2APb<6aT>xkrT&sM@fZi&|n`ThVpAX9{&tDQ}oBj!Fokvhw@~Y!9t^u zi0hgj<$}!||Mmwb%%24R#PLvA=@^Ro!MCAz=3%D(;Bge=HlXTcL?hsmRL}jvrk?tP zXWv8Lb$ikMM$E`v%zurFB!4P$PG+O$C)4w=8lqwyv<4|nvNtk-Iu~sWZ}VmuDSwsKVNMLirh^ph$PS(|!mSEoc98S3T-$np14b^4jTyoDvRAaQwuUim z!K0nSFHg2#0Fial%!TQrKqar}Z9=J+)>?V>?z5+r3W&DfC39dDZ2el#zxbH}#6zB2=`v>_`W<-PzVX^=K002ovPDHLk FV1iMc%$@)M delta 1959 zcmV;Y2Uz%r3e69Y83+OZ003_PIs}m+Cw~WTNkl#_Zqk*7+jL2nx{V|7(BMdWOgltmj(y5uD={{edbH4L+ z;~5MF%J7jct2A}V^J$vKHDI)F9#XwtKRY|qbzL4anM^L1`vxFkcYm|l z!~?-#(CUg#rvn}eMn0eCWw~4~l}bLJZ*z0={|*U58;yqbjbH;3{@L5x3x~tJj7Fn{ zLgD)Q`Wt`*9wI7{Nc4I=++|*Ad@6XPMIw=_t1IWx+FkwpW4(6QYIR28s`|XiweZVS zbTt%M1|&)S6{CsK=0{k6d3gyu6Mq$*Rn=+sa`o=-VrA^5-s^v?YW(GrYd>Yz7f#|> zJmw0s;Wq%Bo}SifH9W};*K|5P7anW7sN5Ec*9-U3{r$aoY4Rh|31WaD0An)Vv_$Il z`zMz-=3_n+C(?XgFL7A9xjQS>`!9zRJWx0o8Qihe~4-l6Ps4Xs~v~XwG%k#1mNwOj?{?hZ;tnsA;VQ=8|xO zZ6eLvG8-eKw=*%@4)N8{GDuvw!8VcRZ3NiwKfiQxW52&BNF)Zt#kJjTONBi=JhXPe zX~Y=Ucsy=JOPS(Z!s%A7pMRx69%j4|nUftnPuSHW1yD55F-Rms#PrDwAsXpJe~}RY zgSY{IadBaaJ;)t0ggj=%^VexfyYI;3PIe=kjD8U$Or&CpLs<1>GRYdd<`0ng3i8L) zN_;n)&9WA_t5_`3VRv`e!Clbzb^X3_+qCilF8b|F26BHQB<7~7;C~tHpl(uCp0GQ> zbXEjx41#BHnv6`i;zJbRG|&8b{K2F_Y48X9ZYzuIa|!)IXi03~1TgT1M{c&ZwlHWW z1pOZND*nJ&!DSGsxpL2FM5BY=Bh0LLka;iGBik=xlm3|s>HPe>QmIg3Boe?zY%uZL zw{J&f=f0sd8;Va=)_)R;*Jlsr@^sj37-Uf;`^MUhLH76e-@ktkFwsi0`hiOgz@4< zv);eT#GZJLhjA>S^_a@qDEv5wVuF4hOL44}GBCDAW8*L~x{l>=EwU(}i^?rB4|T`A z>q<>k;#hWkeC+r8(PNXJ;vz8HT2m+#g28b{Znrg9$BKt;9*+n0Jxj(CdqU!_QRlL` z5H>gU-hYgH2eOMHQ>pC6M%uCjhgSTIEKw@16EVJw17xNlx=^u94=U#xA`35u5_qLj z(d&z-{!y?+WBHDSuHqZf&&zM9-16CyAPvuGwzok-Qn5=zwm8H+dvC6CkdM3QU)OFz z;fG{$jFsm+dvg!XTrS7LpBas~f}nV`dQ9R?4u6CtkR(02dP~uV$40$Qv!hi#ft9{D z|18b3oB_@U3HE~?;dJ8a-Me?D%$2PHS0K>`r|}3LU+|$2)r~?G zHNx%2KTr%-=Od6H=ONiJ>&9PWWa^x*Wi*B&WIY8n%xKXHl zJQDn&Q2f!xw%e@9q6i)amtRDeolDkj;+XoxAmT?3xHav@Uep*T$+9SfYS&l@V1KX{ zjG(IOb5+|}A<1%1ZZ}8(cux+5hr9UcvKqVTDM}9*@BzUrF^uXrJ+?eZ5@rzE!vUCq z2b(a3mvil8`Ic-eSRh7wF8ZGPm|uPsmz>59?x6%JO0(>=Wq$>JoHN(26$^x9qO!Wq tRnA&B9Y7++NJY|S)`Ru=+kXNK02G;lM>#e)B2fSU002ovPDHLkV1k2c$aMe! diff --git a/r2/r2/public/static/over18.png b/r2/r2/public/static/over18.png index 9393e8bb82ffddd2e7674c13657f503e99dd4014..d5d3a4b236e77690f81e2dc19d3d4028f422d2cf 100644 GIT binary patch literal 10060 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 delta 254 zcmVuC!WGJ1*$HwC5XCDq+&+uVNh>-)mX^DK*k^Zx*w5}l#p9IFT*m}5 z_{)0+BNwOv5F;g(K%}ZM!}EI}gyJMa7lz~xgaA+x5I__GH3M}*G{XQ3LwGrg6M<@0 zd8L6|4*@l+2u0ksSqz6(Gc3Hzu<$XV`^;yayB^kTiG%Nl8mU zQ-OYkgcZsq{u>b%7 diff --git a/r2/r2/public/static/pencil.png b/r2/r2/public/static/pencil.png old mode 100755 new mode 100644 index 0bfecd50ee9f5bc5828f0c0745aa3e0effcbe250..0612654ac2b44a6a7c30a0f149aa5fa46d8d872c GIT binary patch delta 377 zcmV-<0fzp<1H1!}83+Ra001a04^xpLH-7-YP)t-s|NsBwx-Z_OHJD={x{Eu)f-%ya zFWah5%ac>dkWb2!P*^|{Swa$CLKTy39-L_{XUUOI%9TRToJ!E0S=5|e*rjUOk2~3@P~60A-K%rmu597Uu;jWg=6|$Z z=$Jt4s$uNUsq*2-^5(wt&u{e4rS#ON^wvc6&!+X+X!YD+_uIYq;mP>n#rWc=_~Xm? z?Zf%w%lYHX`sdO5?vDKQvn(B`UH||93v^OWQveAWAg!+7>i7Nq@qpy10001MNklQ?4Q;|mEn;6<@ zDB|Lapz(!uQTWWlYEmfjd^)y5;>xlTa0l>NYiWuJ2qIj_BX6WFio|E&=H(Y;!Q*ED XGoudlgL@do00000NkvXXu0mjfr#8i$ delta 383 zcmV-_0f7Fz1HuE483+ad001BJ|6!3KH-7^g;3_0K)Z#KM!W!(vQU4EjhdW9R)swBX=JWtO|zAEf}V>pvOBDFy=OG d{rflmly_BJ_a+=4odN&=002ovPDHLkV1gJ8uHOIv diff --git a/r2/r2/public/static/permalink-arrow.png b/r2/r2/public/static/permalink-arrow.png index 3523cd4a9d1597614359ef114ad6a1f77c8081e3..36f31cfc520c4d05141fb746405420f100264529 100644 GIT binary patch delta 97 zcmV-n0G|J-0hR%f7zqLc0001B235IV00jmm1{h#cU{Dl<03c6+LD?7#3<+>h^eDhhL+2>M6u}KJ#K&xU1>T%h$pgFvQ)nadGr#Hy2zu!=J=PyX^cU$DO2^LS6*X#z(-YA~klg zn1Vm1i3zmIV00jmm1{h#cU{Dl<03c6+LD?7#3<+>h^eDhhL+2>M6u}KJB*;P0 qgWG5b#{~!+2rI+JK?wuo&;bBu4ib}W*cR^q0000xU1>T%h$pgFvQ)nadGr#Hy2zu!=J=PyI gDTqWNxrKoN0M3+C5GFNr%>V!Z07*qoM6N<$f^z&ZlK=n! delta 165 zcmV;W09yaE0oehN7zqdh0001QNJICLAt--)NklHn5Ld71oIKWfM+2X3&a3`00RI(ks}ej T!h5O~00000NkvXXu0mjfb&f#~ diff --git a/r2/r2/public/static/prev_organic.png b/r2/r2/public/static/prev_organic.png index 23ce6d14831bb0a977a6872337abed257f487496..de704791345326a4bb47d3b759291970c3746b98 100644 GIT binary patch delta 225 zcmV<703QFq2CD{;83+Ra002df#{RJ(J_3JQP)t-sovNy#s;Z-^s;8=|s;Q!?s;aB1 zp{uH>t;f){&)K%IpuxJS!R7JX_Wj`b{p$b!>)OKX|Nijb$oT*N`v3p?|Ns5}|NrpV z|McPi_vHWo`Tzg@|Ns8~|Nj;Xc`E<_08vRqK~xyit&leofG`jPO;|FR91Q&bo3u@g zuC>Y?jZP=`TDcf(q71@z$Ed!V{1!IADS2y3qc=J@lr0&p>C(ex`c)KjI z>1VtV6_d!}=BNWu$YtIziA;wA4*>e3sXeJfs#FEGdyVVbh6JJ>hcg@p%vKkaS1n&% wIg_}6z;jrP>`50C3vSF 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 Y0h2DeG}2&%DgXcg07*qoM6N<$f{LX*p8x;= delta 2459 zcmV;M31s%O3B41L83+OZ006p(sdAAaCw~cFNklZZr5J-j zO^QP`)iep4kA=}(R0Ca&y-?CDp$Sp;W&^GtccsoOxoXt4*g~@^F-RoUi>A(&u0nCN zyKxDzQE4ouP2=o_q@e}Jk3w50_V>$9-onzMYny;Yk*)q$CD(XV7enscU$ z=yF+ES#@>wty{Og@y(JXonL@-_=>V_erTf%H+s5OmzNOkH|s7Xk=-hz$3}+tIj(qY15z_51Vl78Vvb&A9US zr{VL_0>my|fHmIv`t|FahZvHte92e_dg$mGOolD0q{?4t0w{O=q!W_*{eFDK8x<#| z?v64AvIF$Jd-v|&{T(RN3V)yvc=H?UYLoby8I581^YlkJGaw_nqXK*hbO-%KPpD^R zW+oPPzRHYF+hy!=L_=ce4Jh~fJU$)JpO9q*2lNhHQEv!(n%6odwYj@@Hf>{ zsg9QC_W`j#U{q$uJz064^7GGcwVn6e{*_UAIPG~oqGO$(pO1PRK7Zy*;%f#P!{Bf4 z2J5l0u?_eC5!pat6Qe)>&XRr^O+S75^dJB9sH11-fBtxQ)3!hhmFCtfv7gKsr>h;8 z`M%z2c(DKJ<1pbE7At{6{&~PsReKJg&C-0L+Ox0I^OqUVzLE`erhKo#;4&zG=Le=v zae=${ed~)5g@bZ%sDEGTfsXE2TlrhC15^qMizNy>Q}Nn^xmmeOhuwpt@nW5-|AXa1 zrZ?Q*nc?~Qv}bh9_}sa%>({G2zl<2STKY_#q8ne34U3yHRpKhE%S*y#P;PB)U0Ykb zcI_JV;q}E!5a=VveE5y6KOUVNKK|+mG>X9|PFHM|S^yQ|`G1PC4(;91=5LM_=(BZ~ z=x&RA?Ck9P_kWDj^_2lSJ118G%~3B~U)`OWoDkgS@6X1}=;OX`ANAonOjsk_I5v~2 zV3yHh8D15Mabj1)|BJ%ug;)myfs~Y#3l}a>ud-x`10J!Tr8UgqUh}ntIb@TM zHvFT%t*oL7FNxqv2m`Wt>qQp|$tXR1wD9J|OYi>d7k}jHg93E6=kloqvz*lAl|e< z6gHXcNYgsm%1f$KzUS3-3yFkgR}m>o}33eIHFMI$v?O~ z&vj@xasOG<`gR5j38|H0s6lB0*QCk#AO2eDYz$aVg|ZBU8t{ioS$Spb^G9IO10_&w z8h`%D1Z=fF)q&2z{rPztvP;ed&_$_l^mfICGTcOP)GiZMQIf4s7j)G0(G>-5brx|HTUCo=O^+N*PCq!O#ueW7yg!tJe&T1a*&LE52$)UwoR>IvDW9h_$=}7FRB5PmWo| z9<0Z&_yi>gRx+xyR6n({oh`6+Ak~St(9vtN(#rE~FVHM0vMbSwIiF_-v>3jbnSYst z{rt*uL}hT4h9V|U4Ly(R;K)K3C=os1xZ(GXwDV+0?R-onU=Q(RVAPl~c0tB{7<_LS8!(=1ML}g(Rr9 zyg4Rc5PKJlnbc{P$XE&J`-7v|4!#)jLSa+(j?lclXK<%ohb)Ow34haw#=8~m-A=9C zBSWXjyBEiNG-?prrZuVbsKRnsRth91qJX={s)yaxVr!*`*bFzg-hLs;L ztEeOzc=9;h=5LX-hIK^wFMCsy6VggXVGU3cTJcXk$<7Hu`0gz-yHE8{JiCiu`mX>3 Z0D1OMsYPj{C;$Ke00>D%PDHLkV1j(L$fp1R diff --git a/r2/r2/public/static/reddit404a.png b/r2/r2/public/static/reddit404a.png old mode 100755 new mode 100644 index 8aea5cfd357a32484767f88f042d3e71f5d9bfc7..3a6b89f7148394dc08291eebef0d65d914dcd15c GIT binary patch delta 5270 zcmV;H6lv?~V6rKY83+Ra008&Sphl4)H-7+!P)t-sMMXtWP*71(QCwVHXJ=<t*)-Fxw*Nzy1K-~#KpzM(9qD)(b3%8+}+*X z=jZ3>=;-tF^Yrxe|3v`*P!IoHAOB}B|8qb8e^394U;mbG|Du2Yt&jh?pZ~Pv<4cddti(3^M~_|B->7AWx7d$P?rV@&tK;JVBlyPmm|b6XXf< z1bKpNGV0<&isJssLF$u_-iLoIK7TLB{e<}8Up^_w%}1m0a@!fm#Ycxo_kM2&G#%$% zffVigz0S&&j02(LoQ6WQhYU%!1POT!R;~kj zP~?}>wS{TttP;M~v~%L`2BcMzPzrNA7kBpl&(Y|6RjVhry@0&G?*qGER7UoFq>49i z+6hRjA|Ydp)#n)&I{s$k4d2`W$XQ$v)bmoQmdTxfw3=M=>VNblAWH4p2S_cqJ-2go z(1PUJHE~0bliJm|og;o`ntxq`bZ%{}bdIm&`2G>160Q3lKrZq%LMDCQMB9@c=}0R( zSICEgv2X?L3bX@|E5Oa@r)^A9q5Z5QA#BguM^C6kMb0|_X*W!VJM41^p?FXfiuU7c zg(`cbSpE@0D9+ox71B%ARv_I@q}G4*$S;i;W8DACbq63vU@SzkBY*BkxPu*{!Gtiz zuF{B*M!mKHIT=g{W9%+*ix0OQL{U2Lq<|Z_@hk4 z3yH!o3_}8lVQ&I*19>M4#}*(*XhePQAP4Pc;&Xr$fQ`tf06E#I`u;#(w7a`c0@9sR z5kd$lilQj$PXOth~K#}uU#Gfw$wIdl;R z;sa98kY@YexlAw7;6~IVp^9^N&OsGVH02BlYt4a7bh)*QMEK8s+Ayc1!eTV5J}e8+ z)kj(Q^~MT8kbiN`+z;yW@x=%hYE*%!BFTbniA%Q5Ae{9A22JH4_YmM1#T8p^lmRjf z|4Kn_06!M5h`|_ZVnY%ch>+-s385JoyAc6pYmdx~1gXOwqAv53?WG%p^%xx-O3%}h zAY~j1A3YJc>PA2BV-6r?j)nVe&*=@3a$ zEy)C=mZak~Se>P}G70LlQ#2$%Zxz}^AWE+ppc44L=nSl7yY`k8sf`)BAl0njE zNyZ@e>4fwg@dt49;@~y&Bx8_bqUpWejoF8ck~5++Bx8{CIAJvhbNv1F`u)exKWllA zUL%my8h?;+I%k&zt>yUh{qa72{B`Yi`P{nJlMq9Y0LbzB=*QQ;>sT(Y;YkQgw93)O zAkawF*9SNLbuC;zuec=)L{#>w+t1G1tKa`Tgz*dbfPdfK-u}R+|rEPseO$S?Ujnvcih@mq`W%EN!veZE}+ z67B(^E(+$pgXjOs*9phtRr6rK#&f8dlxj!| zB7f3`wB|Eh|0jK_IZ62`|He0v>!_~en-4z7YasaXP5xMKYQg#<|HcF6&4b-|#`^^83I|lis;`pNZLs)Z=rHaOPVeE`C3xDhT_-m{puP~5{>9Im*gms~6xiS4}tm|4o zQ&+&J{69xn-kaQ-zM6vQH)GZyA;e!)tcYL!n$DnpQ<-YA(iels-tjL(*9@{brnVqH zILCEjh`t-Hpx+>yd}|PBDG_7r_rJn({WNspe}J~dTYxb3Hn?2hHJk9UY<>A3TYneC zhw4ZdM|gdGeSLk?e^Q)2?JjpQNN5HEA8+PjZFO4E@&+; z#nxsW?AnQRX$q?qy2aW=^x!*K;5>ayBJZ`rcCq$5~^oA@)5VTuliT zibW#R7gH|oLFZ;lnn|6EVMb)Iyer_*Xu~TXnI}shu8cK(QJ=;dE!|#Kihr^t5A0S` z1S(qA?3_Ya;8cl0Jazsv@FzS)7L6Imd4a<Nop2>83_7=o5irTwU1dHlzbX2tfU^ zf{=|tx-4_d9E0S1R#<74^I!u)_^U9f!)gZMrRYiymxFW@Lfr1zhe@FP^sESS7Q1aZ z1QC8qe}84`QV?HUfY$;^Y+MGDkB{#!HLObpgW$Edy2nx07Ip{{a8XO&!b33vIgFB- zvBSD#{-xM#M@&F&<5+Lv&i&;<%C*Bm=kdBh)&a?Etgi{kY22nNTgPi8YeyO6&l38rpz}DVdQQC26f+jI8!lmLTjZxg>O<-xwP- zuXYE*?$b2vg(W^hmg-@{blK}TKX%zI@_*Ix39(M9Ig9e;xloZs?W64dB(Y>+(J6_L zF(r-%YRg_Q_oJgGO3!``i+*!nZol{*v4}892rdl=q>Ed zKyLCCgP#=O#zedvR%lUk*#P9MSi|{A$&K{9i|sW-Z%V5lBsj=LL{-d07&^M7t`qG~ZI z$e=gVIkO`<+*bxU%m=YDZExbtpSRT3ZoMH$sEKNFUSK@62x8aVbav;vGRRT4Js130 z!4QwS=KAG)Q0Bfai2lL_o&C|NW)X+_oo$<*J@^>7?U3O)0;#(p{=bL;&+o|bflxziZ2ezYn z_r>d?D2k%E$#qOJsomCjgK*IO7>1!9M70vZ8YYDsfON`oCDF{}%zqv#)`h$a-7wDE zfwX&H6^`EPyI+ZVV(YCz+S$2`aiD(q?JS)d^Fv~n*Xz~AnS|j1A%uLBZFhYo;mB4O z9||%&nZ=&F=4JH6_5reFQZIxMo51PLK8Z- zRs>0H(v6!u!5%^=h)k|_Ou&D~0z`}?!m_kzB)c!oWa_DNkWp+GQm8;DJ&lR62sf@l zn$gZw57NZ4$WLR&q4gk)L3)D~13{=fI zU;;9DCOKnWlZiP$K9gQiIlPZt&k;Zab|xT^sCif?Aj6G(Q6pVav6iDd2_`NoG z4rFkVW7R9EbblQ13Ib$duo@T$R%ZrOGdTmCYn}BK0F674zRIINnvUo5G1IwB4Rs-= zz|l!3pcV}ZGRR4<++J-@wj5hTk7{YV#n`yepzuN=6(Etm{ya zSh5_?f>2GqJeF=?#~hum=dM7cx5s94(~dP6&57(SOn*2Uc#RFRGFbde$8!^cHLoU~ zTb7mj{kMDH5*h5RhRjMP<(tP)ajG2qB~#+v=FXK{$?bWHE>v zkl_ztjOQ=nAtT#R!9ipk2D%OaiA^p;DuqQSW?&F02Q#Rr(}I*nw>lBQIFw+JQp#bV z>v|Ak0e=$dH?yMc9wIZsflF%8QNl4u$y@(S|Fg*)M<><92}or=AvwTh<)2Z-(V3at z35Yrjg1r8!tw=Dx2|yz7@QhreyfaR(#y3Xg%=V4>aDny2~Ts^NJ`7W zJz$PNbaGA<4_N|iA@}j=ga;A9askqq zfq!%p;#(Q_RX_siBkMq7SW$0c)}&++2%ZB;HHQs8?8mc@1DRjh`8 zKHEzxLrX3L#o3_dy1vg6S87q6ze|wTdCopP$h&)E)~j}>)zejKs(Q~d@F&O<8bT2@)+owalcjD;vWJkgm@$@YHB_FHO0q9QBb2m_ zu~w9QYnK+ZNA=XR`dp*e`};3^f3b|~zOQqg>nxA+I7hbow$0)MB?1IN;x5h(p5S{Q z1R-{dA;C}E<9jv1H}pPRH(LlApB&xJFa^IWCO9$@y!MAC91M)#3)zP3586w0i4NSi z*K==R$f3Bqd#xd8&3`Tqw%*CpLI3^vv#C>$f*Hj^h%PfFbUBj@QJGG%<9eldNUU@y z-JB4Hgpgrof%(W{hzTjVG0K@b|GzFdzSm4F6PJuft=WBZaAE?Nqi0}n;J^XN(}yAC z@wkMw-R|4BFHBtCl(MMDVXZbWHkNP=iHV6xNl8gaqR^py9o{9v?PI^%lRwWSE{sc; zQ@FyJnHm3pfVtP!D+jcfd3@vG<=eMaBUfkOAcNlFVNY#sZL2mZkz&a5f)7t_C>Z&o z^FmcsRpH9u=xDc*D+q4gmMvRuANkj= zUAuuX44l9H$b>}Lu63vXulip8byj^ZsNdr;0 zf~|vSR8NzP)uhQqtd4@2El>kIg)$?1+3WqW`Lc^a-RN5WQ}Ef_|h^w~P9qb6+$<)!O;n8>6Ys)vEEHt4*E+Ie0IMW}nRl?FzYX2Afq`=tD80bF5 zIdwpu#Ef8u6B$g8y<&s`av>dtsiC?Bqa`?#6=xtXI{F&)|Rf44klqbGqyFZr?% zsAT562F1TUAzSD|4}!*%tOg_IPn<@sNG8VHb4S%nYLc#FUd4h;Zy>jaaKaVSG{ppU z(XpANmF>PD_#F zhlw0?<>85wcTg4+&e7q44bio?tyIAUADrVzl8t=RSHFGz+KG6BfAta5G1T53RXbqX zzmaM*@3rDLvkE)8(Ny^HNKl*_x~sc8uwla4*KK*Go7i8+nO~wxtsGIQFLZ+o#8?Py z2w~y1*RDO)*QCcYXbCG&TnRG;C}wm7Po9uJZ@XU5%0V!akd^H>Zm=*izqd#&99jF@ zXWcB~?{*Mx2=(sXPzqa*ZzO4W{?lnE!MqIj<_T4soGBRBt{B;luG05?_Xq*v*lzW^ z(3SarVg{1>XAgh>5WwqH{xplJ{m8*tvm6aoQQY99Kg9x#8ZT;IZxdSS;PXP;wGET6wNzJU6|Sbjlzg56bx!w`+3n+$bj!!@ zl;9fn8SiJ-61c|U6MAS-By~gz%(Lt-j?3#nI=PvdSa_M*>W7=Mw;j3lZRKH&hHo9b z6l(n_ZqSGRh-G67=MuPYo7$xm2j3@1t%#=u@eZs{SdU}%&0<`haZD`Whtkn!^=94i z%jdc0iHy}zFaijEwdpv9vAwKpPWb@`gn1BcoWo%8lF*;eaep5` zG8DvRAK$Pp6s^|b4b9~Ijqqd-Xkqp_9C=kz9|Hb*%dQL>H>wo`k=&G{OAGtnTXo8S zD}C#){_V9~h_YB=3{xxP#uet>t#)?ENh(TbGZhtYJ^d->A_6_=yqzHkK~JGjmIf?| zN6XKdSy?#l&Betp^A&MmW&XnUgCA9C2-}{j@VHQfc4hHK3Uq3k<{SdV)Q}-x zxTfT#UEuM{+usTWv~d+!s$JUo4|aE7h?TF-ivl8c8U=cMU;mHo8DUyl8gq42joH7z z^SN4vN|m~>Wd{oT>1*TQ)#vIb*U*;>!)#C?aY5q*S+t-Dd2m)m^=)(MyY-7@ zbrn;1ld3}W{DpMgefI2GcJm@qtn|`9eCDM)$)AJ1!1683I?5VWqQ`zU-B&vV|3yF+>@zkf|8{Yk8?_w2*$$?y9l`_8$~l>VgdU z$kY7MZ#p#k;gpo)+dVmpXr4+~T-rSd35!9e6grS3MgpSVk#|^|X(`KfV!d#=xIjZ7 zkMF<}uT-d+%4SVb(p>X*`T4y(dz;x(dHnJZ<|VwVC*z~Ok_9v=hRVd3Y`7KM+Rn_D z`S*cxUzJ^Pl@Svvix+B?@6B(0Lo!2C$Xyhq<(v}bH2a&`HeanZ@D;%(eQbX_$bB4F zVxAmqWlwbVtrk7zE7WLZc0{Q`Hj<0Fw3{FVWQTh~BN{Xp@sApW)K_AzipfYqNkZ(C z3oauq7%BRw3q$M4RMwqEjVd)XZ;6@lm=@_cq%o_0%h6h)cgQ#zftISo6XQubMvWGN zGZjpAb8jc{wob$W<<_wKdjR0j8+Xz;rx zaS|DEMs%!rp)fI&#wTgEy;7bDv#uqCiP1LYpEpSWSHklY93j5jG-M^x<6S&)LH)ca z@Drm;RIyE@?2{5)atQP|REP3SDEd)hrS&vsZ( zv~f7tSPIo)zmwVEXkA;^(vo22Gb9J!nnN?31b*f%&Z1*vq-Uhw)!@&cHwng;cso9# z|N6oToIqxFi<6$a z;Hs9mmptuy2!)xW_uuoUj+vRvf^qvU->^$Y%+9rtlMEzA9hM=FOCvyjzGAg1lAWjj zp=SttQ@{y_wwQG>x8iIEE+Y_v(bUh7+)&d%R{fwxRfl~9j!0!XZ_t;C+@Qkv8Fb?M z%Plr$$_!kUK8*Rkq>1-sMjyI{Ue>M(UPTwg42- zc)7_gDtpmlR2@%Qa_Dq>!ko->ev_btIxhV!FOTG#pN1?KXS5cauA|Cp&@6}5T@a6s zG!aT;x|;GQRq%4Sdq{&gr5m_~sNivOua!;Sj*WpTd!Y8b%(WJR zEAy}HpiWJ{lRk!tQ5IZ?C$nVXmA4FCe@p4<3 z(Ltt-mr!EV_?{;IgR}NstXjf>vmSzk8+Pon0HZy0Xv3nf5!2|O{yzd-H35- z3~yiGhAu3X*{6I6r(-x%Z=s}mx%r&ZRB^lgC(cIdD`;|ig(5ZnzAS$|^|0P5u<+ur zdb|UHVKWl@8R>TJ=`3qWwr0nzVIF>a$R%dvU2zdo?c2`am?WfSXI@>WI8>A2@Ztwj zp18@%qInSF^U7xD!$9Z_lTqTH|6FYZHy;g&&V`ChX2q+A6rS(l;`7|$M28m{v%tyb z=CRJx!d9)wu7I0P-S=|OU9^41N;2;D2}7LQGg7_1+Ij{UIpKaNK+ThiUDK)+|K3j4 zj^JL7qMLued4z6Wo%eucwZ<6HqFH6s(#mj zi05PoDS-k9MdvZ4EI+1IZO*q0z45(e-q%lKL?!LpXLxbL_@ITmqvtGH_dJ{f59IHz z&0#Gr`BWfR5|Eu=VK;rb*d73BOHb2_Apwn_NB1yr?|KUY%>DiyG4dHgKxirPdb{=y zQCOXVxi^Z7@3MU^4n1^lXX+R?Y19vqxeo{Vfs+;bRN%i=fiGp<&C&gzpZv7lrIu>j z`gWuEhOZSxX#$zXV>UIOs=LAcFlzR4+S=CpUP}BtIsNF0L05>-Lh`Ego916@7B2={gh`&U#J1DRM*-R8(pY+y|)%| zZdOn@H;K)>{CuxZBc3EfVD~0+@wx2=Sa3HY&}O2QOq+|v3Qn6z<;ooo{~h$LrRFeO z2V88kepkCoaiAP&BXcP^Xnx!X7}~&Y_0U~}ezNAZv*yPU<8F(i4FrHnuHthMFa4Pw zGzt{zChY9Af3me0yuTQq`}{go4s%A?35=I$01I3hj~_o~Jj4i6(!T3a^q8#@mzGNu zzy*Kl+pyz%;H?9&9LYOX>MJ@DwsBsHUIVs#m5xbJdu?jim;bH2z={Gj<~r8If6y}p zYSsq{y;U9c!+LngS%uUsKiKNi6N?azg*9O-zZZ?hj}n#xWrh-~}99WdvU`AC)E3_CrTmk)sM4 z65$=t$PO5OUixJXZ54b=E#1jWQ{;I@-xvs*T5!P3#FHmB4kKi~%-r0Zdg9v<_a~tj z3JO@)pE~T?r8x2al$^+p@1__!U&=7pF4_Itl6H|}LdE6v4G#~40;K=!Q<*D z|6Ty^tp%HFbCZI+v}nJvu~?)hJNP|mIOd}+9U9UP4790} zhoD?NhkfZviE){;HIGI-U=2ag3Ta>*FiJr-i9T^8mNi z+_1wM0AZ(f44nf`D7JB$r{50t_9VJtYoW=*$f7G1p;#D=YL;p&%XJDTrq-2x3h|f$ zq0A)M$fHKg+uNIVc>3eBJGkX%qob#jz9EAXUfnx$nj|YYB}Xd(>{NPsy7Somo*wM3 z53E)`8Y_I+ds0PNxyH{LwN_BS^D_S)vhwDwTXS9>Kz?F_5#&VTJEpZB7Bhsx%q~K% zt#XZHh^v*<5!2HbRd92ufw%Ta#t(_Lo~TBJ!n|gd6hw+pQf)hl04|gvkpvyErd@_( z@-oxSjfTmGi0@fLlCBG!^YkY=)UJ~ZU~*Me)`2fBA5fPNBzlPF1Ab#jGtjotxx-2q zBUjN~@T5zN2+QIoZzJl`D|D%);p@bAPL~~_;kmg0$$uuDMq@C0LqZ0xqa>v0X8Uh; zBKRg*k)zVwvo*V8jIgNn3fv>=ucSiahy#+FyAjOQ&~^Vyv9lP@moN7$I9(gJ5}C%b zwjumP(v{w(U(2ACHs)_WshY7SNYVOdD9cFQ8CyQ+^CN35Mex!`0IAiKe*;0|7@jy> zBAA{`TlY0QIe3wV6ny&)uJ6-!E5!X!c$Z_=XMIs!_qLc%5qupKM5P-?CR1qQO(Ow&q#EKc793AQ##2RCIX0gUw3AoC5wf6CnFw} z3xE%L5YjcoezNujX|;o%{*HkjKiRpYwGJ*npg@sI?b6|YD4&(_E(W1N=|?)ImdtuZ z9=~;(3sFu8tO>3mo#ly=QlU#y_oee&E1=;1aQk z!nA9*m>7!uc5M2^&fN14j@Je~_n}mnrP1ETZb#1kr!Pj)#{+zvNf)L~oa8+H;k?mE zfvdJ<>((rXwW7~mg=r}N4XK$LOrDHpD^2yhW?2|`Gb7VKgv6F1URhSOGkqR_%$BF; zye}y!={PScdG;oU`~q4+oqNdHJxOhUB2g=e_*fJ4KpFDeRzda!CHaoSlGBYE;6zz6 zL~fk=Q0C(+nFqhjr6$RQnA_0AZBy{*%{G0Jh4v5jQd(Y-!NObV8B_V24N%mA9OVm~ z3hc)Y+ahoG$xG}C)#M3JWo#c8%T#`Pa*hjFQ`-}h=%RfL+#2d5J?y?*S#S;)A7|QY z>Ky5ch5Ugyn?3lALNV$_Z*c0&^=ayws;e+KgV5nLwi+?KFiViQ$f z&W9`}kAUpksU9dU$=nqZl(Zo>`c(D!l&-gkr0N2t%=1;V_8F%~Gr3C}`P;gD7sRjH ziFEEMOfx*yJ6)w(q)kSh2#(Yu1cgQ70iXsd=-|t%2LB&OhIi!n6!ws5K+3k|XSa-6KH_r4XT& zKx#66t64j!WSwCJl>99nGo@@1v{{)V(3O#TmaA+ndX>nG-gW7&*$Awl-%@7e*gnc) zrx2VWS(Y3U%gXyDXRicDTNcQLvAaNa1|N?*zs1UUEzh_xy1r}7i3n?s4zFMY)~))r zQEvYzR;;vx%V!Sw@N{3yw8y5bNAQfQZQFE;07hK-%M&`!t-ik>FtL#}{yv*Y0;}H} z(4O83Xe6F^252v=Tept)^|HOmW0#0KFC#1ib0kZ`MKr8GxKn)4g~}}dM(dyr znQiSo+@pey=0OxV%1)usicBE!0-FmsH>YFuo>qzjzt#(E0AzCH*^^86?go-Fdpk0~ zF&HxB*>~oyaW*!$N=r+Jq;dU*S?015CCUKmu(bn4tUD-^cV z5UEgLbZ~ylw+-X5tGpYwGoc`*C`-v>rBlu^H&1yC2R}J(!W6}wCn<($<|@FxbH4r= z9pJFvLqzc6lwL~Ud+(Dq1J;bowjP9s%#gpg<{I`|o8t zx<=wb&d{v3=pt$Scu!~J{zi8m=EqR^=DT5cB&+R+Yv%+%%{Y&`#a_1{M0BnIPmDy| z1{Ak+3I7vXZoGEPmdgh=$do0IPpyI{U#NZRQaYhoaWV;i{znm(>^O z8u~{rGmVU_H#bTjN?vkDCtD;1yD{2!I7k?Z?$zWm=j_?+L>(OWDrl4OU&9&-nUd!K z&$foY>G)Ybb1FXeDMe(A8i6mSUSnJh1R+_w=3OxCohhvFuVyI8lyDEW^uXn<0Q$Npi zf11tMwd&ZfoA9+As+< z9-{N!NRnQ6;(#6p2jr0>vtt`@6*AQM$I(7%xj=OI$=^Yxebq)N=ng8A~)^UQ0 z7Hq_sh#SHq5mLs59Y6_Prn4FX0*To@Y)lhO=OaUp!q(yqHX~h+yDsr~);|nvMXCN$ zO0Ermj=)o^-hS~!{nz!g#h=gsH7gE|jI8yJ*?|KqiuoM&2GD%;y3Oxw#4@RJDG&NCw zzSzK;D%=WYw|uCq>ckkDUA^{rYodABM23tg3%Kvh5Hw1C7LWDUXUXT+*DpMe3J-iT zgEef#ezh|YK^znDlinG3?w(Bi_Z3VD5?Ez@1-&zP^@h>?-$4h-7POak)Y-+{Bh}?! z5NwfR91SkHm^p5a7|*tE2^QIgNg(2@L1Xlwpl3aQl^7`!PSOpp+U4RB-jk=uuGSTE z^>K)KlIdzhx_%Edh_L~n@?6JnJz)@cx~NFF?hRB=f_>GGZIcRnN8Oc}-Ku+B4LWMm zf~AVg9$@X^j>I1uX#WIDC`0n7+;u_moA@oLaX#wU7nQ-*kb~YVMNJEfBBjt^(~$uv9Rtx^VYnR|OUx z5X)Pe7Wqo7Y6#)tBM?$1i_(-yPW(j-`4KyHn-Y-PLnz|U$Ug<`>>nO_K{>|%Jqik6 z*TytBTw0mf7mK3F&wR(Y--ly{K-c4dy?rM&?j8$;dvM;8twWKPwjI8%P+VLrAt50M zlKc}$7rZmp)!qDXe7Vl2p1%e0=w*I>ei){(wzl@F{#TnI_g<;#&+Ho*$`9 zGz~Qg>-7MwC@F2jei|}!!<3f^htbhmk7L}2f-}Yq5GPe_2vO!U5o-}gajwsP==QOm z;;O7my_&wES>d_DM(Di=GMA-0F8vH-PP4*^6O)plGk$KhnJ-B!FCI>V#^c(iUAijt z*F#su;u?~0uk$-B?~5W$N+RgQ_i`lUN`fVrSJ0Bf+Vb=hT^(!Vw|ds4?UV5j&*jFE zmqpcu1D?3Hw04Yy9N*lwjT8bsqp#YbT)ngnh@m40SMgC__54JhJl6;}CTG4P zA*Mfr`^wsg+#q}QY7LS(C&M+Vxgke-d#t}7E2rqaxe2r&lAv`Ek%J0k#a@AEC^wLp8EgH_kH=L;Iiup(4w~20=i+F=KTi4wAbLOTPX3pIkwemI6 z3^X#=&p&dH31YBpE6nug+HNsT%TOGb&hJR_5rHjGVY#AhZEd|3xgD+%oOmR+kN>To z6|TexK_()Ic5rR>oj|m!E2jcNf2#CwAYXGJhqguhs~)#k3OwF3AjeS*T7G7Nc-L9p zP;wZL4Z8=lH=(fs&Z+1&)tW8)2XV7a@jyi|{{j;UWKH;~0Bn*isam^e$vLhchcZkA zQv(if#tebAYy@wt90{fVgL;fX!TlcBoKZW{TJ)l*dsS({f(vftnRD=s?I5s&5q2C-WiZTgyUf5*ccnf!vE2Z3*+ZqH$6oSg$RU)%i$^9N+?M1J)r zJ!6xxIzBSC{k<{i`RWvQTH0|n>vCO?>7+04GlPbRwQpZs=&-#pCz^)%-*6PQYKTg~ zw19Ce&{20nxQSkL>qY_?KOnrTv_IjZ>U-@~o}MVr)#hg;?Vh4q7KO>dqH&+ob#}0+ zUC9y9q+OsYQ<--Q=-Tc|&ysaF8{X=-XhUFj@% zu7YXVO-2Bd04a$G%@AW#P6Q)Pjm~uEX73++k7YAx6mPKU|9~#WG9-?lh+;J&#|>wF z1_Ui)t_Ae%L)D>LIzHLCxg*miKxuE4J|=HNs@4P#ud>Weoi9bI zR<8X2rIOf=F>x^W!F$==^0Wi@j&Y`_$a8lZ@|WX+X3X(BKeHuPsyYuL(n-DK>maKs zcPSZJtYZj!doWf_@GQp$viHZld@e!Ws4!usvMxWn>$;f%yZ|?#SH8&EF&zqr=clO{W~yo zgj|anC&*0}RmTW5%zcI~y^;_C&rd$;d>0}~$v>Y0-#}X)4t(OZWl0)mea2KPh$(^H zF_4U{;WaeGsoa+^>}TFRv9Xr05bCmQm=D4bYda(C{&x<7?@Zs2a#EsNYo_+JdZHTt zf`e-T`we|d#1n1SCLcs}Z}H;XssF14ULEdB6#tdG-MZeBwN0aTH}*Awx6{z}K|obv z9df*naX)@J%2D)kS4MKtM_Y+iRd-H(${Q#=_-#{T^u5!D#!%HU>vcIDUh?jWk_+qEaU!H#wu~|vwv9reqe=1{C4~}9`&WDK>A``>@M4DZf+tQcCXFpi=jRd z0Md?cmHlOl;>6IiijtF#o^?W>prQ99f1rOR5aZw7U_R^D{>aQOlkxU!-|{fVqx)I| zik#xQSZ%}h3*%tp#cd41Ja%Wj>?B#8VF5=6dmJ-UZQR1~t*_-5b#&<(ntF~2u09qO z5`Yh6KB4=2i1oX4^$!it7#j51x%0Y7hs2XynXUbr@m;Ju?~LkK+phU!0V4g*Y8C4n zZPh1okCCJ1u&bgr;#p6Vzyq8dT=ZK`9qsunC+Zg=9-FKXG-m%&T zd2!IYd*VN8rO;mTCFKU#t1IT=P%S!<>g>$=^`=eRAVqUbnDKh-U->GbutJ3#hGPJo5gUt`URN*FK?;0ET zo1x`8d^dR24{S?1?!m3&C!Ly`S`jelQfh*PDswEFQ(sUMDg9ZK_+x*n_7`UwK*<-* zR_kl(ma54i1zDBxmnyLrj$F8D);}ix_<-Zl8W1 zfDfVi@d8hBJJxcr5qWazQfF}m|(VK+I6JOsAXfnGRRm@V^Kak9>5J&;nMfo zu;zpFReYtq3@{Gj<}V_Zi7FZZ-HQsF;loR#YV z#0YuNSSf!$2*F|vgr?WtzNZIn+K~exkaNTtMSChtoQ>RZBz1R|~sHoVbhEt|coNsi1X%w&` zSN}qYRZA1I)#&pQwG{&W=v{5Z1j$*c-BkSb4f$2gz|hU?>h0jBtX+MGRS&%TI|MU? z$Y-*QZG#6$nCp4fZ>-HgLcBO8&Yt&FDGlZ~x?#vUExAt+*0l%`P0ev-FtQqOW9D$% z>)&DRGlyt~ohux7AwJhBS}sD{4PGa{P`1l=&kge$8Ni6-4{o>=e(?NizD!rE)A8|D zX4oV56+lm}^u;N@^AD(DhH9Cg#jpySI94MzngRc`46JGHTp(&Vlew2v^8`SK`@LnSiM7@%A zD(}g%AdN8DuU6A}sOiL8iDV%dmm3PO5`&|o#d&0x_6F63L~a6>&HtMwc{1cz^`}^s z5_~IE)tRM*3Dl~0Z981w&du%GwF^PK&eE^M9{T^pfCYgkv=Dx)+Ke036W43Xl9)qS zSHIX?YIUr5@_A{)#;|LC98uq;+((@yhefmXwZ*fGHUQixH4-+jI1I=Bjs9TDPuOn3 za(eSwJd{>*^@zF%&DY_H+|@%>9FvomRlY$x?;oY5i>S&M7G#<>C`S51h$WBWGff23 z;h3wBaW^j$L}|Wd)yGeBFFa^9IR+xKcc|y*;5K`1eGAUT9?|1E)`j?mLAlqaPC{IdY$;<(MB(GE`ge|7UJuK)l5 diff --git a/r2/r2/public/static/reddit404b.png b/r2/r2/public/static/reddit404b.png old mode 100755 new mode 100644 index 312b2c0c44eb9009a17dc18b71bbee2c070e3720..a9259d13c06ad50fc0db049ba0dc46fc63598d82 GIT binary patch delta 5668 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
  • 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 KMNUMnLSTY@Y`!`G literal 13046 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 diff --git a/r2/r2/public/static/reddit404c.png b/r2/r2/public/static/reddit404c.png old mode 100755 new mode 100644 index f3c8f010d80d619b3253cb2c665b0c6cb6102084..9d5acec4c9fd331db05bcd5923246c66b29167ab GIT binary patch delta 5372 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 literal 12402 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 diff --git a/r2/r2/public/static/reddit404e.png b/r2/r2/public/static/reddit404e.png old mode 100755 new mode 100644 index fd593c58bb46bcdba93aa6ae98d4c12c8f054eb1..1446367a3923d5680a65340ccee3e9c1b6610cde GIT binary patch delta 5998 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 literal 14293 zcmb_@XH-*Lv~G5G3Ly!ElF%_Ay=ai46qPPbMVb*rLlG&$0R#j*dJ;l!21Jb5P!K5r zg90M9O-DsVkO(LWh)S`5q6hn1@!avoxc@IdK$ErCnrrs?&AD?tw`?LyDodhJD6*@I zqZjzwheAQSB+%erTjP6If9zo%#<+|Y#NHrc9s+A zl@m}B<&V0Q@zuL- zplI6>XKIl$hkWVG8TFW$7-dV+pN9uftJ_gbW$37kmWka+3Ey?72}`l9AVg6(2mgH! z9VJ#SbIkZ`EiH13JSY#B%7QfdIVfQ@S!RoKpjwlchP_M+#zz6 zOK=(km-CeEB(vsfQ&UM+*504rKJyI@yc@#`OacP~Yr?I?#~KZ`u@D0i^9yQ7?x#E5 z3t}jp%Lxq&Lt~5bOr}4Qm>sjTv)k?^{oz8FPR;DlMR@-gdYm*v#>K@Yn+x$EkN1vk z#ugSdrXaXpj$>@hDy#5w5R)QD+g6j?$Jyjxsm}6%zsHa!2udy+rA*&z+;lNRc|_ap z4atS)9qBnITG;BCDr43oCu%Q@83^ytB(XD~cV1MjYqodQ`_fGs9&=w%`X!~dZk1!| zqW745&q10b%lgCjqHPN(R~9<0QY-QrWyAt)G5qKmL1|M4Gk5gI-0Uo* zLoZi0(`R*{b-eGY1fU?ZGGVrxQrGeIJUvdOx))L1jeYW@N*E4RYRi& z#oi+;;O|#j%YH9IKov@vl@RN7kMh9$lS?Z|SJIhL4y;e7CgupN5MtDu1CP!-O<((C zBeXjxW>3hLPH4Z4=sor4e3W1oX4c3ED2;`A#is-Q+^C4eHpw!VN_scuDmG|Lwnt!VvosXmCq;V=!m+8OR-qb6ZXHGAB_rXY@0+fin?#?2|0^sL`rzhcBi=F4H@jEGwkAJ6zo*BUbt&r%S>NR*>V$UJio302 z_qgZIO7s&DqsH(@nqK&!JNJxHkmJR4>=H@13bw%MKT{-_UBr;WA3sMY9cLTMetd0G zearmF96}|reO0EJ7MkmwcD<6K*qVKyqUWVp0hkR(oMVTKO>}Kc*uC%d-b#m{S%)~y zqmHEV&y&Vx2Kk&j#N)?Pl9SOed?)5CP|#>O+Q2N5DdP{JJSfTW7DWW&)PC0QqTCG3 zD0S4+!#9>~ISdP!X=!Qfb9OmLfDg|k5Jz%gi=5bkOA`jHoUP0S&+NRs3Y(P4IOAVk zn_XMfZPavFk3LUz6Z_^2Yt4cnbasn2jnUQEvYoDSvoTD-OrCUzo8`X!=#oIY&-0qU5JV` zNO-0Zq1S(YM?e5kQc{zszVWc?6&_q=z$$@VUAAq?ALhy9JVZQKKUS`mP7!3djupSS zxL9=bC|C7vw!5}x>D$i}Dj`&lZn(K+b~vf&OR$cB}#r;a-1(V!5Sj?7c5**j`w zMj2i>n6*Yb?702_tvs-m);STOUkC!;`IHXLk*D_7NvcsD9jBZxXr*XeB)M2|b=L`M zFe4iHs>6bJsozeW*dPxa$D@!@(y!+<|69HL9>Eu4%^%a>*vmXS>Kf_AJv9Ou4YPN; zyifsN`+F__lclXWH`IHQ1q0r$8W z5*0=$rw*!P`M@YjZSf>q5B`f?$ZjYkJD2%EJne} zcQY#)eTxqANd`rMQfB1shU$kSP&c|QWo1E7f21D-<*B9xRImd#_E(uqhi;i`!(96T zS20*cILl4B#g(`vwNT#;f3K$x=T-l<_ zc*;b=={izu<8ST4=L)yXl={k39mv1Y%^H$G-)wy)jGj*p%kdhCB>Fpb7tNJbik<$q zQAh8!CC*E1F_134i{5n*E$6p&t90VQGG5Op!yN=p$MUX@=5k5nfl0ZQ{8<#=jAOzX zO|HFkDa$CKJ!DP$l^wGLHd&`UB)sW3g{gu%*tK+nbV>x6yl{*OG8G-2s9hL%nvwSJ z%Y~*o_8pm#9i3-|xZxNBR)*7c4U;~7`>so7oC7iwn{E5d}q}_DyUJii?X2O=!^rVYn-8;}Nt2enjzn3>Ed3)wwr<&omlJ$o z8*nDKjGx<9+w|g*RB*cLW}MO4?6U)1yMIAfl>BGy>r>(Q1d`Id8cvPe;2vmB`_^Y1 z#nz~+634n)*zxomI}>#pOLA+HK#pzVq@*HV!^fpbLqx@08&DU&VJK-(`Abf{1M4h~ zxd954SdtknOgFp1_|8X2`Og^Vr&Trkm!P+*C}ZsFXw4yfB{SngIJOF!%6bOWB;7T9 z=NU|!>}5mh8vg>DBha;FNkuZxX+J-evsto#u?Je!u!f}gUPJrek<`o)+;lNc!o~P( zZ1V{Q$RVC}5~&7N22Ez<{z;6&EwsB^6ZiMT109_}G=@UhpV2B6fYw>r2N_isN}*0? zC(0kB=hY?3d3sSDG5SG8P4BW;Su);~_`9kmHIiOL2P-y7cn#_+(f*~53k`>>N!uS` zA4_?>Xf=@QL+hs9f+gsKrS~Ty|0>$ngBmYLl#Qk58M3q$>yU-dE8CV=l?jYGl+leW z_C{Z5NKRPU>m8}SK2@IioN~%D%WO``bL%hE9J~n zV=dQT-2Ml+<;ciL*$@dvV8hO9@$a8qvkl~5{`&Q+W0}Jt#?`dRLA(5t2M;OR?1)e4 z+Uv{cjKW0^7u0?=#^1$9k1p=Dv9z@8qtkvVC9t&Ylj7_x2(Yy;UK*sp_#X!iG+q(g zx1elMMJ@Yq4|nO6zg!?uDAy|G6lt)9Uh2Q-&Tl!)uFq;Svyv=wMjb3Q>m+mAihS8t zLh&_{dt{=^(o;z&uNChID?Y(&+6@9?dM#z%H!u9`y-j^G;MOF`>+_R zc1*vL;w9##3{5IZMSO@Ja;>RJNVaoB75h>88?&JDV3wOx z!!sb7X(EO`^pB6LFT4XzLsvk1xAIn@eviodD!;`*!ZY28>PC!X<;Kde=v;E<&=EE3 zOq)+cimjHe5i7&(%ZcH>S97R~wRw0&+FGgdpUY1LykoITafIoo8SgqMs+%N$0p8RwUzA}t6aQGHoU`iY_1DYahq$c(|0sT;(;Ucvu)R2~->~S=L5s@wFwKV>KBV8i&G4;SDb`Hc0iE=k zQ%~&MmI)7sU924FXp@)OwHh$;+hrwIaoWy$=azeHS4qXlaQASWy2ond*0WsUKg&v0 zyUWM(H885cucYjrN6>;RW=O&jn;V5u_oW$EZQYF6sNjyb^}N#nf{7op?u7@tjziVyF>LbAW714upX-__gqtEDo&Lv~45sVMi$Nt5J^9*x) za8haCikq14@%xZKE7Y9VjlWUxx|LP9(xSUKdgU90wI1~{dLb}|pSYs33NBS+_Cmb9 z77$wEo}^d5`!qpxm;2?ezbE%*7stwbt@fv)e-*vXQLvgeM8onOerGg7&_9nVG?c}F z3J|d(N5y6MZ3muP?#vg3BKCw56(+Eo6`OT12W9P?h`yON!BpES84urbJ|NTlibw8J{DiI zQtuj1WE$x5yD1~FTdIKo_gNn4(?mh(+Ck7!gG!h*`r58P(t&lLsj;z$_B2U zvM%OM_+KDRV@;J~W=2hy2F#<)&CDpKFVhky$siGXexU-7>pQf?=AxOM!Gv97GN)>& zAEC*@Fd-sp9OLFqt=uoUq-?Cv98B}a$kBuaM-qhq{cs7efR)sGZfDE$Tl&;5U6ew# zgvq``~F3FcLp1feFyfvFU}vMT&|LTGHD8=>zH|nM|KUriE7eJK)&Vp=&Mve zt-`h3!KEIPN%DMui3A?Wt zzNhtrkmt`1JE^*uZ_ScKpR^jfxV8764QPNR{-j zCa3yTOU7A|cPZ0dr+7+D3RvX%^o-kk@Rl!*7aroXp}IH#nekhM7VK(sXV$BSJWI~6 z4V?f-iFgB&8nPS>PWH;#Qee!Q=kqylA=iKsSo=_BF&3UO77+6I>z{$-@o>l3&4X*( z{p2efo%X+wUMf}L|Fv-tz%Aas524h;H55$OzC64H{i7VM=;d1gaWt$H)QFmtXN=d* zL=dmtbeb%EV#ljxWYuI_cEfabp9hmSnH*fFU*?w$k2G~0YvBeU6mjq&oCd6SF{9bbcT!O(=TbRfL`r(sw zg~s6MG1$S+;(U*ji>wrhl)g3drR8?na5Ur9wkBgaCSfq)DM@(9Ay3DYF&?VSiZ}&*&$re8 zrv7cSJ*`K?*Lh7+6o9%!Hq?S8l)v{RvcQ=*OI z$Mqn`&+~S^DvL<2MMW^uB`Mg&>DF*7E_*0kZZF^LOInvH$d1s1K@zA<^RGqg=(8?l zTBbV39;RGQEb8xOV+`$BtJOw4>{i9I@6+j;@sO_2?R=p0iV+=HXXSuFnRK~Hw%w^S z3s;}z)WiZAkECbZD53&)j$&~f7YgCN$=d0C_FY#TC`?6E9%g5wuVhR+<)y%7}CU)mw#nq@!N7}wzZGI)s*!g)2C-Lip#*ki@rzT&fpzu>_TWd9|givXK z+qVk+%;Hk(qU$h-Hy|_$TCzR7`uqXBrEwq;MP%$erbDRn;B-?(mUdI#RGa7m^b|_8 zXPcuA3>a<@RCEBJ3hEpo8rudl*+FX8J5nbt9#~j6RIPQbksQp;tzWU(EL7J>Q(6@x zLD%`V&O}d7A}XWx@XyrqRcdkX;-RD`cfw=vwDN@SkGvN2P_W=lEwr+TkE4lo;u)iV zYNt?9PZhrIG*1&(-DSdsXVTnD_Ky#s$k`Q@1E~i2p;M6&+bT{Z$`DA%FSjxI?ONlC z07kDI58g^;&*vtw0&}ix!B`v;ZDl)K3M8Oh@WIbWJx^%;_O^GHSbY5%hPtM4*Z` z^J4m-=O=T-Oy%^q(+AGRJHK`!RSB zSn$%pN*Opmk?rm)Ak;?EZBb+o72-8#r1@D%!^JJ=fW=-5TOuPr;|-#PH9Ehr6O-k4 z&p|3C!z0M9a0FAv{=H$CbMr6S$X8@|1-{gJTJ5Ja5Wp$nLjDHS^%>h5&dq0(83xNY z1Jvy7;$m6haQ5EMn(aNmY}H=m>iSOJ{v^8*bd@+;nMfISCRJca#T!K1$+iPS%dYv% zc9It=ZJAzxDmQeSTR=uPW^G8&l1>9Tg=hM`FJJ@>l-6v4K=j&;3g}{5bCF`y%=&K$ z_c)D*Nu+Gm5;V?gV6>8EYWo-3R956g38xDmTzIO85#8fYY&I-+@7v;Q3lxT{8Duh{ zHhMl{EG_?-gA|!w<11x!q3@Qp#MUviUsb})7Dx?6^4i&Z(oXqp*H&UM797izrTxmZ zp$>_}pt6aihX-;?(WF3EK#m6Ba%>oG>zIF2xXk8@huDYlnWn35du#hbAUu;n$i1ks z^;lDe?yA`nmArA-jC_S(8R1SGsYZ+9TJMHMUJwVZ^7doG@UoT#GyMg4EU+x=bFs1V zF(x9bteBdN+g#1BWdjw!1$G1@2QR4&JVkUQQYNK5lqw6O(E&DyS8i3sagY*hx{#Z{XA&)ht zc}Zm3aDW{l!QaGbHsC@1m${3BL6XJt45G|XIR-~(C`L@;fUVsC{<+D?^=K3mJ#|!` zu^J*87+BN}fcls`2h7lVj{NY^3uKMzNb>plwjn!0q567Bqx_sx`goiIW1xE1PYvKg zmERKbCKNF@cEP1{uyx3KPoOnatcRE57x(Z$&vx+*3evl6XKdCc*AbscT?xY70!L}NW)88L394Vanf(GkoZk1YIWa*Z$b%YmjjFP zy9Z!?rPyvWLp#!Z@{lH{X{-{0WaL*$zm~@dUQZB{h3`|fWo@OL@Tp1V#qt;cNP2E& zE}V~Aoa)w!R^SR;SCF{pc@+yBc1KD2P8&E+Z%xwU0W?@Qu!Tty4n6IA>WCfvh}uzs z&XKOYXyIassTpH$!4^|w3}QY*ZKGrot|i+Zz_Vu4ax{$XgL2)El1{<3Tb6l>jMFlf zHn^=06bo(Q?QD;&JlCkXE$ZGxusOq(2|6qzV`}mE8x(2wE5pj0>(&j)se-SBZcGY$ z@7Eum_(m2(>y#wOTuBuyPf!u9>N*=?IsvZBbat`1*4Bm&$#@JoTV2%JqsU&;U9)D* zfO4dRUJwMf2bJRSQRE>hO?CUGJFCi zrkiUSI0EhTBSi73+eyiP?beB}d1(uQk2Vm9mmOpH+D0}ji6EpoZCDBt{`Yy*GIjg1 z9Ifjfw}lEkX{S~Y`QB766w!e)1YPcX6P7ya;xm9qIxn{d(}R;~OckjI_8`T{bm&lS z=%$*m25A0(E>&4ktZ_qjL>PJO&$oYfD1Yguwx?r9)z^=lB7;8Jh9L5XsazL^M3e&{ zX$+90e?;+Evec+D4mER~8JMrFM(sfN>7%f}j8a^C`_? z&kABbWvW z+)yTF-o!9fRnv4qx|EkzYCUmT_4Ndk$wQ6>}?UX=bdX$3A2 zOd!VhGul0ShMiW_pPRvfC$qJU1gEV9odcZ_dQp1fJOeD6pI9T>@n+I&c}wU~HfNwg zJyrb0M{SyrlaVM=x?-Uk_Gy3_^`(7(qdH*L*YpfSy~fw$=hjWJXZN@Sjh=A`~5QX#80SzU=5wO@eZz&)m}ohwFjE)&AOfk}1rUJ~a#PQcb2fR#XPR0q(g%wR{Cup2K2&K$Six~`g4^KQR2f&$wQBY7Jgg*E(`GLRE+`9um z2>0&azdt;j7~2L&5Hrcj=SuQo@J_0xDBavA(&2{^-NGV?v0F?0@amu-Q6^$fRP18n zD;gifla9#}x5q#&YAVXgxUZwSfE`OQztLaVjE4{KRrO#tg!KsPn!-zyWUjfHyoeqV zI;q^ab>M@#@PzsDT8&`i9h~9aVPUW7`|2yi#+?e9*$fJEUC{me2#rv*cMc{RH|_c8 zaJ~y2#y=N-#0qfaPMi^Idv?diu!Xf(CZ61s6^!C_0arCn2tmi2O+~L{N%1CL9q1%D=h{n2<~DTRs;PN- zO$En+bFBb3Owyxm|3e7qX(YUPwKO~A?(Y5ww{mG|iLrm<;&JuC+pTGDsx=PGnS#>k z*YDr|RLgH?9@h+NcNZ&)X6WRa8z^RlT0bUjx)xS(_%Bl4SnV{?I^DQW8wy zwBMi*EhErTUfGt+f61`Q1Nia_O1S>OtLccYu|icXF$0}DG+*cL+Oua*-$$b#1bIcd zyDat&63OLX9^VqSL5;jaOmBeA#cs*5w!_GsU2iDZR0kB5vErqE8`}i(;WmpZ{yB$j zD*Cw1to$S=!$hRi1Bq+bHCn)Rq*9KjvLY~}l9_dw4)b7)e$!0LZt0OGG_8^O{Tgxu zx?_R7rVljpj*8ej(A!6GH8hTT@6n1Gk~n&i*0LHN!MOD%!!*Wgm-=wF4(zR^CbC8i zNecPxa~7<%v?z|G$9lvDm!RI@OdS|Srp;Y4XF)6wZqHzTSf>$B?;RUcRwQc~-@x>k zxpoSDw)%nrm{zNcNCN!!H~Mr|od>q+M*C1N7&y}42^rX&6$&V4oNz$1CaJS6HElzU zB(n$#nCgv^afHXCjRUjxk@maUig<*1PL$XzX{j6+};p)ec_@(@mLbC$?5MW=?}!B_@q=B zjv9H0?!gqjGiBYn_+CqzvE${eE9$9p=rpaICWyMc*uQs3oNY+Bf$S1yXIlzLiYAXE zC0_36fgvO~|LtgHc{yG1?2020RiqvQ~pcP1Gnc*)krm_(S_u>WV z1b361>Vg=pj-O)~7Nt=pkLbdun+Jm|>fcl&NAx~eHH zhYDc%>~`Rs5aMX!wOXhMGgRL)Jo$2pO{UNcp>7z8i&~(ijHVu*+ z9cbg_yNDfS$bD-@D!VA|=eI<&MbPbp>!^aFETXN*GRUF@45N@ z8rKeC-xbc#%;4l^g2_C30yS?Zy)Z^WvnAQ}@m>K2JlKYP$YDCgwO@PBGUU0M5r~$v zT3o5dkC3=;odD)e%|c~ql_z13^{tuXoXsXvbqrQ~dl`kJjsHj@{Cb@4S2Z=dga^JZ zqNLbQM=N78!aG<;z+@;^_W@UVu0%+`Ai<~tBX=&Jvin}!Fse*8;n_9h{qEoMl}v>V z3T#J<%AFdmF=>zOiT`M3US#x9^aeuv3$cE;2gC|bac5$NXp5HAsB>7Ozl0W6M>tR= z1Mbli?$k<5v}`#2tO-UcE!ZnT)5dH`mZrr;SFG4d#(Jzk{NzQ^Heh%Gk$1S>?a}JC zK^giOW?2K~f5KfFVo;^3%iH}R_v5Xt>-vtdlJ8pdyB)21dYk=9FU(z)UlJF+sRBb< zR-=J^%`#OOkkH}%#00`VP>N#;A@7m9#|$Uer!=i0jZF5cN|cYM_}H$EiikK@5WKv+ ztfi|9pL~u??}?5!HZ&yq;CyT+-PUi~v`J3xD3nhZ8>p{_|5Ge~ZT9L2x~>xBt;mA} z9wu*8BgV}*XZwkxiQIYSE-*s*8sArF-}m0$t8Sb#9wGq*x*^B}@jK`h^&=Ijz#LyO zdF80B?EE;Z&p{eK{9P4je^$EFc-11(lH&TV3lzrjML5A-eCMBw{0)TZpWa{KIcQwo znK}F?k!ETeC2!aTVh})2?kMt9NyqvY#N`x8juvmK#J@rBjiA(ENBmUcH+`1g@?V69 zh9nu?vHSPK?g~>1SHU5_hEos`LEAL70;L3`=IO@damyz{Uhx7~O&4J7S6$932}LS# zZ}&sQT8-3&&l6&}2xOSTGxjPERimS%{ly!Hx$XV7G|R7;=GmQo#8gceJI9{p`0GjU zI`-SV2se_2*_M=IQ%<*ynqMhsjosr($c&vfG_yyISp<3=cvlPo*#iI1!+qynUkG7b zG{BwzOZz-1JSjt-TYb4-*L-U~QA=lwvaA7-<)AH~97{RF+CcK6s)^Bp=N2Myo%wY1 zRrrP3?mUIbfb)~xwZ+B7>FJoz?cK<83vz#H@`JW>pWSSM3@Zu5CrUG1fYW9rnM(26nRx%e)*G6DCqWoZn_xD4Vn%jw&S)wp~EgQO?=8;y?})Z|JTANYfN4fde@*0!Ff zT+WN7BncD|>ktk~aVxLkMV`WHI(Mv9c^P@H<+*pOAdvSsW@21+nhkJ*!Ij0_EpL#IEm||b_ z%5)?Rv?H}j4^hXOo6Q@p$FMV$sM0~bXKRJ;LnQ|j~dBvYfxBFlPMUADemPQkSjlm~`3q~(ietf;57PbkwqNJpR%pLK8rpWy;+fco7PCY_l5b7?k!4?bBWzh`!)?!-5bG3Q0~ox>;LQeQheyHGyi1g|Q% z!~W^EG(+D>Ng8Wp@S-kgEW$^H^mE*c!x{HJF;&PuCw@bs&8=VdpuDL{d#IO_1kD%Gd#bqrcq=)3zFx35Guw&T0Jg~OIH+b72391fv z!%6iK29b3={%f~I$&;fFo~X2h0oNPSovv~d0DkhEKxB?jL?)u2YGUr;1kpx!r5PQ* z1g|J_s%Q;=Io-**R(Yh?{m~T12iZiEM z)2olw#tvUuGU9@s&}(2oA|hZJBLNOp;Ofki#prRj0ZC~$_H{))`dMY-<~sCT{9kxupn%DFT{ZM$|2T1iqY zLKZTfHD_%y8Th?iLHmTbWK%2sg21E7YA5o|WmX>C54`E}lW^Pj%?=L&d2DoX-#!~{ zlhfa?0TM388TGA#YZbAi4WMP)b5}_)T1F$w?7Y{_d#9O*U^h5(Y4V6;rumD(-wl$$ z>XbJ*d8tjz@rKUdLLwCk{B00SmU$;~X)^uAJvU)kxfm6c*vwpd%L_3s7|3;Y@#a+R z%H&I5%_#2d&jCF=v!zUx>dW!CsA1PU&mQw?j^A3)x(OaPbhbua+jKgq*A-~oy#*Jh zkA7o#qYnPbG6N(s9z(#{Ja3Lt_`!~|^4M?JP+Re68B7xu4AfGhwp?(^$@om#A;|g( zIWfSPO0i;bA8(Yq;(us?conL8N{`v{x)j-zc5Jh(YQZXfoEX_j1;Ey|HS0c^Gz1Pi;4lzp8&t1)XwAEffYr@tMUl8kzBH0eP8q;gKi@x`T6Ss?43ywVor8CVM^kVMTj zh<#B~qcvOCoFyis7$8r=&*g16(vxQ^HgC6)&fLR{6^Ft#L652n?CUEDZ>xd=&D`gs zuKox2$TST|U)i29+H>9w%-I)E>eq&omP=QMf@eB)gNjOwgb&Vo-l|acB24)oa{4_L ziIM}%BHu}ON=f0Gw`wRjc~3EH_IeC{YrWJijFcBg>u}#}wBG19&YS!@;umxde8&62 zL@|h%u49B#?R?St<&v!2rPc?0Ov~u3@Mq$G&>$!=4EE}VY-WOtJinCoi#l(sZ>8#P zQvIKI2RGRE>TT#wxg=yRU#o)s&cFr~RDO?wZk*%~Km3zg#sk*rrzJ)y3*~I5yR~?R z?XiLKDA(&tmT<7J`HwL<$8-cE>xG!NqlpI&$nC3zty7b??9=_&btz~RLI2_4(E;Xh z4PIlsv%NifWOrxTI*{Ni1|XH(9Vf+OLDksXiHJ|eo9yRBJfS%C(=jq=utU-O5ocLZ z8!6sOmLX%vg(^$zZ~aQ)Ro1qj5U;AdM8`V+l6e~21o zF-|>Z6Tku0ei=TiseshWSx587zaeRoBmFC?J5w49XQYzFxZa~cD+yL~G+97%ZL3$G zPvj@yxWYf)!%QGcdsTOob3saI1y>#WJpTk%dE4seF*7^6W5*7Nc#UIl0hjXs$zUNt zg<4R6O6#fyjl^{;mI=QoSwFh+ID-+%f&03YV-KdR!H9J!?S1-1R&Ax1h3)NK;X zk!eGDdVQh9Gf(3)O^~q&Y|AtJjZ2c^yst^+!@}(3Hb!->p*YQW)bo8{ivz!|3GeCv zCWyiNZ4?}0aH+BqV;K$F6;gfUy?hW26n}%);glU5ZW5%gMMrv?oBer3>wn&StC!pa zZ3ZbEc-?H9t(^EWgeds|amOLNLm6u(_C94o=l`{Yg&Hw3zP(-eZyCEiIj$on2g9{QUg<{rw{&Ba@Pnl9Q9Ov$Jz@a>~le8XFs%nwq|R z`O?+ZH8eCdJUl!-Jv}osv$nRjzP^5NaBz5dcyn`edwYunpdfXLkd_Qc=Ql_{S!ARR zGRX#+?S(9hL^h@(zZ4^fnvv7J$h9BHgP+Ko3nUVmL?OwIg2J|_rX+6|ymDq`7Mnjt zs!U7^d8H($r0MIaot_bgL_VGma@-ngi5Zq_*NoBtHcwW>nk|kT(mTGzP$065fhOh< zD_1~Z<$uBd!hhQTRR7ER-{$|G`Tt*N5mkhuGIQU^sGU2C0UNcMh!hCRGTxBbg zld+Qjivp+o#%{3OEs7y>)y??$6*4LH`u80-`s%mh#Zxb3(L0oDn>=?fojv3*eE*f| z7T&7f?mhm3O)}`rm7}%W_%y_4qX{k(Cuv_;s73A(;)2I*>lJTmxmn!1Oq3o7Sd2N0 zvNzm#4t%*u0NQYpayi6!h%>$)+lpmbHKYiy?yfVe@)Y{@Hestd2bG1cBYWqb5g^>? z74y0<3Uqaq*2oFDWlMCOqTg1+1T9%%HF>ZxpM+TFGSMteKDB8QE61yR{wV#X$p#f6 zHJ#h778n{&xjlK~6hlHWCJWF#t=$-Nw_yO$=zjpvc$v|@oeo8uOiA@1j&CMrHdFe}cVjEi3)L@#+b z)8FX7TV!sTrY|$QpO=27nF3IzcfE<>X~$fA%hg0`Rxr9!GRhNL2Q_Ik9NvErVo-#O z>VQEft7!FY5}{QhL_Hh55cXpW#tfPz8DC#2MkQAq&4-AdYCA*}vBHOqvK8*;IUx^E z_m?JCCPOSo<&v+94npMZF(_M&+p^FQOtp9U@cX~p)tKB?bzJ32wJ|z{*{)!Zn%u0P z9!=ufK?0@%NIc)0Ioc_CShlBwg5^#${5}w0kGqmf0}b77Ex`FwI;98ssOKX1eK;JM zkS31rZt$s_1}+$1c^g{Ws&yp?d~8Wqh6;aTGsN5R3_|w$+)J8Vs?n;#VWb<+9L>Qn zJ6jrryev?t+vehGAXw9Tp>;~|yep$;wS2!JNdnMHYKm^94I&7@K}^iSOHAZoqWi*i zIo@On6eTy_9o2vHDY!(Z^|NZ-N!{;RU)PV>IF2M8_`sb;nrPw%$*q>??J6-0P{t-i zd$A)+f|bDyE^%*$Rv7A1h^BVZz~CEZbKskB^(fQ7ozW8*JsvjPw-)XIZpIT=M+7$` z9rgIMQUXXg&T%1{p`GG5#BL@)ge5-_(yZysOy>?zxa@|*_OTj2_6N?XmtO0o(OwN? zUC^xix^XMa&r)-cx`N}L2GbfRDzmW=g{3L)Bi0$jR^M&VkQ%ITEe{yaBvEF{pg;bF z>)%j$s{~e~F2a_9^Lp2NWI}Ru1us|(&WK+WFPUgb$wCvqOm{KFY%&iO!HS&eBWOiF zVor^d3tGN$Q6S5+BHFVKeC-*1RLv02BVdv$9g6M61M@1NsoVwb-m$Cu&=*ka9WC3r zU$jo}H#S0E>!daSlv?a9Kl1iCViNW@Oce?2ESo$>UcRsM0pJ~8W<$>nb0dX;?sOfg z4?JQdyb_kxZ6L>Y`}L@fd35|9aMc&qO0e=+I+Nf-|cT&>*`UMgPPBOw7`% zulM=1Onv4q0pPt^sjG{*@(v;#i&ZvZP&zBN3Tk7BYj89&$Mf}AnR;uUcYm*-@B(Kt zs-`|=-)N9yWkmg6w@B-vfjTuOVOZxq$b(+Y^;NK=1iKNK8CKG z>vy>B=wpRHvsM$7gOzb6N1TPDQqDv4m0>e^XAaJf0`RKEVTJSaXmdu5bESmZsQKv# z?b5LFwdYbWK|;LdRc;WSCWqAkn-#>)#?{(r0lulNOo`n(zcM{GTP&x(PHc8P0T(rh z*Rai)5{DfcYrj9VRYc!|7oat`J*mQ-43cI)(KnmHVYtM3CF)!V9n|0<1))pQ!O+kb z(9!^lig6TYOcuHV2K{q@!53sdHrW6aS?Muerjr5^^0{8|9cc|Q@~UY%c%uZca2d*c z-ynMZdjjr6RzI7j#Fk4BcTSrT{1Nf8&85g z==j>)p*dHg&6gz2G^TcH@)vw!82gGe*rJ}&lxX|0=%B?fZMNg#_oVYYI$k+h07 z^FW5EDe+fsBV@7MtPZCQTGOV?Ck2?7pO`HUI9osM1JXgQ6V{~;8g8@SY6Sws-A!%Q zL5U4^o68hXEeNR>7l}C!Q;~b2rGxTAUqEx$%Qve`R?G60UXc-uP>&*v4NKylciL;MrNA$-yGkO@*Oejj`{7=z%n>H8&WukSMlcBHQP zHbl_%ri&E{*bc3E-_tKI9{1GvKw#WpG<|1Ix(QPl-`$qSrO|~ z4#xd0=>(p#bKA!fD~#(K>@GJuiEV|CgYhvzqRpclF3j<|$}6x{HTa@I*qm+TKt$!< zluXwa2anl7Ca$vi#COu{@z2XSbR9L%m7?){^=8O~1nkrE!`--|qmgUn0Z&fa%+gKKKP&%ig}k^UhH5GZ zG#@6la!pSk>?GBzwyCW0(0s`}z6)l2)`1-45sD9LQ@L`sf2)%@ai$c%zwMyoc$v$B z{203di}=I z(k1kmvI>112CeFxC;$m&c~C^SF*^ERrZuv$;Hek~+cN0kM%bTrfWul~L|r1VqST?b z+`K&RxCWx0SA@%ZH1|)ha+Ri)Nx5cN9*OdC>sh}EXb_pR;HkYOTwbpXB^Jn!2n}Ha zlBlJwgMdV|wnRi>Agq=3q*HQfjee>w3F+G}L7O;u&$vK`3{F}}AWJ0`X8m%pY^1sD zK=aQr?x%~nyYWc2>FYXJSo)%6!!%{ox~d3oN`tT3tX}#0hQOb&9_wbC$W^Jn2c4yp zYOie@qW%xa&hLRle;;FWrdBp-K%HU{H6m%_ozZ?X!!b#ny40|?N^4Sx8YBNLVI`bdLsT* z{u;Y@6qET(9C7i+f8oW0U*xPP6(`!=wHqbCC`ftas$e7`tlA5mQJU!acQtZVmdlJM zvi$Mp&h7naiT>l+MFKYP%9;QnH*c516W?Hug?Ovm+shyM=;2S@*=*S^84B0@glU@t z=KV$vZKbYX20ym;HZiyL%2?g~ePFn`Xuc2?c*sH?#p=?qY?dsFE&{re={4}!N65twjerSf{ z4&kqCSYz?Nl_bCaL4{dY{O#$N#{>9;{j+U$9n!hIs0|J+9h#hp6}rNb3!kYU|A{Mu zw5Nu1nS5+lh8a*yo#QvL%RdI3()9voop~7!fsRA*mi`)lDaoQ@lOTZRm@-5fA=>4rJIL@n#voJT|Nz94Wmx zMMqw5Z71!?1+h5mX#LmSHl>YegRGWB&{y*pxSremog?8J4PcxFZgazavrcQfR;7%w z!{M_)6eMJaa3y6jvhGDDLEHSWM%hQY-s5VyY}4OTb*5WlLPSS5tS%a#O9|%YOX_D+ z#;(4%DlQ&!A{}FfvE-iYW`KI43HQ5YRg*!WO`uM6gI6?9xo~9bRYLKO(=CzAgo~%L zgdEI=3EObCNQT_3^Gb`|qW31^3>g9DKrp0>-2E<~hko$X+3G?Q3=sg**!CtZW(v05 z0y4kJj%3`CN*sPG58RqR@OLJGI7W4cNcP@RUVBMM_8S>lYWapxVaL@p5pX*()J23VL+I;`+;Evk;PwrKdqxtB}ixHsI9`H&T-@IWGE(TGJH)YbxJmjf)ry)OGfa>S|H@YT%ZDcZvwVe;;} zR$61RU&APW4cf!EH9FnA6V(r#P(_#fv%IwRcb-F45L6?RgVA(S^}k%x=yL;+!hKx@EJCU=RcPWF943q%Fz3 z$fOGPI5qcZ`gu7=XCvSGOs)H3?ugm$x3P`7&NrGFK|dFTIxuSIdP81vJLs<&f(kZX zvykymrxc4-%~>>jRcX6)g!vj7r_!9=A9(a zI5C4)HiU13^%l>i=uQ3cL}_eBv6$RzE{#GS9Y{K?Z(cCv4j}V1I-r@`m=3vS`26ogFMs1A4>A=524Z`1= zRq=Kjq8qYhbo-nBqAKl?yAUYy`h!Z?fXBH_WfcZd!#c4>Z0^tj61*fE08hT{_H#p$ z0Hm`-W9NtY;*psKCmymjg-6tm*4npxW$Ab}Dn<;zj#>HsSIp9!sQE{?ls|c8DjTQYgNA}h&&~W*b!&n2B+D~5{ zP?MM$7tq;xBhXjbgKisn#;@gq1|}F{H}|FlS{h2U+|Fw)@>&z0MSLFH_lj$js+Flj zl!p9fs*GM2CpAl?rLn(phz(RY4B$yq2)94pyhnD7+|p-vz8{K}65OAQ6@jfzrs z0dZwOgm#RFA?+W5{IR9EKvdgMWjpE`qf6}e!|(u^D=O8?3>>FIBSngos3R`IR{6n&hgyh}~iZgf$PC>e#=~&r^okwl}F&VuS7Sy#O%e_7PHC;vcetxj0`JJJzI;Tj} zGnD6H3)D-U4i7i7^M`Fyw9iv6Mq!^PNo2JNE&j`fVtuZxbCKTsbG4f$+X` zx~9n2wkJ)L_gABkqfyo29d4%kn(J~G=tixgo1(sd6u#0dsup>1_Nx<)8!O5L^!#MsY8%E@pnw{=V1s}MvYZmas$7M-wyQj?3%5Uq;wVf zN6s~s^mns5em@G!d% zLkt^1OJ~Mr5cWAk9lQBAkC7cl6O|#_@ZDhE5k z#SFrHtgX7Hsj(!;HgCe1tT#T=*<(`8Dox78W9D+JG2|vD{xh;KLZsY=~ARkfL?+{B&sp)EgJ-Om_k(pl)~x;5Y9% zD{;P3bU4bAeDKopk3LUebzz7HEwz`oZ?AGB-S>R|mds3$v(n|^g7MM9kO>bMs{czu zus_yqScYr^bIeJMZ%g>>V8~BdgZC@?C~sXFru~qIc$u+jL5G^KDB$f^%U7;16~Vas zp870!>8KRKeX`r06KBz-JxdWc`rXVec$pJ%l-P(x6#z`?B0C{4c${e|#emaD#&EYP z9;P#plx;$xFqXi%uCp@Al+2PMHt|-fHQFH($7-B@il28wpx!{_LJr^wecqjVzjjfC zE%&K-Y9cN;HwJ`-d9_+gv<>?D@h2}GA4($#3%bs*eKniHTBFq9mbc(8u5FQ=aL_}3 z%>?J7Rd>KU5&Lj>)l*dVhVz^MdgFViJe;>lAI?7@E7yh0hbI0eslOf)`RGt->=U8S zlgb0pDu$l$l|LV|B^^Z*n9%=zJ{b=z<)YDR<@{k&|3^5NrBP6wbJD$Udj7-Z7ON^< zl$!dGvPB(xn(rU7j4c&uwx=-L&m2(y^nmzVfkgb?)_Q_yXMWMW_E-lh`d!>zyAVq_6Ce6b%`)pqmeB60C1YkPPIA3smC)1;? zI9@Vo2^5;@vs**tC1p#{?G5HqTE+eFqpwTRzp2glgAn}N_Fq1e>D*aw;qm6h2bF)L zy4~DoUiID~7|T27iDh=TdW)#IdtvV6K}!gwVV5RJtE|)LT#k5nQKmtQF9hjXh0>i* zIpdG>8r60EWfV2+sxZz=W}mQ=9m@4$AE@MQ~1-?>#hU6HiT6! z)gX;U42YBWf-L;IXTdw5^CM#Hu6RBt1hbt zB{YkXMK8^0gzFvPar>1=Y>|v_Y(ppKOH72m#CdQB(Dq!B7#B*y2Bq55v`nI}uW|U1 zd_rL+l=UG7#Ne%8pljOq2M>lXQ6hTP)8ZZ9u&nXY>^x0(PMac}58~IhWlwSJ8AYHn zm{|iqC$ZPn7a(*kM3Ua0K)~UqIRaa{xg20QWN)br8Wr@ z{QXZboRDYr8$VRhPq_sHDo)r4wZ|ed`y()xgDsTC7sWFyAISbVOeF=3CF+N2s&xI4 z*G)T%yFeW+l^#1P@_qiGrYGO?ZnS@MUf&;R00BT0D4ZqM{gm)%N!o<2UEJCVLUp0R z7C4BT?oh&tLDg1Tx%|{QgjmYp_f|;O_A%8b-MBJ)EZ&=IvJfC)QXF@Ui15=!;(UHAQ`nM|8Dj)X^WqkwaDYZ2jX?+Louc05IMzu9WLE@#j zYBnmW>kMD)+_fMrLcQDA_M=FHx((dEjN`5D8X-?&b^lO4Q+kWmejL|5R~yk5jsrS6 zzn*W`A640TF?;$$;EVREsN-kkw|A)ZN8xM4+=g>hjkW@X=hbiDDS7d8u4Q0RA*QHy zDU54W}ab;+NDmZZv-^nfzbPl}`Qd7&{6-AX519Pnk?Ft9X*#S>VgSG^yIXnTEGTxghYoo>2Ws(?EJ_OxZ zxTbNRA-tUeou={}`+}iu;hGe-pcZb9Sj`9SFU>}!jjc>l7?rR2CQ#QiP@Gs@@C+f0-tEJqHT1LY{%M8gfvtvmU*|4@r&9Z0{i6O(B z0&{$oWJ{?Ndfq=)Pjei7ThtWDEFMbr~w6ny0Zx2K33aro$yaaqO=0*25kyqxnUmb2pozN=Q*8k;sVBuMv@^QJCv5!IEx^^4HWyw4&Ky;6dfchNla=i3@i%w(h z_{BWYJk{0wivp#h6M0_at`4=rjhGuv;z2a#k@{w|*$o7Mw)6OUH=5sl8NX>(K4)x& zh=!(7dstj<3m9Uf?FfW}9#z9ZWgfTs#A7%+M0k_?U!|8F>h2Okhvs{;d@IIm<$2Vp z_}OjiT@r$s7w!q#n(FjLoYwt2u*2J=62OSBlbEq~@Tsb#5}?g@^lSwL*NVI<#)?-= z2w@m-^|zfj{iKCKE^lJV&& zI$;Ho84+Qc)_#|CWkF$TmPeDqp`>U3yPP4Vf@&C76+b6eZU1E^I?&mRtVCPWA=%CL zsxjc5%iyBY1;wJy@M}uN9+9Z^n>R2evEcE-xCYwStXj95n8>Mxqrg0IPDt`$=>8Z=yj+cQTey_J+l`s&m5` zkSzB%6?L@1;VtcDjvh5YB`UFGMveU}1wE4t62DcH4}!1EhBOfxm;)q1HxwS{U~uMA zinDh#Nb-&EOFI#xnAyqceNU!gOUF$8eDp;w;fGP{nfqCyFskVKqc9c~kD~lx27`Ln z)h34@ESdG}paItb^iK zgs~4=J_)yF6C{^1*M_cSq~H84a1b&QBlj3724~BlI3s+Sy-=o37RPR&$2=7`w%$$k zc}G8$>u2scY9l^&V7B*EC=AKRIW(tZ~9Si%)$@<9XqUpg#H?xo*Qpg8vZe;DctFKg7f6> z+-1b2gfe)_;D?ncjx4L(ZM;B(fo>YF@XjQmfvK@3vIo3iV4?ScbIl4d{bw#GHPt{t z4z^I$w~aGF?%K_SAyZ#{lmt*K#-|?nXhaBUB##LuBS`k*yXUFjyb;sn=NQW+&k;_? zhvT!AOh$-?)M)+l#d{35%-`QU3ViT9(hh5YGxjh<*cYV{pEdSwBYNeVzQga2CcoFw! zcZmm>x79Q=Jdy};6_aE-r5M0d70$-zXC~Ss%uMlzQ6B_S7Z*J;M~7+7g&Xq(P(lqE zTvlj=&Rhq*o@S1=Qd2>(r0T=+qLS99Pt?laJx3?l_jB7AUYUK$7I_Jj{*g>XMGXea z5VzA4JH&d;WLu z(~l?yb8``!6O1c!*R1Gx`Q~1Il66FCINIj!ub^36U;MneNV zel5;0uTU9YxtW>?jO;G8ct=@b2+dKf$QS$T!>Ndy_G9YBFGj`L4k!-`9`NyIy4*ZT z#4}Ppmsv@W!ug;ze`v76gM2P1sSG^FR={4_3heWR2U?X|>?f#4qPCQOk9rL`>uQ?Z z!HjyM^F`hH9_0wJit&5e_Cle2O%s*efZBP%o9vM_mure%0ES>QVmI}7crHmwMh!q}L4u3X`Zs)4bT;nKhtNYpuzEr>H_N+XJp{&341l$k0o!(J2 zz?<5bzs@F|s&hlR8~+ddFZ`$dPxb#=|DX9k@$(UqvY$LL#dFN`-={kiHGsBKlY(u` Fe*mWF!z2Iz literal 24119 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 K=Xyu@*na_MRm@}n diff --git a/r2/r2/public/static/reddit_alien.png b/r2/r2/public/static/reddit_alien.png index d25d935bae9b4fc9c8cfbf885abd2c58f01f419c..d4d0e0eab6964d55d9b82d61e3bae579241cc097 100644 GIT binary patch delta 1015 zcmVzbl442Dxq1yKP3DTm_B?Cy-?_WrML zQ_cd#viod)D5d6=rpea;Vy6|w^B8oTu9w~`F#xRVZh!?~xFJIl*l}dSbtj;Jb873W|RK6pT3rV}AuGE(e)Bt+k1`15kzNOuQh@q@{sxBIH=S z1k|DH9uiR<0qm%Jn&Pq7Y(RCypD+cWFu@QAZGVvr|B8T} zE8@cODbnUESpy^xJsA9rVpGxzt1su=1UqOXEkYSM_2q0NFMl)!|XUsOri(BEX!;x?GIK^v?zCh2j9!cQATN z2{@H50EMBQ$XesAjw~Xm0x+=sZn~~v}VMC<_kiuws3o*{UMF>^Zhy<8#g9qkX z)2q;fIyB}%n7=H&>Qv{aT)ZsA7p?ArsLwMU06RaOQ6&m$rDP9iG!@Lr9bevXm?i*Q zUO&xFlT^rnW*NThBzgd+=|%;GzUAd+bL?}?L@K(!F59-YaZI~NggO8Qe$beQFKO~y lp0cg!0V+^iqMrwv_6Hb?TI?9RT0#H-002ovPDHLkV1iTk?AQPR delta 2202 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 T0GE;g0000l5TCo-OPtzC&Iw5b zL`u{kkrayvp7;bj@D6+cz5-vQfao{irH_$NpXeLB6bNk^OO|R{H~yPAjqS5<&-ag6 zPrTjSIcaU0KR=z;v$H!pJG-+xv(`9wpYG*h6sD%87`A=(`F5pTvn(st-0$~w{D1lV z0GiEaW_BhRLekowk9Of4Xm-bmQYnpds-qBch}Kc|w`U+nLzbk)n7LdI#sp55(T``& z)NSyq`Stbn*|}TP+-dhzIwmP}uC1+&r7(&j*LAi0excXvjU|b=liSim*xTD< zzV9=0+6_D&>bD|KZB|z~2^}Zh?SFzDn5=I^3TO|Ah!PNzVHl#B`9r`m90HfLbz);P ztu2<}SqMKkY#eKvHrB#oSt^yZCy)2F@AQb#V&TdL06fwwjn1rT6pO|1LZmY(m5|j7fJaPhCap3#Lw~6S2QAGu z=I7>C)J@0Dl%*tSlO-X?IS;ZkBP+3T_lNuHB7FPJ7WoO{<{Jx(?_zM;-p%SGRxKd4}gE`X9ifnPj5Nuv5x$ zgAlwBGV|7Mp^jCY3oi8p>xKu8!duMkNs&&KfIGGab{_(LI=#4p)z}b|?HLNvCpo9~ z1)Mi~;D^xl;1x&pT*ehdyVV`*j8bP+oWc-thWZ>{?+SfA4_Yo@Re#k-n71-mqF9ok zRwA&Rn@_9y)ar2mIN!NalXU zd`X&;iiKe>OBKAlmzI_?vlBYu&4kl)Yqgrlw;PSd_VzZi!T`o{`x_3%7zU(5p&%kX zUSG1|#|JM*3ViwL!hgpfq_2D0ZwquzOxG~-fXroJcw7SRe*g8RKDb=N2prd|){oy` zU8ywPpMNcW@liUro;3{Px=nZkWKaT`Akw8XxWJu3N+n`qC`w&p=I-O-KYu^joH=~> zSEF1$z;pXKz7FKVsrr^;p zfB1eXd8xxN;L5O@d}ONeFj5j{l|v;x!eXyel}WVPCpI9)Ldj&YiK2zLhmI~bP*@m% zJNO(A@C_0SpXuizW?s^AP+ox}jZfN^WU7L(L6T|B=si3NgqH>p_yP1oaD8xmSTkN{ z9V2gDl}W1zgMUyTOEw^pe#AI$9DJmp+&9!nnM|aT}%zys={{H^| zvLcQ$0006uNklg5oW53F3ixpeP`qXsa|TM;sMJ5)-Z@tTRJz zj8Tzu{M-GoyCg9Mm5Tmqwri$)YG(KCYkcDf@NJR+@F;l!*ssSxcfeZl0+duLuzlhIP)V;w>=7Fm%(qCgqjE zh*jR6KHXyP$g=KGv;ee=p%*fL;Y0a$Bomcgdc4SgAMjY?~+ zfpBO=d2DIz*~>VG?x3WC2hl4bac z9$mTo^hIPd5r{w_rPw7%Tiv>I>ve6BWWgv`(=5XFyPdtg9oKIR42*#RLJvfSFh-|f zK2Exs88=B<2l@u`h6^1;F9of}T4!fl$H+T`wIs6D{Ew9dOjpCyOC;ya@Bf8AmjrKY zsK5AGD+SBod_Hi(vwtVYF5EbC?i#6ljpXzygL64WM9*K*#Ro)}j^815P*1@}~sP8SKkob4Ta-oA)2zyLzItqj^vT=7I%gvbLIJu;(cv8t7>`+tM>YME`K!N|G`4Ik6Cr$K&yMqIQA< dKD~c4^#^RDIBw{KScm`s002ovPDHLkV1hj*HYET6 delta 1372 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 diff --git a/r2/r2/public/static/redditheaderScience.png b/r2/r2/public/static/redditheaderScience.png index 6dcfff32203ae2c08e5d9089555800ca502bf78e..c05f5b4c2d9ce867f1143973f545fb267d2953de 100644 GIT binary patch delta 3008 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 delta 146 zcmV;D0B!%P0k;8=7zqdl0000%SIjPvAsBvXNklD*xbM@c;k-07*qoM6N<$g0;~& AfdBvi diff --git a/r2/r2/public/static/safari.png b/r2/r2/public/static/safari.png index 8635632e0f320ac10684be5f9b7ff4a684c03263..9f77c9d153d205fcf391b6e0a7d783606c34e39e 100644 GIT binary patch literal 9473 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 literal 12030 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 Z+F=>Eqt`O4o`#(8`p&|eP diff --git a/r2/r2/public/static/save_firefox.png b/r2/r2/public/static/save_firefox.png index 257a428264bfb4abcc017a9387655f316f312493..ddd82ae113d8f1e8276adc3bd7dd56b96d8e33cf 100644 GIT binary patch delta 978 zcmV;@11XZbgwHOMd~IP)t-s0001ada8PUt$Tv9e22Dvi@JZ0 zzJZg%f|tgGo6Cit&W5DYh^NO8u)zawy)6&+{;PBPy|JK#n*VftB*4o$J=-2E2*w@?H*xcFZ_}T3L+S=&a z-{{-p?cCem-0uI~+~D2r|K8o;-reEe?*HH3;^5!o;P3z8;N;@r<>TV!E`DD=JWsP=YQ+y=>O>R|LN%L>gnz3^!)4U?(6ID>+ApP_5bYa z@9pgH?e_ic_W$nf@$T;b?)U%i?(*>O^YHlp@$mHV@&EDo{_^ql^7i`j_Wbhr|MT+p z^Yj1n_WJYs|MUC*^z--i^!WAq|MvCy_V)Pp_W$?x_xJbs_xu0&_xt(y{D1lR{Q3F+ z`uY9({r~&={`~v@{QUp?{r~;_|NZ{|{{H{}|NjcoRV4rb0sBcrK~xwSmB9;J3~>|( z;9vKf`z@Eq5n0xVb=I;|xF z8EzkD2AC1Rao0E#u=14|P&Ulxzdk({mNR1@qwf}9oxN&l8A*dw#&7m?j>jbei2x$P zDG&!WMcqLe-$v4kR}wpp3{_-(LYS}2!uMQ7O2~#=^ZCa+BrF#YLVwftd-=kLHZf&< zg3*@c`TK`jd@bV<~DpS>Xg_CJCP7{>yPvgm`5qlCb-wunA$m4O&`S`tkpAN}z?vwpFJVHjw2> z0%fydxaDV|u>Aho?0@C$hb64W1Y-mWjWMmC3%?fMTtB#LZ|nINrV8~k1Tsdod1n6O z+h?PLJu}UguO$Ff0jNS%p$b67OB2W#)yAoZqYnoAPIgW;TE4CTG=hjK6sjl^FHIm- zk@}G{r@M}JwC@?Ik9)EP0uh0TKtv!SU^hh|<{+rOx2Cq+2|udvCv5@+5jS<~;;I{N zP=!BX6JmFhLy1Hpxv@m#_N8+%%w>9M6D<47A0^6=%^2BA6#xJL07*qoM6N<$f_&p- Ap#T5? delta 1088 zcmV-G1i$;F2$2bp83+OZ00BU42_TUnOMe6pNkl4=ZYBcXoDmc6K;aEKBac`iBx&US6iZp6>-gcyw4Zx)!&ST)cVHiS@aP+a47Q)XoN$PserBFB{g@05y5+)s-5uQOG*dtm@N1i@wv=l|T!JtU!<%|8# zK7UA=VfCbdw`}P^aV|fNF3DIkFlPkh>!!V-Y;mu%&K9LO7lSX$=*Q(WO za2p_aRMyIleb=U=wqj@t^Ybg=FyOWno9c;)oQhjhd4DgwRwL-F%8Klm=XK04ur1jp6h2+eLUK& z3SC3%bdASP-{Qu4w*dkI8dW|{&z7o6@c(&Ne*g8x&%3WN98L^AP%&UE+YiVMXm+8v zSE+-=YS{kd=NQ?=j4v(2C4a*qU!5-8Sphq48b@i0;Gw}DeJPtgYFX5hbRnTyUXObY zbj<0rO%QmpMa;h6qi@N&NnSubm)bUg<$hjpp*Y*VG(gNR6nH-OprHrPAzgu#yN{ow zToCKRjbWOv4(Mc0EU7flFQf1upXVm=I%23^uZ!d3Cd5-J;QG?Ck7BX8M#d@nnY(0@XvMQi-xEE=xS{)6>I|6TbRl@xdpB zk7^T+&vjic0|v>SuENBZ_7C4|sr@?|gk;%nt=?K)TRCakzx-DH@_u1^y`*W{$1rOs z-_Y7e6g5F0O5?<>>jZe|lanxs4>^9L9CqbvCZ&Vmc|4G()6R!z_5qQX^MI zX8C0Io8^+DMx*2Q$_u0l$)pizOkB5#X-=z*(cU`uqeJvV@_&4C0y*~5L&TVLV}q*mL~)!2;_F8Qs@_4!6n~8nkMr3u?w4~ zIq6a#LNXZGEG_s9CMozzyJ)q64}Q4(55Q}uSS*&yrT+lbf<;Db9DT}%zys={{H^| z#{J^60005>NklgmjFQEq^gE&N(HJ0u9~tzDWfo8APWKMG)Pr#)7j%bm#He<0?GL zu7K@)pL4EnUYR1m00zd$5?C7D(AOc?sI-RGfQHu4S_cVmQXNQ@OD0zru*_9NzaiYL zCW@bmO7ay9Bddt$^qC(NRtOlOq9@m`K7UEJLWW`6>eiiGuWK^~rhiiMC1I3y2Yr8$^I}KEQV|m%!UbJ zn==DO!4?KH%Yaf^%0j<*eJ!Q+_j>2!@d~sg;4hckbI&{X|qh+ z=jVA15Elfu=P0SA;Pd%-6OJ8vrrqTPu}8PDrTJG78#2;({hnD6m_c(KM~~jNc|0B} z5qJZJ21i(yO(;qSxp2=!h%B_3DSt-we7sOJ8kLdwy!Pxa!kSwKw9m_?Y1BmMhL_$% zvw{bU^hF|(eXkt6IXr|JEG*qKzQ|(me*8T!2=SGjfB-L7RQy0ff0IOj<(NF_sF^!~_|MCg?s5plz<yRsqk}SE#{hvPn9&%Jtxy^j0ZR!-05sCr;8LY{Eq~pm<&_qT1+0>i zlK$)6toFf@Ox}x(do)xmjRit5O2WahjE#-)HU>F*ES&YmkvHk+JO&6Xi5CDW0Ygj( zi0AM&-kEkgnT#dll4QXM5ex={PN$O|=(n!wKvzC%tyW8qkJ;hBPN&nPr>>RiH9>$4 zIvfsEHZwIfRa#m~@qhQm>Qoe_t}gvo3x;8E|BsA}@E!cW>SZL|LM~?ltpD3j8Z-3< zJ65 zVVkhuauw+|5}9>1krd0_z9X#7-PhXBoYLyDX@z=rdemgRFMmg$RlBpyHPP30_1x`I zd)8)?AgwvK z)4x!M4pZmPQIG7Pu3VxT8mN;esOR^$wzgjCazV1Ja*>I`wJm59n+`q(AxNVo-B2PU zF;STLo7!aJpMRL+k(BS7-ue2=<0~J*TMh5-JMuAd5pS~iujG{`eygpP7EDAg;<1W0 zwvdY|Rdi?lfhV7;JNowFU5`HA+uPgL)`n=y~w&Oa`G`qhco-~WtgiO*nw zJP^q&<|I!G%7KL_8jVI!c3LA;^sSpWtmbPoE=M@TF-JjqNMXxQk9bidhx4o=F4rWgKs5!3$<#7Rs{#2I4#7q|$5?ee@2mH+?%07*qoM6N<$ Eg6iCAwEzGB diff --git a/r2/r2/public/static/save_safari.png b/r2/r2/public/static/save_safari.png index 9001856140488a7a64e98e93b2a5bfdd7eb7bc6f..ebc0efa03440300e9caae0f9b75f857bfe212eed 100644 GIT binary patch delta 634 zcmV-=0)_qB3C{(P83+IX00F7rz|4^$OMe1QNklpEw5 z(fHu+VPr`bfW8oQhyg3 za@32+o&6M_h7~1U>vTHZE))q-3MI(^p>M_W%F;F=Amka_bA-kj2FLJ>nNTvVEc3%r z#xTK^`DP26hLlnW>B~ay!=e(9eL)Kz^YRxw_od3hp*AgqcIvctykC#>@w0vX6s;AD zrfFJMIb@+ysZF|~Pbm#lpyA9YKA-$uCu!)o)*Gp;`_WN&R08lN##1#&9DHFnd>+vMkKZ~|P{ z1$FpAmLx)wh#o=^RSlKbt$Mw#q?yED{#8=HVc0RAYc#;h#8DFu=vit3@i0i%h6NUc z5nIh8k%WG^-|+I$*Plpo;}YMwJFrv5O_ho*K+%Zd;aKd%%;xTdvAZ0dq|e2NkJR&+n+RM* zhj1K<$D@C2C!$(l?`l!K8Pzz~DNK$F`X6L^su1+mw(amv>|lwLZ6PKSjCgmy0iLbo UE%l`u?EnA(07*qoM6N<$g7g42T>t<8 delta 1161 zcmV;41a|w+1=}{sWgJAtYo>5(*hJPw_L)oO3?!vtQ47evjdII^T=^ zuDzeV*IN6#hW%>h=jU}gomQ*WyhDF@csMdLQeIwOS6BCk1g)v5sa~&dY;0tFeSduo z3k%aME-tcJKB%*{woXk=ZEtVCy}cb67|^t}we9Zinn*Bg=)#TXG8#Wu1z&Zf;IbPm3j?UpC?7 zyr`NAj`YyZ?#s)|?d@%nM`rsg{z*1xXJ=nuU*kIIxw5iye0;3p z|0DA%MNv^vh6;fmxHbJ1B7dc1K|m)#`;OV!S;Noj>gww|Ai1il3L!T)x3shrp}4r1 zkvwB8Dk{p!$w7FNK(HBg(b3WJh11j1DTVd*brRjy*4EtId}?aS)zvjADe3Vn)6><}<>TW+Auca3TUl8V^ZfjL5{W5kTYp(uDQ@xa1--q! zDR;pNhxvw_l9J-!;Ba+yMTRCMB*ewVk%%QFCD?>E!K<5_8;geWdVGAGnVAtKpyXc_ z0;SBQ2%#bVBIY!vukz>9{A0wpLFn%8{xr`%O*rNHS9SSSzJ9u>7hZs;r>BF11NfF( z!T-?v{Wc;->O-A{g@1){Mf{L7*f#mk_};eitCBpfx-Y@q-JReW&10J-<(Y39o`B5R zZ^NPN12SlLWE^>`C0S2TPqn{-Me4eyrY0>djpjs86z`6sqa&5Yo7CLg?C0l4`4tot zP!O=n*RrxQ8afAgx5C52i6cUCa~U!v$C?#)7#ri7s4?6aUv!rhOcOrpChGy>Y7o<3rHedTwDmJ1kh_| zXV=u!MCG!3a&mHPYz!eZG?X`s%@77LG%qZTkB`%-xD7>&Dq1lwN_KX3Y-}vPLKv@! zstMv8U5-{_e0DhSac5@-rK%v&=7dAas1q6l=t1c>`3N7P-Ky4k__+ff82;>tA6g_~ zgN>gOuCK4@l8{DRzREt8?T^5=ERZhzKY~%LC>=HYnNs?0E#cE-{{doHe00000NkvXXu0mjfEG|Zw diff --git a/r2/r2/public/static/serendipity!_firefox.png b/r2/r2/public/static/serendipity!_firefox.png index 2276bfc7c314ad385077c79dcb04801c31c75dcd..031ff8e71c0c8d4f43f79643ce26d3fa367f990c 100644 GIT binary patch delta 1061 zcmV+=1ls$YAl4m_83+Ra00AT@8gj8AtO|bto={9wMF0Q*d3vgPeyw|gvV4cOev7() zkG_GE!h)B^gqzESpU#G)(uk+mimTd-uilQW*^sc^sn!3gx685E|FqiwwzkB$-2c7a z|GnS;!r}kJ&E3P)=)~gx#?j=)HpT%+1J+D*VfwC-ssos|Jc{t+1T9K==j;}|JvH< z+TZBgct*<>}_;|K{`m=;wdy=;;6G^Z)7S?CR<5>h%2U>hA07@ayaU>-GQa z>+kLC@a^{f?e_of?eXsJ|L*ty@9y&O@AL5Z|MBqj@$vuh`2OZWG*fif?9{ER{huRZEn(T=`^2D`|Z8w z<|HTQlb-v_3BD2^kW#{SVIY44Q2-XlL{*5rBqMBCJH=HI1hNt&2g06@Dhx~v4+^3O z&}K10f~csGc14Ht@hHBta+pC&feZDTeq%NI(ldf;IuA7!n&K>lBOM zpB{1QU{8bC?A_|C)0Y+YUqF+*V07mC@Ze00azJYWP*@2N%WM%0nHzrtJ~JxfN-Px7 zqezi(D4*bjEtZ0xE8$=SS!Z*x_;?$wS67q3vHSiO&VA^kb^ug687^AZQ&_%#peIwK z>{XT-BDCw}lRJ^Fj64rWBZizJoQE>napO{CZ-*hbh3}Ya#BgUBoq$?xhxYB+-lkg> z9m4&g`~pd7Y6Nm$TeN?Tc2qJ)U<74cW$EJ9gLS1?uLGFVJgLKl*!!*YXZ6k1{X2H|o_%45 z0ltz^t!XY&BgK>QHqE*hm%qGymL4Bo>{dK^3z160P;tTJ0_lHwa%OIirbbdG?VNv@ zelR|Id~m+gOX}Y(Z>SvkwtDqlH!1J?w0-K-$;jb>{#{e;F{9GX%6-nW>;1K>-xDpJ zOPcU6li7ODqjg9#!-85)W=`cv#gU%4d0ui&Hya`|%aca$#wTu*KZmc z=|6k=LO?(OQ~Lk^|11m)49A`@@VI$N6?eUsjIs%ij;&^UjS2mt`#2j>U(@IO2i!0mtjEzDdYpNLXQ7XSbN z|Nq34y$*sv41kMZR0!N)oMjY!AAK%;4c|r+N5sS!B{9Hp{2d&1=peHO{kA4ezcy{E z9S^7F%7cGUKJC?wh(ZVh0NS=i#5{+Q2_=6HZXvga zy6^k0>-OZf9g`=SQp%u4NdKszsx_grnZv^3NgE;@X7MEZ(&{h^0H_X0-_vh*`)=xH z?a_e|ag=t$kD)qolq#hVQM&|J&Utsx-$0+|1pom5|HM|!O2a@9o}@_?Qrn6JJxag_ z@#@h>&`0o9ls_ZG>$ZqgtaBJ-BmZ?|Wr|#QF8x{oO+lhM}CQ^eJ}unF`gd9=e;Ll<_Z=yHh)q^_b8Ypyi$J}rWzWp_U$9n zypmFeVYo7@9g$i5c~gx)YX$OR3WWgWZ$vx03i(p0B5wmHrQn-~)_+bkw0ng(oIuJU zMHnF{M5kA@%ot-eYcX~9?Zj_+X+7B-JV#anE8(?-!2}fl0^e*!c~<0E(QHK)*hy*9 zBU!Z)OS7M?BtH-TarS?Rz3!EBHum$g(U@WimZsLzlJ@r2(zi~Zyx}0zTCXrN{F0Sb zRWZhbBuV~7^0d~SPUoE*E7)xs2%^vS+Hy!DY)cU>L;?{cdO+mL7w`xCN&f_iPv8>} zH;!CV6miU<2P(B8f(oa&>s@=+JviEIoJ~X{^^h_L%YHL!&v<{Ooj1=p`*AL%?Dcw` z?gRWE#;?V6It_xrIT?+I!=d%GxUZ&^l2T4469%9xm!rb_&u7*JZ(k=bAGhyEyw{m8T5Xg2<++sLE)+lt1wjx5fftZ2XoCQw6SaTlZGL{eRPAk~+bCc~ldu(L z;(GaZdB(o;zX%mT6-t6s5G8ntr``(tYP?9(Ej@+mS+v21%=k^-?a062^E9gmXbqYK zZ@Kg4fu}epLTrvZ4&Vbmh@d!E)lya2KD+9eO~`HIHDbjZvv@wnvT4T09Xk v#+)qU>7RL;raMcjduKrqL{Stc4{rtl1V%x7El8;!00000NkvXXu0mjfU0SCm diff --git a/r2/r2/public/static/serendipity!_ie.png b/r2/r2/public/static/serendipity!_ie.png index 1b0a779e6b9d488bda040e38ba38ee0e5bb072f4..28452e43be87e1059500185bd552796cfd85138b 100644 GIT binary patch delta 1023 zcmVT}%zys={{H^| z4L5Um0006;NklcHLdc z+Ezu*__v#E(xt6M_PzSsWRmI2o21D%gKsnh^fuuJ&~aiLK+D#UyQL)_$arZ<4wOiW zRTMy*wzisF7q0AZ5lmbMiGSG|#PEjJAc>+3&8lN(;FBYSg$E8A=V^FC2&T4z+7k%2 zOu=b++rsSdKj|Tfc&(GXK>Sx^Nbm!FC(IvISy1aMt%x2SJ){~iy1Qi!m_N@C8TLo;$PuMzkiK5elVgb9)?Ge zSBp=c`cC}Auqk{-9$mTo^m(Y#nkX6MD0oN1x)AFP9iF~TW2;a%h;Hg7x%hyP zOULgJ<{u8iR7QDHn<=+fWMH2Uw{~@(zj^=hy{jj>yIO~Jb&`o%G93FZxEWx)U<~A2 zDrU0CX45h-=e<2+VtaE}>~3z0v7TOCI}jLMF)C)EEgwTSz--Mf%fOz;I>kPngq75; zOSZAqe&tx1GEPQnlRD1((Z)$J-G9A*T1+;M5@tsO2Rga6qzr7^>hXs9+RnE14Jmm< t4SX=URT((;IkEIflc*aL=;OQBu|IH@eUY^@_t*dc002ovPDHLkV1j?mKEMC~ delta 1402 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 diff --git a/r2/r2/public/static/spreddit_ie.png b/r2/r2/public/static/spreddit_ie.png index 184025a551528e4d639fff3c1b53bb1fa92c4d8d..6c738658a8a655814ab5571cece0aa12530f9294 100644 GIT binary patch delta 985 zcmV;~119{K3#$l_83+Ra00F!0Sb32lOMd}T}%zys={{H^| znZsT!0006YNkl_0|N`p*T4syGX_26ErEK?YUJaHYGy+J z9JC2*rfoYs0h(ft^zTTeRu++@HHdyfP;*^Td}So0Pz9eNXP!BF?0*Xhs=z4%M($lW z|L_TsRmf7vj)pa*)*3oYaKaGnCqv;6s_os~Z8hk5CO3X1P2s(rR>WbR9lk+W@F(CrTuYw_zN}>eIo#USefsL{`?oG0 z>F#PBX70Gc6myr@3&pgG19r|0N$F>jT1Lv=o-wtxv7>f2w$xZpZ+OPwvIwC!l=oe2 z@G?tU#`jsLD$z-pODlU5?fJ?+_Ht3Aby83v-i$U*s;U0V{YF!2vT>A@t{CvYA-fva zGMt+b5B0U3Z0j2`TgG^OWLLCIB_J^97><_cSV#t=kvSC8l z=FEV#ARmL7WiTi$WzsKRUrW2^c|G**t_21T5>8%kfA@FK{W|yFbMEB?!9UPHNPp%M z9tzs}Mjx--T5RNy(j_POyneY1emOcBg+d`Lb4_^>b6uU*IU6(@jl8JO@9VMDJzW}8 z=J9wG@MpMfgGQj65F_DmSZ))lQuU1)YH}~}dcE>65AA-b#pwXB&9Jty;dcOQQj+8z z-P0@vfQ%@L-0+Q2x7&Ts9$1kFIe*YUBnZNis&N4^)HxQ!j6OBNtPL+*L6Rf|+WEbg zw;(k$k7%?!e29tHBixQkze~coVv2xb%(`7Z1*pFI_O5G#1CRm>Sy*ID5m1a-*#>|2 z^urJrZvar1>l73|x+J^(5Ah2k9}ETqV$forHS(plGugQrr+)cpYSQba2xuStZ(ffO(THj8~w zKuPQgEKcBPz$$lTOE9?X9MD=IYwl zER(Qz#U*)x1q6?Z+|!YR^*x;zPMMSg*hb0J1Hj^fht-rioIii(Q5 zuXG6d$BI(rS*JXpBat&m0gg1DXB7ZbP1p`2BO~&h0wOmOO8el$k2om|9{|YWtU=I+ zvtT}+RbVw|=X7h*<$vH)=Ctp!I0%qHAmDH~xSsC5W!Yd0?>)U<&)pocfgKG7gDyF7 zrMp~F@e2XF-433QpO}~^E-nV@s%L3UYSLqkJy#Ep74KE}%`mAqf@ z{qRM7s?lVAB!8&Ks+jSa@=CYWz5#bG^ku6=V9UXE4YoMJTYoltQ;5!3rPe5gX|dtg zAGg1`D=T+BkoM6r+jVDwVJ+&c(3IkDJIJtUd@XbivwocBtsR$Jjvv(<(m9oOdU815 z{BVXbt$K5bbIj6w>Ew-JTiUvOQ&zs^;yKep>H5@)n0Nwj1O)IPp%}9y`cR?I6;?T> zI*B@#cm`9vbbrx`Q~^wU*OVabZfi-?@tevEYHDi8vERt=9$^5iCR@jThPmmE1v zcGNXBHJxvFf@VqiT~lH&e8|(-1tX(807y}pEoEaJ2B&x?rsWuevI+{iN^k8u5GG1_ zJ|H{l$iGwad_W)t3=APq3OX;o^9ij*qap@IwtE^W;(r;`$9KqL^ylQ~3$}O8l13wK zuHE_E^ELZF-m~SYXS%w&nwy(pHI+(bRaI44Sy|g3=f3>z@cW;Bg@%bgfh6+UMV^+@ zr%?>EaOr#u%d>)yuGv@%_i?k?49LdmsK>j0?P{O(@|4pa3W~g1t2dYmODb~m*3%}y z<2@+($Tq4G^mq_pAtrI%)?SFX=q@;pWA$RPt4d5&B6r}$FUh%T~+%~(P00000 LNkvXXu0mjfj`5Iq diff --git a/r2/r2/public/static/spreddit_safari.png b/r2/r2/public/static/spreddit_safari.png index 670f9db92e0e5745ee9bcd48251a9b59e8085bf6..2055c1ef8f5c375b864f93b8089b1bcd3c982c1e 100644 GIT binary patch delta 906 zcmV;519kkr4c!Nj83+IX00D0rRCSRdOMe4fNklgyYu%(bWmcA$Ik#?Ht2S@S)7I>wKbu>I|5(CU zra4iR27*9CP4OJg^ZdR&=aJ!7ua|lZFcI_~eeP;EPaO-y=d(nIQ;%T?+!wW9D}Q}$ z;Q@U-0KzR-<|qgdLgIesDBiPSR!Mu&Lw-Z^MqO2p0R|>SEcoLTh?s<=XHs>%d2+i? zZ?1ZE>7`uTiNCdlf!gNa`1qG}cZ_&nr%VT4#Dt`vRfpi>aL8Q-7zK9k12YMtV-W_3 z0wL7?mKs&xnYCQ67P-mED4g6)zJImr69_|06aOJnHMJ!Wh`vD(cbEXfFkvLj(EP?9BcS@p-$tvdE_e{JzP>q) z3MMXJp+F==LKFxDLbKQW+P9h`*)MZe7K!Mw+2`l!Z7iK2W^-gG81V8)KL|Mh$&ja%wF50;Bm z$Sbe4*~I>@CU#vpjdwp`o9z(h4R4=qYI!>%ma3P&QMP|nAVQbIKKbErJ}p4RB430N z1{6e&gn@-=z^dzur3?n+*KSNi7%=J57`l3Ub8C%P9~zkV)VG2M!ZL gOc7wjWPqW60UiEvMJ8CPEC2ui07*qoM6N<$g7+=6EC2ui delta 1650 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 Ef`KHJV*mgE delta 939 zcmV;c162IB2H6LY83+OZ005sFx~h>OCw~KbNklyR+TvC=hqIv(NpW-}#;2`F|vg@$&NW<3Qlc!UCcn2_eh@QGZSW z#*)NP5Cwa&2v{R(EavL368DzM;>IHHtg1TR&|tM%rC>1F;yc%L{$kC6!=yN5^KzU` z#SLfPSk7-=zPLX;FfukO)gC<5(?8^>aHU$w3^LhN+ystA!dE)mEV4^>$}W~iyPu>Y zn~Iyl2m*u0!eyGU9GD^kn~FJjet&M(*LWgJpPT*cYxMk=9~u(*%Y&arb1)~Y(OIE0 zG85P5_*(pzs%n{fTqPpuiGTJ34;yeAqQ>VcpTv-f4XZ^IbFfBUaS|4+pkpSoicHHI zQ@%ftflg>BsgV@gVB{=ubuHd{+T$$A-{rOr5BPzZe(UPxijw?lm-YG6Cx76b+28Kz zB9<=evnddz92FT;mYWI@TC9=QlUBkvi?hVGCeM!QJ&P;9r=~wVdN8i4anMHw`eG5~ z)8g{f^!vB3W-#r`(ZRl`68`w@J6OJZJp=t^bgnaf&0tbBor@MW&>HywkdZKOT8t{8 zrKobYtpnIz?)0`_LL>_XCV$5}yKWQ|7TL>XZ+j>8sRbq{I=ikH7H!on&79|AcuOxA zzN<5!rvhiT$e0+7M#`LWf*aVKGWbYf1aaGlPAu(C7ZoKcx{|c4%|R@a2Io4HX^Bla z-HT*}>mafy+RH1TV%-3?R<<`l+%YB0^emB;U5bWN>k^w+B-SOeK7SWUPbA3LGsYr| zVyQzebIA9G{J_zOGBMPz(SpZLow;+fYfX(usEDaO6XU8HiG-PGbgpw!2tbU7ho}cm zziflhIZNyvd$=$+yW6(K*Knl%WK&^LG3br09d?IYQ)%_$4A(IY>oCR!BxyI5Ss7 zKw~T-W@Kb$Wo2h&WpOScgMxyRkdU{wwz#*qzk6Q9#KhK#Xx55o+}zycNFwD(BIxMo z?@1!>N+R$|BJfHh@Jl4|OC<4CD)Ck-@m4GHU^nt%GxA|H@?kjgYCZF6Me}Pt^M7kV z^J_-*bVu}bNc40`^mbG9eNpv&QT2UO^?p+IepU5=VD*Jx^@n2hiDvbSZuW&-_J>^d zhh6rFUG|P@_K;`xkZ$&qbN7#C_mOA!mT>o%arc*X_m_6}m~r=+arc>W_nCV4op$$~ zclV%(_?dF}o_F}3dib7u_?~_EpMQJ!qlWmUgZQO{_@#yTrj7WhjQFaR_^gfitdjYr zg!!*M|G=Kk&H{_g4i@9O^X>;CfX{`T|! z_VoVu^#1qt{`mF&`1b$*|2c+)j{pDw0d!JMQvg8b*k%9#0u)I^K~yNum5u9L5@8U< zx9GysP0I_kw9%GrLAjM-;(vxx5EUz{R8X3hNkMo^E1`_;fm8@3%>Ub&eds&<-e>lm zIdjgwg3y0R1P({5>~_)aaM(o$t7tJhcwztV62*i4g3zj z87y-LtOe-W*CW`D8kVcw!yK~-qR}yCOccb{`|TcJn26nug4x3J!hgNV^}_mO{K?8% zaWTGFT#HBJ4~m5s*r6-TMpt;t=I9;7ZUn&$Q6*eymYbE}8){alhWZ*zHfv>iKSRmj zQ%ZhsmTR?e&;qf54pQ_|pKpZpDVl#p;lL-F3T%-6Z9Al|(#^(({&71+DLvF!W%KAL zVuKn;(1^BK&E;~{*MB+EG_C|`J2_1op~PlY+kwp6A8funh?tLwkk|M5cP5+3MzZAd za@``|->lbni6Yl2OII_*+een$huDA$#z<8k|GA*5cm2=MazXmA1(mL-zi3OnPkvSP zkFj|`MNDCaNm0)ItfxyfK8KbI(r~@BOld_)(?dlm)tBGV9DkcnD~QP+a5gV{ z7KY?&(;oTal1D!O7WYDa!XsmQ3fqbN(vW4APa@_%(J5{>Vv-ZM+CD&Xio&kG;}XD! zRTsVhGqw^M2z*K0v4y=-?_S~X{$75~<+KFIPRWY$UnEyc!PFY~wY~#K1fhG6y+dr> a!avuZ-sd^N!;EG;%b zTY=h&m$d5PmK0Jk)LZ&O;Kis>9>ADr6k_B7VhL6gP4GfU07E3ifJn4Tc@Ww_MJ!k; z1yWGJmeLkln^J_rX}f1H_gQnXihXY{SZ(&VC2b97YGg3hLBRby4U@~Ur zOoW3;@fLzzmdN-Y{at2K*03g6j9AJ^R3_#?DVYP_*8w)Q2v*xMA*nq&4+y6Nu~AqT z{sc2e#lD&~S*)|POxU*vVP9$y@=8_?xIPT)+_Cr>!Gvst9+^ib={ML5tADdCZqGVZ zALmme&j~&D&>%G8M^<){U4ECeaX&DO4yUA+=jKC;JTK<<^{X&X9zuBe8ZgJv>pft( z1yG73(0A7$^k5;h`Bem91e`#HNR~UY;S52mM6>KX#Oil}O({Tl*&1??c!#b-AwG8I z2&|4X!k%@p1$>|fO3{;o)_;i(RlW{odWp0kDWE&S?56kPUB=E`iwuEai4}ftk$*!AGMMv0`8(3bpLngdPH+Or9q8g`VCkavZn@ zl}4-cFF{*vO#&E?-homuTY#`{49LL!Rx5z9^ek9^H;X{U>b8q&uudO=LS-(F294g_ z@k7Zk5&D9+hb&JQ7=K1aQXY2P1!n&@AfH>Iba^^OcI0E%JXudAbQWq+nUo%ZGeikq?FF*C-8B`~A07NKXB zBXi?E7{4EYHakLPRf3T%@6)D{#2cjjx?%^vMaDaukhyjTtnN#6#;Oo&_zqUjm#}QAt`+DMkJa9q2FVVmS(AWKo1W$)UIv(?)TiyU$yu1v}yQ2U^NzeVzq9lN_j*nidcZkBsLiWdAnQsWXIb zeb=Xm9j;CFS?Dm)kX{J3YUN7)S#Kj4?*Hah-3QYayQN6QX$K!<-fQ`IACoS{#LKjD zMHWn{&i2@GalFD@-g`b?_zdJ2T_HMPc zLRr1xBW`?n6}V%|&w_ZD$1v%0Vl3qjqq{5S90~dO_Zg(#Bw6>c#{u)inn!yw+@Bs7 zXp+Cwodj*_6je&Kz6#=5(@u)ew)<>lqjifrH-7;&P)t-s000063=<3)CJzq}4<9cO5D*g< z851Ts7A!&;BP<^uA0IzoARr(kHAyB+aw#%ADN=kaS%ohzFE3w@FfcGPW|=lkVm4fY zIYLZ1QfxeFl|Mf}KX0EvKtMonpGXtXYGsTz`3$ zUteEfU|?o!b7qXPW{k6GgPd<~Z*XvMa+SDqmbrg_e}A99fPjF2pud8ZsEnw^jj6_u zkB^X$keRZ~nX}BFpP!(hpryRhro7XvxW%upuduMNvc=f5wz;#$*|xmHzrVk~&)>kn zz`)So%-H44+2+sB&(P4&*y8KiM_HG1-t43*xGQ z@x!Ifq6w=Z%_uBuV~F1@W|Ro8QG`PG zVb;=6E+TM>ACC0+DwI*dn}3`?5d{x4B^)tTsB+fq8%^{)6pqx?F4ti8_2o4i@2)Oy z$slR-kRDPsX5RMu{Tpgr_50^!=puDaU{FJYux<$Qml~JEprab?&HKp1?e8x77k6yC z^Zp+?7K(H8!gs?Hur)$DrEkZRNU|J`2yN1x9qz<1#-&N5&3R!&Ie!AD2iwHmAWved zV3N{+k+xWfmPoffdHOw#X_JBWr;~^u6`5~W<2Xq~LIJ?mKM=o^O}Z>Y4yG#E&vCtEvc?iGCk!JTQu;UDkn z^2j}2G2}Wyj4@vM1OW7hlmG(Arl;9qOlyI{GlaT20ZeY_>W1Ap}7urdg578Lp^JPojAR)!+(xc3$_d4KbcqL5AP+J7> zPzuQDN14xm`npgp9ims(8Xjd{*6jeq+G2st2r7CutP{g!vd8;NG`aca74_eIvNjYz z2_e3=SjP8oY&z%pM-R#ZyE9dCuPv^*5IH+$KRTwV01c+L)#TFu3y-E+aW3)?cOGTp TvL;#^00000NkvXXu0mjfEUq7) delta 2011 zcmW-ii$7F(AIE>^oVjTZ24f5rhvXTX>L|CB$DFYeJzb<$DfT&{NafNqSxV-(hTJRZ zqNa9|Rkqns*viRJ2+bx*7e-W~jda=8CC}79@Ogc{-|zeT`DE!7@bXPLFaTgF&wX}* zrL&Cvi;t&dL)_!76Kh>RkM*lk*!pTun^nacjYh3jgV31^Lcri5ru$$R77B$727^N7 zI~N7kfY70lk$Y#veZ9TrLoTf)OdgSqT_}Lv6Q?**9$rPA-J_u)`ANz;fAY)pez}XU zuSC-Syy?*R_&CZ36xeF{qbgmdI~zsO!COG+!IOA-d9li23Rv|7&`KX~Z^Fn6ZIypEf@G=Tuly|PDL?R&@gEzayJoh9~c)(sPJ~OU{IoSO|H*3~Rr@7WK_ZCCX zr(2%{LhIbzT;dLN*a?5GX*pD}a_NCi6!DS_9qq&-X= z)Cq+bbV%?gvn_=v+;a`qZon;;YJtP&h{g4Y5LEnn`EtE%#{G-Bw_YYoNN}_6`r$gm zKB>XO7^8>|*h^Qvnr`4Vza1TAKZc|{vwT50fEarOGW^Qa z^mGy`ze^=DSs;Ep6og2h?#IDIj$s(Y;29~*ph6l)yc(04T*`cT=F28sbiN*DsGIN) zt>%G3*E+}wJm5Oa3g^7=F~=x*0Vfnf(4in{m_@)$-%%(lwqr#>`QHb#*kh_DYKOsA zep&&CN62Bg*oHEfF<;t{AI|~dgVEsx0BlIg!hYOlgzhf85mJWronGVZoiji(*t+KinO|@`_^lCUtSK081 zCEZJFZOXS*M0H(BXR# zkV6{iqX_8?g~vcb!b-+3)~6Pw@N0P{h%sIn0|%{l+x@C%%e^EWPP@ZTi=2L1xypCa=1^$8d^eDb5NFifHL3%R{nOh@qqYvJoUENF@7<=WnJOYv4a8v1V=?d zou*n0!{Kz@e5g%#YJB46x*Zlm#+V}0!6Jk_*Ry9zAhYj)U#^tjp<;4=6kwEc8TZjH zxYUw#V4nA%dSMub$ARq95xH9O^I-*^clrFpt0=LvMSYX1={Dd>0zaK?nzv}1_ApHW z^jP@G%7FF@oFRFRNs=-5TqLwz6yn&DVqyXJ5G*{VtYsEr6nEnC?+Q*-U-^LdjzcBF zFd2jhFY*cSyWIE|ah}c~NnVJ?Lj-Tu&paUt3zBmq-4i=&G?+T`rvET)tuKA?YP6p6 zBf=nNQs!LQ%N64@VS#>MU&()<0U5IrZW@A~u~$8aHl}@dct>YQA40BXR#y^6jpb&_ z5eai%nds&i7_yU}+%A|5tc{gjjA(s)EbkxF{MHyU&8X|T;IvOpmtqder#Qzd0n8b^ z)P9GT`QXk<-9SRjzU}HO&bPE}n|#wAMy`^yhVMt>r0jFUMfqY4&(Z%_Rrf|rnE&nj)n>A|7!)-m9iWg3mo~#< zcPhKFJAZvxGlqFW%Iho^+897nRnES^)vV0$$X`D%WM9q2cE^)Dtmcy>84lWv zh;H6t9gQ~Gis?VC)4bD7EPysfQbYP1DxJ?r8cc`ya`}y$Zk~{+uX;KB%k1Z-+WB{X z&$V4AlO2fXzQ&-t!Sc#Fzg@?=7>E(@iG;N&45t+V)xl-UE=*5?{StA%>Uh2yF7i3~nW1FRv6}_QF>5Bi#Ve;rKsgdHnu0zfny?F$%hi@D` zb4LHtRR6-7=2FMI5hqQxS6VEJVf=gJO9il?se`9d0cJcD}2q(QE(;FyR fS&-EMb8vu$=%1Q{JzA@+ap1FjjpuJ3Wb*$3boD{g diff --git a/r2/r2/public/static/submit-hope.png b/r2/r2/public/static/submit-hope.png index 10b22432a5f4d9382d0cb4ede3af178a31a7c252..ac1af1c97a77745e781e526984dab150bc7e7876 100644 GIT binary patch delta 1891 zcmV-p2b}od5S9;+NPh=7Nkl3T8pSy#ZINI^{F$8_Q{TyvD14y(@yol7T>#X-#I6!v;1c5 z^{u`4ItHV2w&WIs0XYg(Ms%K&brmsr2!#<{G;Dh3v%D|0TBHH9?nss=*E$~?R4M#ln2q1{YjHiB*7qci=!Y9?qo+Iki zkzq46l!K}4`lM3lFJY_3p>OB$6@w<%HhDg->mr{2rDVbJ&LU9~bt zDJev)4B_E$%ID(>jXFakuG%qIh%u^&0k^uXOP{&_?AMKrjTisEo?W`L$>yY9HiIX9 z_Lf`)d4J}JVXifkQD|}3jxt|=_S?ehw{L_Q)lZ(UpF~j4<bAR~zz)^kBSq<(XCy<(hPAWlkh&V*$ zASmfGHy|b1P?6gjYL_mwu};r(gAK-tnxU*Ny;SRHulUnvZ_+w_f@D*XM4^pv4$Akn zWA}h#7huq_8*qTm0TK@=ae&Uj+R=GTdHOT-qlo6z>FXfcc|!F78Lop4Wa*pl)*e0q zvVZ>cXMgV;40KkbK6~lQAO8I3#Vd4%M&^OPeD#{UU@WfyY^Yyr4<0+KaXz%;Qc7iq zcoIzF$>(FQ>bLLOk7rdsth86{hth!{PM~K)GV{qAETHu(@6?Zho?4{m!FKdxn#JqD z+18Xf>rc$Btv><2y?&Gp!2OA1iQ|`mKY#z@Z+~JoP3g-Mv)q_Iy|TT2Y?gKvwoE}I zhv5tkiHDhOmHm_uPx*Z8Reko#ep^K!z+Ne^RrFHHdM`gMUG@9-9bLNf5H>w{`U~`? z7Ovs*RLCto&kD2vIeOs>9A4G;Zu2CRiMflm%0AY47x0;jw{6(iOO4lH3zCHuP=BDr z$(UI3II1Wfl}tD)oqhEA6h>?nNkYOFK-ig+XeSWwwFQ!7;4&E+!taLU+=bNQRUpuU z&OnmVTm`2Po*?BlD9t+Xv4ty?byFia6EZo#*?KvK%0mbwB~JhY%jaX;naJC@4`2fX z=!CMIlmMJ?+hYs#kOzrP^nIA-MBn|^ZYU|qQ>PsnvjACfu6CG^gJAlVo-nt`#Fh9g+%^6%`5LF>?L$7^q7>MJU{Z_ z;PJ%Fxw5Wlz~ai?m#;Poqv_zlag2WcRzVbg(C$(ih`5*jp8OXam;>|Ly?^hY|Na*Z z>5<$tkj$5P5kCg3)5XN>Ip8p%Fq#70>Nn>^kfMj&i=PiZkH5=W)|uz;hEt)7#BS2N ztirqEN~^z<{_L07fBW8}f<0p(vYwj1 z%wy5>(UQ(n^UJV>8)2-cx_^J|-Xr|OI=2dqyh|c+PQRq(Qoi4;WgUo8gjU*)cf@ra zL=Ba8D%*`KDm9-X++M0r>lD8}zl;q8+#*+6X(x}>e5T{+}uxy1!ZsCZk5uH|Fo0xq#oPUR?`TC+ZTrIp^ zP=aICUWL-OtWuynr4lShJx`0Jqy+|9id$$LoxT>-i<_wgLo;2qT8NX*PLmCvP_-L+ zs}7iN^%*mjt`9dx!D%tgp)fpw7qw7S16Ew!BHz~*Z?jgcqsbzG&`lb_;#GtU?9s>| z@Df1rvcFkwz2<2GjemQ+P1zpf7TRe7Pi|(jMI|(i(wDM1F5hn!Z+vS}e5*GGL@SO< zS%jsaNRi^WA(D++*clU>8kL12GV@p=n>VUOF=Jg(T$!Vi$FxF|FfofttDXmU0HTV- zw!Rm&cnQE!hjDu>LZWz!9aSOF-~L+1cyVKxH@~bgmyzrjK-q6<^F dcRi*6{{!RVM!cQ%uap1)002ovPDHLkV1h0hs!9L= delta 2094 zcmV+}2+{YJ58n`wNPh?cNklYQ@=(&c>5^Y_0#?|X3e zoo~#6A^kU;r}7S&J;O>1QW$i=3MkX%Y_3zget_C#Pk^*z_rg%nuxbh zDq+G$`8Vg~0BuL;bE|loDB}Y7o>#bH0)td0MQoEqi(X+RI9$)KYfH3&WQ46(gi&Hy z#~5%yTugx&8GlIn#-|KoP^6V{Q1!t@1;B}zLhv`>`lr<7T*+hP~zt(jKPkw39IT(@=4kXVm#yq(x$LTQPdUEc8?KrV^_RNih2ZVT}9aZ^*{GOn>y|lTL{ zX(2Nt*!pGwAsz!GmU+ESVJFvE0P|SkN-~2a0NgY~F-I~&7XFnGA|2*Hh5~;`S;VCn ztQmC7h<|F;Ee@ICE+Soii@6{eavw~TiZ7X0Om02GwCXa6G6dghv@fKx+H!C zN(p6F-1|Hcvig!*jv9948*`>Ecz^Z1^IL0cYk$X_d7|cnlt(rDY33!vlQUaXaWIJT z=u{%7I%`pY<0-rOHliykV;1%+>QtcsTO{eiLC?;F0l&F5ql)AIad#fEC zo9wWwpLB8KV|Tpt_Gbdpnx%8gdwV-JY@TubrGM?&Uq5l|yqWbEjvd{)adS`iU&y#^ z>0|r*9WeLq8)n^fdH23vsHs`>_{`ZiO@Hj(zaMWQ(KT-&h3aXi9M>>)Jkp zhkv~C8%c(uiZdT826XS=J2RFlFpQXdtE@%fFyPdVPKb|@A0hm>?x*LQS{kNZzUs}# z>#w@F|G)vJv$!j!m8kS7F}Vrnj%ZxoGWmfQcl7Le`-#~DYWv4P7~eVRqM7qveSdi2 zvW96Bp1S9Tne$$G`pr*pjbWn&*Tof|ezl;f1=r(eJ@e4~#hge)7|!+N#>f!s0g8=9 z48O^-v)n866G+5}g)|UvLLrKVoDbq_jmszB|J)~S>l>y`e0lC&j8>FPNa3zU0SFrB zURt)Y?d!E$e*Nvy1xx$azy;@>E`Olne&;Wp&7ZBt^}C<9cW&D9Uel+zKKG21QiZ$A|t}%9P-G+~c9yBoRGjUq)+_j6Ov45lsp=w=M z)WC`&6*ml#Q$A}V?x1VpOPQfWh-$mzyw+xQPYrC&E!IEDDC=Q%NcDQMeURpZH^tg)hhQNs)jjXqKro^)%5Eo z2qq%djLCJY+t*hrdmp_0nm=|_T33IkDU)5=nh&Y6+QM^3z|u$PsgS>&HfnfzYj@YS zF3n?*iwWFrDM9+tYk$BRXN8P`$AVb~83u9Gg9i?ne)T1zh7H{ppnvVhO}9P#LRWd) z_O0c)i#~Yp)=4w!$1QAX{$X<&%<<;G{^6WEuf_9UuKVSd2cBg*f*dg3$(VWLn7jii zeA&|8Qg_ahd9$8>r}>q}Wt8u=DbxC9ElU~zz~lT=I&hFnb%s1Db9Op4XxiCH@k`@} za;6*RppX|=9b`Z|S%2x6tY&L3sOWl*Qf-2aFKB-b#VHExiuK2ID~bfw-8;EI2%IP~ zZ|!qc$C8*vGVcTtZcJD~Mn*J|MbzJJQb`}52TVR_fZ0r4vE=gM40N{3?<);6Zh(BAP{+>;v_-3anJvJD!mO=x zL_*5!9JY3mg^ zY}lNIiFFU=et#}^L%E>+sErq3b9JGwlVR7pLM%}~tFt=uGe6S&X6mLCI Y0FIC3KY#~ON&o-=07*qoM6N<$f`4)wcmMzZ diff --git a/r2/r2/public/static/transpLOGO.png b/r2/r2/public/static/transpLOGO.png index af859e561e911cb9c88105a55e84cf9f22b24aa8..c5202980d432aca9771b416827d846cda69a18f2 100644 GIT binary patch delta 1176 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 diff --git a/r2/r2/public/static/vid-collapsed-hover.png b/r2/r2/public/static/vid-collapsed-hover.png index 1e8dcb272c95c002e962394543af3c03c106a953..aa22bca6c365caa20465d82ae0cd0a160109de10 100644 GIT binary patch delta 299 zcmV+`0o4A+1Kt9V83+Ra007tYB$AOKCw~BMP)t-s|Ns9pW|=f)mNsOQH)WGJV2C?n zh&^ePLv5Exg}6;{lu&MqP;ih`n$THvkXd<|U3ijTc8+t3p?8U!dyb)flc<@ewYI>? zx4+1@z{$PF&%npc#mv&j&C<)!*VfwJFV+E@%j1r|Ns9svq0004WQh!cU z06^y0W&i*Hcu7P-R4C7#(%TM#Fc1XLEeKMfqFj`lf;#{IjXcyQ0@DYX$CFLd%&v&h z+ZYiOscj-7TCwO|eoeSPr%S-R1@0&A_>@QLz<3T;-oU2I**x$_nZJsVy??VsVd;JL xo&5FTT^|(jDt2hYdV{CWf8G7xw-{f~J%T783+ad007`B)S!_eCw~EGNkl1)~83+Ra007tYB$AOKCw~A}P)t-s|NsBCwzk>X+1lFL+uPgS-QC{a z-r(Ti;o;%p;^O1ulq(=H}|^>hJIG@bK{Q@$vNZ^!4@i_V)Jo_xJet`1$$y z`}_O+{QUj>{r>*`|NsABy@;9s0004WQchC$S0_}%8vffh% z$|rZAd2zo|zuX4ar~A$1_Fli2(yiCItu3~0VRZKo+nY=5^QedUQ}<2$!vyedDOgx# RNEQG9002ovPDHLkV1i5touL2# delta 325 zcmV-L0lNOb0{8-u83+ad007`B)S!_eCw~DNNkl+y!ku+ zuzrhYHxxXnxI3}ulElD!Nf_VZ)k#|@%IfNFLMer^ENR=ezze#rgYWx<6h%Q5MPUVA zK%v7hfP@dO>w+kXT$R^#4FX( z{M=~Uw%PO%Lij1SEDM4l0K+g|h~qf^PC4e>aU76knNJkaQ$Y}z1*U1fZNXdQnCD{` z|Cs5s6_4*>7~Vf5NkWfZLcc{6MKUinUYR$G}pw-00000NkvXXu0mjf$>f_W diff --git a/r2/r2/public/static/vid-expanded-hover.png b/r2/r2/public/static/vid-expanded-hover.png index 594e962e826be6c71c22187a332dc5a849e78b4a..dad9b1b2712ae0ba00fa4d1f8c5f6928b52ead17 100644 GIT binary patch delta 288 zcmV+*0pI?*1JeSK83+Ra007tYB$AOKCw~BMP)t-s|Ns9pW|=f)mNsOQH)WGJV2C?n zh&^ePLv5Exg}6;{lu&MqP;ih`n$THvkXd<|U3ijTc8+t3p?8U!dyb)flc<@ewYI>? zx4+1@z{$PF&%npc#mv&j&C<)!*VfwJFV+E@%j1r|Ns9svq0004WQh!cU z06^y0W&i*HZAnByR4C7#k~b27Fbo7`z<>dha}N6d8!4cIqrlf`N260B(&{Zuq@{RE zYElA88S%`=d|p!v@s7C(Fz2K2AZK1;>%m*T)F&vPc?uEVavRmJCGs62(C4^U4w|cU m@9_3F-RB?vb>EMFI01Eq4Qy>qHw^&*00002&1}hT(iXoD82nePZZYw4GtsrPmC97&*yK=NN`> zJ9M6*Y}z)4A1pwZGGY&cGc(h08fcO}3z0TFT6g?^{qP~x3oTK3`QcRLQq^!!WeTeE ls0l#kfy`y3W$h0TU;yN4bChgury>9V002ovPDHLkV1f#3x()yU diff --git a/r2/r2/public/static/vid-expanded.png b/r2/r2/public/static/vid-expanded.png index 814f939347dbc6ba1ed97cb03feb65bfd67874d4..f517ee97496afee8fcd3ab6cf03e05cc387730d2 100644 GIT binary patch delta 254 zcmV-83+Ra007tYB$AOKCw~A}P)t-s|NsBCwzk>X+1lFL+uPgS-QC{a z-r(Ti;o;%p;^O1ulq(=H}|^>hJIG@bK{Q@$vNZ^!4@i_V)Jo_xJet`1$$y z`}_O+{QUj>{r>*`|NsABy@;9s0004WQchCJJ* zm3vFQ90Pl&KUrO~kv>h~1Dnggt!GdE{^u7@?Kg1`H&6>H`b%ihmb*FtA24-g#+GV$&LIOplayl)J<3L%KN87gGD$BAEMUfCiQ5?FipBr37 zMu%a5q(u+}P*s)Hd0p2~aAEzfc;EL}*Of(FK5sNlgKgUoh9L~Y;B_vg#Ih{NvVRPB zk}%IRpYzA+y6%jLXfjRn$3(q-P-?QOs?M7byO+>1O%u{IMV{vv$MG5z_kHKd{Q048 zx7*o$LI^%_*LC4}9u!64qlGy4eIJ^p@t{bVl0%BXw(XB2_(+_1zW>GFGMyyJ%dLl);LFFc5~LPN0|G40tf0 zFVOdYj-Cs(#6#%NQs||avDrhGG{jhS_dg9zK4&J*Z)UA!8H_y#26!@zVEfx-xvpkV;Ezm*oQ$xrPOq8V~l@N z3K3%l5xcH)Elov4UDtUmv({d(*URM+9dZExgwNZyEz2@-Z^z^D^?JE@x7!^Khv)#X zi2$G|ie#NxCeL%uxsO*dMN#-VKG?uyS+pci2Uo5?)ZlnzI)EWP16V=nE$3ih^A?h z-A4cm_dp0CrSvZF;+#tk#9d*L5BJ;^KXCm}?RMrU0AUYeYPs&u!a= kEq!EXbi3W=Qh)K!55Twq4rT4tUH||907*qoM6N<$f>!ImoB#j- diff --git a/r2/r2/public/static/widget_arrows_down.png b/r2/r2/public/static/widget_arrows_down.png index feac5025ef0da4d85df3365475fd5b6a021547ea..671ea70dc81957a9bd2ac12fa4863b1c940914b9 100644 GIT binary patch delta 360 zcmV-u0hj*m2b~9y83+Ra006_4W5BT?Dgu81bx=%HMUs;Ll$8IPn*W=d|DK-zp`rh$ zr~j#`|E{k8u(1EMwEw%i|G&Tg!NLE=#>UCX$;!&g%gf8m%*@fz(bUw`)z#J3*8kVn z*Vx$q+S=OM+W*_z+uhyW-QEA+-~Z#||L5oD>FMd}>gwz3>+S9B`uh6+|NrsCcb|U% z006s5L_t(2&vnq-5`rKQ24L|l7N96-g%OtT|A@^>rc2X*!QmTVXNi_D(YAQL0&(17 zv4RPE6x%Sy8oSF18-X~%e1!Az1y9lP5D?fx=B<|GoJ&-_Z`-yh~%cV zz9Mnf+BxX`_cuZ@N~sCSnNoT}QkPU^StFr&o>L@MmSq)^B97x?lS=|2gsk%fXAEpf z1Vdu{El(ft?+ob*>9D`7fKqj=H6$b%aHl3VVej|DlReAAFc8PDZM44N=HMb| zm(s;qI*Omt4MwTZtKQNl6HDU&X!Q=5r!>WE1 z_x4q_f8m1^seK=!DD~YgOePJOFob{WHTC^|GbWB9j#F=%&1#FHcWv!W^MC#T!ZjrBpEBP-00000NkvXXu0mjfvHi}p diff --git a/r2/r2/public/static/widget_arrows_up.png b/r2/r2/public/static/widget_arrows_up.png index 941fbbed09dbc046a495e55d3769ddd3d46eb505..b4a914bfcc642c3804bba12ecf3f75ed72a6558c 100644 GIT binary patch delta 367 zcmV-#0g(QY2)75283+Ra006_4W5BT?Jpz9Kdr(YNMaIU)$;rve%F4^j%goHo(b3V= z)YR40)z{b8+S=ON+uPmU-RI}$>FMd}>gwz3>+S9B|B7D!i(vnZVgHkB|CMe3nREY} zcK@S+|E7ljtd0Mzj{mcl|GJ_7zo-A!$N$&J|Jcd@+Rgvn(f{7k|KHR9;MD)*+W&w5 z|59=ChyVZpyh%hsR4C7N&}kEbAP@#%JWwpcLh!_c?C}5p!UBeDX?ni^&%o|1XbXe< z<{8Q=Rw!C>slR2eIp_7fi#G5k?PZnRMXpX9Ts)!eDov`Yvg_UV>Vyy-=sq+}GXPO- z+bSSq-}fVsNhvh}xh?bZ2xkBNjZj+{rL+WcB!nD*6j_!PKnTW|0Ljxd&4J)3im;bc zY=RK7YiaHJNR5*>Dlf7=jFcgJPAm*>#8cUIy zsL9+uN#CF^(0Aw)bned30jUx~>KdtHKrD!%0}Db({0uBuSx8G;NN@)tCzzxpJ=2x1 zzw2Y)YlU-;oGPSd7UP`EWPsNvOa_^mQ6Ekn-=A>m81*wS!yYp-1psMwbX_+LBaRV548zcMJ-#+gp0_== zH>s-XF@UtWW{gdzQ`@%VmLl;Kxvra*`p^IQ1!H8`n>$6*ApigX07*qoM6N<$f+Gpk AjQ{`u diff --git a/r2/r2/public/static/wired_w.png b/r2/r2/public/static/wired_w.png index 9d0f490499a0f9954264a7730b2f823fa7c1ebd6..8f78d2e19f897c9cd8a17c13c29cbd8c89ff659e 100644 GIT binary patch delta 80 zcmeBT{lzjtf|HS%fq_BQHdkq*q8yVoTYyi9t8v=QfB*i?yS(-SG)|kzKnh?YNi~Xw(=$>} z&q&43rp$&>4Fjox5iKo2BGoiwHX56HHV_0P+W-L6z!YQ_6O_yV0000 CVjn#K diff --git a/r2/r2/public/static/youbrokeit.png b/r2/r2/public/static/youbrokeit.png index dbcc92d06f4a59698d69adca2f8b12e9b4fbb026..d539c7ee945f117e77b1d52a842dc925a663dbcf 100644 GIT binary patch literal 9583 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 -<%def name="awardedit(fullname, title='', codename='', imgurl='')"> +<%def name="awardtype_radio(val, label, award_fn, current)"> + + +
    + + +<%def name="awardedit(fullname, title='', awardtype='', codename='', imgurl='')">