Skip to content

Instantly share code, notes, and snippets.

@shawnsi
Last active March 11, 2016 16:53
Show Gist options
  • Save shawnsi/9bf7e98b54d49a6d993b to your computer and use it in GitHub Desktop.
Save shawnsi/9bf7e98b54d49a6d993b to your computer and use it in GitHub Desktop.
Apex Record Redirects

Apex Record Redirects

An apex (or root) record of a zone cannot be a CNAME by specification. This has implications for domains that try to integrate with virtually any cloud platform (AWS, Azure, Heroku, etc.). A common pattern to mitigate this issue is to perform a HTTP 301 redirect from the apex record to a subdomain (usually www.domain.com).

On the other hand, using a single cloud provider for DNS and underlying infrastructure may yield proprietary solutions. For example, AWS provides a Route 53 alias record which can be used at the zone apex.

Alexa Script

To understand the prevalence of the apex redirect pattern this script will test the top 1000 Alexa rank domains (as of 3/11/16).

Prerequisities

You need a python 2.7 installation (or virtualenv). Install the python dependencies via pip:

$ pip install -r requirements.txt

Usage

$ python alexa.py <limit>

Results

Top 10

$ python alexa.py 10
Checking Alexa top 10 sites
https://www.google.com/?gws_rd=ssl => 200
https://www.wikipedia.org/ => 200
https://www.google.co.in/?gws_rd=ssl => 200
https://www.facebook.com/ => 200
https://twitter.com/ => 200
http://www.amazon.com/ => 200
https://www.yahoo.com/ => 200
https://www.youtube.com/ => 200
http://www.qq.com/ => 200
http://baidu.com/ => 200
0 errors or timeouts
8/10 sites perform apex redirect to subdomain

Note: baidu.com performs a client side redirect

Top 100

5 errors or timeouts
76/95 sites perform apex redirect to subdomain

Top 1000

72 errors or timeouts
719/928 sites perform apex redirect to subdomain

Known Issues

  • Client side redirection is not detected
  • 5-10% error rate are common (the GFW may be responsible)
#!/usr/bin/env python
from __future__ import print_function
import sys
import grequests
import tldextract
try:
LIMIT = int(sys.argv[1])
except IndexError:
LIMIT = 1000
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
def urls():
count = 0
with open('./top-1000.csv') as f:
for line in f:
if count >= LIMIT:
break
_, site = line.strip().split(',')
# Need to ensure we hit an apex record
_, domain, suffix = tldextract.extract(site)
yield grequests.get('http://%s.%s' % (domain, suffix),
headers={'User-Agent': USER_AGENT}, timeout=5)
count += 1
redirects, total = 0, 0
print('Checking Alexa top %s sites' % LIMIT)
for response in grequests.imap(urls(), size=32):
print('%s => %s' % (response.url, response.status_code))
# Count redirection to a subdomain of any sort
sub, _, _ = tldextract.extract(response.url)
if len(sub):
redirects += 1
# Drop client or server errors from our counts
if response.status_code <= 400:
total +=1
print('%d errors or timeouts' % (LIMIT - total))
print('%d/%d sites perform apex redirect to subdomain' % (redirects, total))
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
grequests
tldextract
1 google.com
2 facebook.com
3 youtube.com
4 baidu.com
5 yahoo.com
6 amazon.com
7 wikipedia.org
8 google.co.in
9 qq.com
10 twitter.com
11 live.com
12 taobao.com
13 msn.com
14 yahoo.co.jp
15 linkedin.com
16 google.co.jp
17 sina.com.cn
18 weibo.com
19 bing.com
20 yandex.ru
21 vk.com
22 hao123.com
23 instagram.com
24 ebay.com
25 google.de
26 amazon.co.jp
27 mail.ru
28 google.co.uk
29 pinterest.com
30 google.ru
31 360.cn
32 t.co
33 reddit.com
34 google.com.br
35 tmall.com
36 netflix.com
37 google.fr
38 paypal.com
39 microsoft.com
40 sohu.com
41 wordpress.com
42 google.it
43 blogspot.com
44 google.es
45 onclickads.net
46 gmw.cn
47 tumblr.com
48 imgur.com
49 ok.ru
50 aliexpress.com
51 xvideos.com
52 apple.com
53 stackoverflow.com
54 imdb.com
55 fc2.com
56 google.com.mx
57 ask.com
58 amazon.de
59 google.com.hk
60 google.com.tr
61 alibaba.com
62 google.ca
63 office.com
64 rakuten.co.jp
65 pornhub.com
66 google.co.id
67 tianya.cn
68 diply.com
69 github.com
70 craigslist.org
71 xinhuanet.com
72 nicovideo.jp
73 amazon.co.uk
74 soso.com
75 amazon.in
76 blogger.com
77 pixnet.net
78 kat.cr
79 outbrain.com
80 googleusercontent.com
81 cnn.com
82 bongacams.com
83 go.com
84 google.pl
85 naver.com
86 jd.com
87 dropbox.com
88 google.com.au
89 360.com
90 haosou.com
91 adnetworkperformance.com
92 adobe.com
93 xhamster.com
94 flipkart.com
95 coccoc.com
96 microsoftonline.com
97 whatsapp.com
98 chinadaily.com.cn
99 nytimes.com
100 chase.com
101 china.com
102 bbc.co.uk
103 indiatimes.com
104 google.com.eg
105 cntv.cn
106 alipay.com
107 booking.com
108 wikia.com
109 google.com.sa
110 sogou.com
111 163.com
112 livedoor.jp
113 google.com.pk
114 ebay.co.uk
115 youku.com
116 ebay.de
117 china.com.cn
118 google.com.ar
119 google.co.th
120 amazon.cn
121 twitch.tv
122 dailymotion.com
123 google.com.tw
124 dmm.co.jp
125 google.co.kr
126 bbc.com
127 bankofamerica.com
128 wittyfeed.com
129 google.nl
130 popads.net
131 adf.ly
132 huffingtonpost.com
133 espn.go.com
134 buzzfeed.com
135 xnxx.com
136 quora.com
137 dailymail.co.uk
138 amazonaws.com
139 tudou.com
140 ameblo.jp
141 etsy.com
142 wellsfargo.com
143 cnzz.com
144 zillow.com
145 blogspot.in
146 walmart.com
147 yelp.com
148 indeed.com
149 ettoday.net
150 avito.ru
151 globo.com
152 detik.com
153 uol.com.br
154 aol.com
155 bilibili.com
156 soundcloud.com
157 slideshare.net
158 directrev.com
159 cnet.com
160 detail.tmall.com
161 google.co.za
162 txxx.com
163 weather.com
164 google.gr
165 theguardian.com
166 kakaku.com
167 goo.ne.jp
168 zhihu.com
169 vice.com
170 google.com.ua
171 naver.jp
172 flickr.com
173 gfycat.com
174 taringa.net
175 stackexchange.com
176 amazon.it
177 washingtonpost.com
178 reimageplus.com
179 theladbible.com
180 snapdeal.com
181 tradeadexchange.com
182 redtube.com
183 godaddy.com
184 amazon.fr
185 mediafire.com
186 taboola.com
187 foxnews.com
188 forbes.com
189 leboncoin.fr
190 uptodown.com
191 ikea.com
192 google.com.ng
193 bp.blogspot.com
194 hclips.com
195 daum.net
196 intuit.com
197 feedly.com
198 vimeo.com
199 salesforce.com
200 tripadvisor.com
201 so.com
202 target.com
203 youm7.com
204 51.la
205 9gag.com
206 babytree.com
207 liveadexchanger.com
208 tribunnews.com
209 softonic.com
210 steamcommunity.com
211 google.com.co
212 google.ro
213 youporn.com
214 orange.fr
215 nih.gov
216 force.com
217 zol.com.cn
218 web.de
219 torrentz.eu
220 steampowered.com
221 ifeng.com
222 thepiratebay.se
223 secureserver.net
224 nametests.com
225 akamaihd.net
226 americanexpress.com
227 google.com.sg
228 onlinesbi.com
229 about.com
230 comcast.net
231 gmx.net
232 allegro.pl
233 google.be
234 pixiv.net
235 wikihow.com
236 github.io
237 espncricinfo.com
238 wix.com
239 mozilla.org
240 bestbuy.com
241 yesky.com
242 google.com.ph
243 livejournal.com
244 gamer.com.tw
245 udn.com
246 skype.com
247 w3schools.com
248 rdsa2012.com
249 google.cn
250 terraclicks.com
251 hdfcbank.com
252 usps.com
253 xywy.com
254 shutterstock.com
255 ndtv.com
256 deviantart.com
257 onet.pl
258 businessinsider.com
259 xuite.net
260 capitalone.com
261 ruten.com.tw
262 homedepot.com
263 speedtest.net
264 rambler.ru
265 hulu.com
266 groupon.com
267 google.at
268 upornia.com
269 bitauto.com
270 files.wordpress.com
271 wikimedia.org
272 slickdeals.net
273 xfinity.com
274 archive.org
275 amazon.es
276 mega.nz
277 blastingnews.com
278 weebly.com
279 putlocker.is
280 huanqiu.com
281 pandora.com
282 icicibank.com
283 wordpress.org
284 caijing.com.cn
285 t-online.de
286 blog.jp
287 1688.com
288 bet365.com
289 seznam.cz
290 google.se
291 google.com.pe
292 goodreads.com
293 cloudfront.net
294 liputan6.com
295 doorblog.jp
296 ups.com
297 spotify.com
298 google.pt
299 youtube-mp3.org
300 wp.pl
301 iqiyi.com
302 mama.cn
303 1905.com
304 eksisozluk.com
305 google.ae
306 abs-cbn.com
307 usatoday.com
308 webtretho.com
309 wordreference.com
310 google.co.ve
311 kaskus.co.id
312 samsung.com
313 hp.com
314 popcash.net
315 google.ch
316 ebay-kleinanzeigen.de
317 cnnic.cn
318 webmd.com
319 buzzlie.com
320 addthis.com
321 adplxmd.com
322 51yes.com
323 onedio.com
324 themeforest.net
325 sberbank.ru
326 telegraph.co.uk
327 rediff.com
328 twimg.com
329 fbcdn.net
330 fedex.com
331 2ch.net
332 thesaurus.com
333 google.dz
334 39.net
335 sourceforge.net
336 accuweather.com
337 google.co.il
338 bloomberg.com
339 mashable.com
340 gsmarena.com
341 mystart.com
342 mercadolivre.com.br
343 google.hu
344 loading-delivery2.com
345 blogspot.com.br
346 dell.com
347 google.cz
348 ltn.com.tw
349 milliyet.com.tr
350 gizmodo.com
351 zendesk.com
352 mailchimp.com
353 siteadvisor.com
354 media.tumblr.com
355 att.com
356 chaturbate.com
357 icloud.com
358 doubleclick.net
359 sabah.com.tr
360 douyutv.com
361 kompas.com
362 hurriyet.com.tr
363 trello.com
364 medium.com
365 doublepimp.com
366 google.ie
367 badoo.com
368 slack.com
369 verizonwireless.com
370 kinogo.co
371 impress.co.jp
372 livejasmin.com
373 paytm.com
374 dmm.com
375 kapanlagi.com
376 sahibinden.com
377 enet.com.cn
378 irctc.co.in
379 nownews.com
380 blogfa.com
381 google.cl
382 bukalapak.com
383 csdn.net
384 irs.gov
385 wsj.com
386 eastday.com
387 ign.com
388 yandex.ua
389 blackboard.com
390 oracle.com
391 merdeka.com
392 digikala.com
393 savefrom.net
394 varzesh3.com
395 pinimg.com
396 reuters.com
397 naukri.com
398 macys.com
399 livedoor.biz
400 kinopoisk.ru
401 giphy.com
402 olx.pl
403 ilyke.co
404 hootsuite.com
405 tube8.com
406 evernote.com
407 citi.com
408 ebay.in
409 taleo.net
410 eyny.com
411 youth.cn
412 livedoor.com
413 instructure.com
414 chaoshi.tmall.com
415 expedia.com
416 amazon.ca
417 engadget.com
418 bhaskar.com
419 libero.it
420 spiegel.de
421 freedom251.com
422 bild.de
423 jabong.com
424 airbnb.com
425 reference.com
426 avg.com
427 sharepoint.com
428 kohls.com
429 adidas.tmall.com
430 watsons.tmall.com
431 tistory.com
432 spaceshipads.com
433 newegg.com
434 google.sk
435 ebay.it
436 google.fi
437 lowes.com
438 google.no
439 southcn.com
440 stumbleupon.com
441 ameba.jp
442 infusionsoft.com
443 haber7.com
444 17ok.com
445 urdupoint.com
446 likes.com
447 realtor.com
448 box.com
449 answers.com
450 flirchi.com
451 mobile.de
452 shopify.com
453 ci123.com
454 quikr.com
455 mi.com
456 thefreedictionary.com
457 tokopedia.com
458 scribd.com
459 4shared.com
460 playstation.com
461 battle.net
462 tabelog.com
463 lifehacker.com
464 ancestry.com
465 list-manage.com
466 elpais.com
467 lifebuzz.com
468 freepik.com
469 gearbest.com
470 yallakora.com
471 google.dk
472 shopclues.com
473 thesportbible.com
474 streamcloud.eu
475 google.az
476 hm.com
477 rutracker.org
478 surveymonkey.com
479 allrecipes.com
480 nyaa.se
481 nbcnews.com
482 nike.com
483 repubblica.it
484 free.fr
485 friv.com
486 blogimg.jp
487 asos.com
488 patch.com
489 npr.org
490 wunderground.com
491 umblr.com
492 meetup.com
493 hatena.ne.jp
494 discovercard.com
495 vid.me
496 fidelity.com
497 rbc.ru
498 fiverr.com
499 nifty.com
500 roblox.com
501 goal.com
502 bleacherreport.com
503 xe.com
504 theverge.com
505 marca.com
506 woot.com
507 conservativetribune.com
508 olx.in
509 rt.com
510 zomato.com
511 hespress.com
512 extratorrent.cc
513 retailmenot.com
514 ebay.com.au
515 billdesk.com
516 japanpost.jp
517 teepr.com
518 sq.cn
519 ero-advertising.com
520 blogspot.com.es
521 albawabhnews.com
522 messenger.com
523 hotels.com
524 worldlifestyle.com
525 aparat.com
526 gap.com
527 ask.fm
528 azlyrics.com
529 chip.de
530 meaww.com
531 ca.gov
532 nba.com
533 udemy.com
534 58.com
535 exoclick.com
536 trulia.com
537 photobucket.com
538 indianexpress.com
539 wayfair.com
540 baike.com
541 kickstarter.com
542 verizon.com
543 seesaa.net
544 zippyshare.com
545 momoshop.com.tw
546 southwest.com
547 trackingclick.net
548 nordstrom.com
549 costco.com
550 ebates.com
551 acfun.tv
552 lenovo.com
553 nikkei.com
554 all2lnk.com
555 so-net.ne.jp
556 java.com
557 xunlei.com
558 blogspot.jp
559 moneycontrol.com
560 alexa.cn
561 wikiwiki.jp
562 google.com.bd
563 airtel.in
564 jimdo.com
565 hdzog.com
566 drudgereport.com
567 xda-developers.com
568 uploaded.net
569 liveinternet.ru
570 adcash.com
571 india.com
572 kooora.com
573 sh.st
574 kayak.com
575 123cha.com
576 squarespace.com
577 gameforge.com
578 independent.co.uk
579 politico.com
580 gamefaqs.com
581 biglobe.ne.jp
582 intoday.in
583 subscene.com
584 justdial.com
585 sabq.org
586 okezone.com
587 souq.com
588 hatenablog.com
589 overstock.com
590 youdao.com
591 yandex.com.tr
592 mercadolibre.com.ar
593 kijiji.ca
594 hotstar.com
595 sakura.ne.jp
596 yodobashi.com
597 beeg.com
598 zoho.com
599 zulily.com
600 cbsnews.com
601 abcnews.go.com
602 myfitnesspal.com
603 houzz.com
604 adp.com
605 tsite.jp
606 disqus.com
607 itmedia.co.jp
608 leagueoflegends.com
609 cookpad.com
610 upwork.com
611 elmundo.es
612 latimes.com
613 time.com
614 aa.com
615 clipconverter.cc
616 people.com
617 quizlet.com
618 slate.com
619 instructables.com
620 ytimg.com
621 olx.ua
622 google.com.vn
623 voc.com.cn
624 asahi.com
625 netteller.com
626 thekitchn.com
627 zing.vn
628 tutorialspoint.com
629 jrj.com.cn
630 chinaz.com
631 oeeee.com
632 chinaso.com
633 rottentomatoes.com
634 ensonhaber.com
635 thewatchseries.to
636 fitbit.com
637 4dsply.com
638 ampclicks.com
639 urbandictionary.com
640 usaa.com
641 cnblogs.com
642 custhelp.com
643 eventbrite.com
644 subito.it
645 myway.com
646 makemytrip.com
647 timeanddate.com
648 investing.com
649 infoseek.co.jp
650 slimspots.com
651 mixi.jp
652 list.tmall.com
653 google.lk
654 yandex.kz
655 glassdoor.com
656 asana.com
657 nhk.or.jp
658 dropbooks.tv
659 change.org
660 livescore.com
661 delta.com
662 eonline.com
663 constantcontact.com
664 google.bg
665 norton.com
666 bhphotovideo.com
667 ticketmaster.com
668 wetransfer.com
669 alicdn.com
670 lenta.ru
671 telegram.org
672 kdnet.net
673 google.com.my
674 mackolik.com
675 emol.com
676 pch.com
677 microsoftstore.com
678 coursera.org
679 twoo.com
680 shaparak.ir
681 gamersky.com
682 issuu.com
683 interia.pl
684 104.com.tw
685 faithtap.com
686 mobfactory.info
687 mydala.com
688 www.gov.uk
689 nikkeibp.co.jp
690 agar.io
691 asus.com
692 tmz.com
693 cricbuzz.com
694 weblio.jp
695 fanpage.gr
696 drom.ru
697 gmarket.co.kr
698 techcrunch.com
699 manoramaonline.com
700 nydailynews.com
701 ibm.com
702 ero-video.net
703 google.kz
704 corriere.it
705 agoda.com
706 researchgate.net
707 stockstar.com
708 reverso.net
709 pof.com
710 usbank.com
711 staples.com
712 prezi.com
713 familydoctor.com.cn
714 nhadatso.com
715 elwatannews.com
716 foodnetwork.com
717 nypost.com
718 cisco.com
719 zone-telechargement.com
720 mcafee.com
721 atwiki.jp
722 abplive.in
723 elfagr.org
724 youboy.com
725 filehippo.com
726 venturead.com
727 okcupid.com
728 wp.com
729 sciencedirect.com
730 bs.to
731 google.com.kw
732 masrawy.com
733 rightmove.co.uk
734 sears.com
735 cnbc.com
736 thehindu.com
737 swagbucks.com
738 google.rs
739 chron.com
740 seasonvar.ru
741 webex.com
742 yadi.sk
743 fivethirtyeight.com
744 behance.net
745 clickadu.com
746 pcmag.com
747 academia.edu
748 prpops.com
749 howtogeek.com
750 predictivadvertising.com
751 6pm.com
752 mit.edu
753 gigazine.net
754 ppomppu.co.kr
755 duckduckgo.com
756 bomb01.com
757 commentcamarche.net
758 superuser.com
759 bodybuilding.com
760 google.by
761 gamepedia.com
762 vnexpress.net
763 mlb.com
764 gutefrage.net
765 vk.me
766 4399.com
767 redirectvoluum.com
768 ebay.fr
769 mirror.co.uk
770 google.co.nz
771 jcpenney.com
772 mynavi.jp
773 clien.net
774 exblog.jp
775 sex.com
776 openload.co
777 yandex.by
778 neobux.com
779 ed.gov
780 popsugar.com
781 aliyun.com
782 ouo.io
783 123rf.com
784 united.com
785 megapopads.com
786 farsnews.com
787 atlassian.net
788 3dmgame.com
789 hotnewhiphop.com
790 wattpad.com
791 gismeteo.ru
792 php.net
793 pchome.com.tw
794 eastmoney.com
795 e-hentai.org
796 egou.com
797 mydomainadvisor.com
798 gyazo.com
799 kissanime.to
800 priceline.com
801 olx.com.br
802 bt.com
803 elmogaz.com
804 thedailybeast.com
805 inspsearch.com
806 inquirer.net
807 wiktionary.org
808 vox.com
809 biobiochile.cl
810 y8.com
811 codecanyon.net
812 carview.co.jp
813 google.hr
814 gawker.com
815 shareasale.com
816 yomiuri.co.jp
817 wish.com
818 gmanetwork.com
819 blkget.com
820 geocities.jp
821 rollingstone.com
822 ew.com
823 merriam-webster.com
824 cdiscount.com
825 zhaopin.com
826 4pda.ru
827 gazetaexpress.com
828 europa.eu
829 gamespot.com
830 weather.gov
831 audible.com
832 xbox.com
833 google.com.do
834 marketwatch.com
835 bestadbid.com
836 googleadservices.com
837 mayoclinic.org
838 yenisafak.com
839 goo.gl
840 absoluteclickscom.com
841 126.com
842 investopedia.com
843 westernjournalism.com
844 zara.com
845 homepage-web.com
846 sfr.fr
847 abril.com.br
848 vetogate.com
849 mapquest.com
850 buzzfil.net
851 getpocket.com
852 bankmellat.ir
853 youjizz.com
854 hilton.com
855 himado.in
856 yaolan.com
857 hostgator.com
858 ria.ru
859 mobile01.com
860 cbs.com
861 sky.com
862 milanuncios.com
863 almasryalyoum.com
864 anitube.se
865 google.com.ec
866 lun.com
867 wired.com
868 xmediaserve.com
869 kotaku.com
870 ted.com
871 t-mobile.com
872 pbs.org
873 gazeta.pl
874 leadzupc.com
875 android.com
876 realclearpolitics.com
877 nhl.com
878 rednet.cn
879 appledaily.com.tw
880 11st.co.kr
881 marriott.com
882 whitepages.com
883 altervista.org
884 mercadolibre.com.mx
885 intel.com
886 buy.tmall.com
887 daikynguyenvn.com
888 informer.com
889 duolingo.com
890 popundertotal.com
891 babycenter.com
892 livestrong.com
893 otto.de
894 popped.biz
895 wav.tv
896 jin115.com
897 focus.de
898 torcache.net
899 novinky.cz
900 blogspot.com.tr
901 zappos.com
902 redfin.com
903 sankei.com
904 excite.co.jp
905 pantip.com
906 legacy.com
907 cocolog-nifty.com
908 indiamart.com
909 indianrail.gov.in
910 backpage.com
911 tomshardware.com
912 voyeurhit.com
913 primewire.ag
914 n11.com
915 dianping.com
916 ukr.net
917 warmportrait.com
918 internethaber.com
919 mega.co.nz
920 ecollege.com
921 allocine.fr
922 qingdaonews.com
923 zougla.gr
924 rapidgator.net
925 walgreens.com
926 hepsiburada.com
927 emgn.com
928 hh.ru
929 4chan.org
930 syosetu.com
931 sozcu.com.tr
932 theatlantic.com
933 match.com
934 mmm-mmm.info
935 breitbart.com
936 51job.com
937 hubspot.com
938 as.com
939 cracked.com
940 bitly.com
941 gittigidiyor.com
942 fatosdesconhecidos.com.br
943 lequipe.fr
944 tim.it
945 uzone.id
946 mihanblog.com
947 wiley.com
948 state.gov
949 cda.pl
950 aweber.com
951 creditkarma.com
952 ccm.net
953 pole-emploi.fr
954 banggood.com
955 padsdel.com
956 ultimate-guitar.com
957 deezer.com
958 mynet.com
959 114la.com
960 cbssports.com
961 o2.pl
962 lemonde.fr
963 credit-agricole.fr
964 nairaland.com
965 panasonic.jp
966 sfgate.com
967 dafont.com
968 dmv.org
969 huaban.com
970 dailypakistan.com.pk
971 rarbg.to
972 ryanair.com
973 basecamp.com
974 lapatilla.com
975 pnc.com
976 caixa.gov.br
977 kuronekoyamato.co.jp
978 google.lt
979 djpunjab.info
980 marktplaats.nl
981 ecnavi.jp
982 windows.com
983 mbc.net
984 nta.go.jp
985 lazada.co.id
986 rakuten.ne.jp
987 starsports.com
988 yjc.ir
989 uber.com
990 fandango.com
991 histats.com
992 mufg.jp
993 auto.ru
994 monster.com
995 statcounter.com
996 disq.us
997 yellowpages.com
998 dreamstime.com
999 hupu.com
1000 thisav.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment