From 5ea61d104de9ca8a7d19d63d83173eb7391081d2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= Date: Sat, 13 Jun 2015 16:25:33 -0300 Subject: [PATCH] Imported Upstream version 2015.06.04.1 --- README.md | 8 +- README.txt | 8 +- docs/supportedsites.md | 19 +- test/test_YoutubeDL.py | 46 +++ test/test_aes.py | 4 +- test/test_subtitles.py | 2 +- test/test_utils.py | 15 + youtube-dl | Bin 886540 -> 901174 bytes youtube-dl.1 | 4 +- youtube-dl.fish | 4 +- youtube_dl/YoutubeDL.py | 34 ++- youtube_dl/aes.py | 2 +- youtube_dl/extractor/__init__.py | 35 ++- youtube_dl/extractor/aftonbladet.py | 11 +- youtube_dl/extractor/arte.py | 5 +- youtube_dl/extractor/bilibili.py | 20 +- youtube_dl/extractor/cbsnews.py | 2 +- youtube_dl/extractor/ccc.py | 4 +- youtube_dl/extractor/chilloutzone.py | 2 +- youtube_dl/extractor/cinemassacre.py | 13 +- youtube_dl/extractor/cnn.py | 2 +- youtube_dl/extractor/common.py | 4 +- youtube_dl/extractor/crunchyroll.py | 30 +- youtube_dl/extractor/dailymotion.py | 5 +- youtube_dl/extractor/drtv.py | 37 ++- youtube_dl/extractor/empflix.py | 32 +- youtube_dl/extractor/espn.py | 55 ++++ youtube_dl/extractor/facebook.py | 11 +- youtube_dl/extractor/firedrive.py | 80 ----- youtube_dl/extractor/gamespot.py | 62 ++-- youtube_dl/extractor/generic.py | 231 +++++++++----- youtube_dl/extractor/imgur.py | 6 +- youtube_dl/extractor/instagram.py | 8 +- youtube_dl/extractor/iprima.py | 16 +- youtube_dl/extractor/karrierevideos.py | 96 ++++++ youtube_dl/extractor/letv.py | 4 +- youtube_dl/extractor/mitele.py | 9 +- youtube_dl/extractor/naver.py | 24 +- youtube_dl/extractor/nba.py | 20 +- youtube_dl/extractor/nextmedia.py | 40 ++- youtube_dl/extractor/nova.py | 179 +++++++++++ youtube_dl/extractor/nowtv.py | 192 ++++++++++++ youtube_dl/extractor/odnoklassniki.py | 36 ++- youtube_dl/extractor/ooyala.py | 155 ++++++---- youtube_dl/extractor/patreon.py | 2 +- youtube_dl/extractor/porn91.py | 71 +++++ youtube_dl/extractor/pornhub.py | 3 +- youtube_dl/extractor/prosiebensat1.py | 2 +- youtube_dl/extractor/qqmusic.py | 64 ++-- youtube_dl/extractor/rtbf.py | 30 +- youtube_dl/extractor/rtlnow.py | 174 ----------- youtube_dl/extractor/rts.py | 1 + youtube_dl/extractor/rtve.py | 2 +- youtube_dl/extractor/rutv.py | 2 +- youtube_dl/extractor/sbs.py | 18 +- youtube_dl/extractor/senateisvp.py | 8 +- youtube_dl/extractor/shared.py | 2 +- youtube_dl/extractor/sockshare.py | 83 ----- youtube_dl/extractor/sohu.py | 4 +- youtube_dl/extractor/soompi.py | 146 +++++++++ youtube_dl/extractor/spankwire.py | 2 +- youtube_dl/extractor/spiegeltv.py | 9 +- youtube_dl/extractor/sportbox.py | 131 +++++--- youtube_dl/extractor/teamcoco.py | 3 +- youtube_dl/extractor/telecinco.py | 4 + youtube_dl/extractor/tenplay.py | 27 +- youtube_dl/extractor/tf1.py | 12 +- youtube_dl/extractor/tnaflix.py | 44 +-- youtube_dl/extractor/tube8.py | 14 +- youtube_dl/extractor/tubitv.py | 84 ++++++ youtube_dl/extractor/tumblr.py | 17 ++ youtube_dl/extractor/tutv.py | 2 +- youtube_dl/extractor/tv2.py | 126 ++++++++ youtube_dl/extractor/tvigle.py | 39 ++- youtube_dl/extractor/twentyfourvideo.py | 4 +- youtube_dl/extractor/ultimedia.py | 10 +- youtube_dl/extractor/vgtv.py | 28 +- youtube_dl/extractor/videott.py | 2 +- youtube_dl/extractor/vidme.py | 9 +- youtube_dl/extractor/vier.py | 9 +- youtube_dl/extractor/viki.py | 333 +++++++++++++++------ youtube_dl/extractor/vuclip.py | 2 +- youtube_dl/extractor/vulture.py | 2 +- youtube_dl/extractor/wimp.py | 3 +- youtube_dl/extractor/xminus.py | 4 +- youtube_dl/extractor/yahoo.py | 18 ++ youtube_dl/extractor/youtube.py | 180 +++++------ youtube_dl/options.py | 4 +- youtube_dl/postprocessor/embedthumbnail.py | 4 +- youtube_dl/utils.py | 10 +- youtube_dl/version.py | 2 +- 91 files changed, 2256 insertions(+), 1066 deletions(-) create mode 100644 youtube_dl/extractor/espn.py delete mode 100644 youtube_dl/extractor/firedrive.py create mode 100644 youtube_dl/extractor/karrierevideos.py create mode 100644 youtube_dl/extractor/nova.py create mode 100644 youtube_dl/extractor/nowtv.py create mode 100644 youtube_dl/extractor/porn91.py delete mode 100644 youtube_dl/extractor/rtlnow.py delete mode 100644 youtube_dl/extractor/sockshare.py create mode 100644 youtube_dl/extractor/soompi.py create mode 100644 youtube_dl/extractor/tubitv.py create mode 100644 youtube_dl/extractor/tv2.py diff --git a/README.md b/README.md index 3d94364..f3d83c8 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,12 @@ youtube-dl - download videos from youtube.com or other video platforms To install it right away for all UNIX users (Linux, OS X, etc.), type: sudo curl https://yt-dl.org/latest/youtube-dl -o /usr/local/bin/youtube-dl - sudo chmod a+x /usr/local/bin/youtube-dl + sudo chmod a+rx /usr/local/bin/youtube-dl If you do not have curl, you can alternatively use a recent wget: sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl - sudo chmod a+x /usr/local/bin/youtube-dl + sudo chmod a+rx /usr/local/bin/youtube-dl Windows users can [download a .exe file](https://yt-dl.org/latest/youtube-dl.exe) and place it in their home directory or any other location on their [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). @@ -168,7 +168,7 @@ which means you can modify it, redistribute it or use it however you like. --no-progress Do not print progress bar --console-title Display progress in console titlebar -v, --verbose Print various debugging information - --dump-pages Print downloaded pages to debug problems (very verbose) + --dump-pages Print downloaded pages encoded using base64 to debug problems (very verbose) --write-pages Write downloaded intermediary pages to files in the current directory to debug problems --print-traffic Display sent and read HTTP traffic -C, --call-home Contact the youtube-dl server for debugging @@ -220,7 +220,7 @@ which means you can modify it, redistribute it or use it however you like. --embed-thumbnail Embed thumbnail in the audio as cover art --add-metadata Write metadata to the video file --metadata-from-title FORMAT Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output, the parsed - parameters replace existing values. Additional templates: %(album), %(artist). Example: --metadata-from-title "%(artist)s - + parameters replace existing values. Additional templates: %(album)s, %(artist)s. Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like "Coldplay - Paradise" --xattrs Write metadata to the video file's xattrs (using dublin core and xdg standards) --fixup POLICY Automatically correct known faults of the file. One of never (do nothing), warn (only emit a warning), detect_or_warn(the default; diff --git a/README.txt b/README.txt index 25ca371..bc4f294 100644 --- a/README.txt +++ b/README.txt @@ -20,12 +20,12 @@ INSTALLATION To install it right away for all UNIX users (Linux, OS X, etc.), type: sudo curl https://yt-dl.org/latest/youtube-dl -o /usr/local/bin/youtube-dl - sudo chmod a+x /usr/local/bin/youtube-dl + sudo chmod a+rx /usr/local/bin/youtube-dl If you do not have curl, you can alternatively use a recent wget: sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl - sudo chmod a+x /usr/local/bin/youtube-dl + sudo chmod a+rx /usr/local/bin/youtube-dl Windows users can download a .exe file and place it in their home directory or any other location on their PATH. @@ -196,7 +196,7 @@ Verbosity / Simulation Options: --no-progress Do not print progress bar --console-title Display progress in console titlebar -v, --verbose Print various debugging information - --dump-pages Print downloaded pages to debug problems (very verbose) + --dump-pages Print downloaded pages encoded using base64 to debug problems (very verbose) --write-pages Write downloaded intermediary pages to files in the current directory to debug problems --print-traffic Display sent and read HTTP traffic -C, --call-home Contact the youtube-dl server for debugging @@ -258,7 +258,7 @@ Post-processing Options: --embed-thumbnail Embed thumbnail in the audio as cover art --add-metadata Write metadata to the video file --metadata-from-title FORMAT Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output, the parsed - parameters replace existing values. Additional templates: %(album), %(artist). Example: --metadata-from-title "%(artist)s - + parameters replace existing values. Additional templates: %(album)s, %(artist)s. Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like "Coldplay - Paradise" --xattrs Write metadata to the video file's xattrs (using dublin core and xdg standards) --fixup POLICY Automatically correct known faults of the file. One of never (do nothing), warn (only emit a warning), detect_or_warn(the default; diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 43fbe8b..d147b53 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -10,6 +10,7 @@ - **56.com** - **5min** - **8tracks** + - **91porn** - **9gag** - **abc.net.au** - **Abc7News** @@ -26,8 +27,7 @@ - **anitube.se** - **AnySex** - **Aparat** - - **AppleDailyAnimationNews** - - **AppleDailyRealtimeNews** + - **AppleDaily** - **AppleTrailers** - **archive.org**: archive.org videos - **ARD** @@ -142,6 +142,7 @@ - **Eporner** - **EroProfile** - **Escapist** + - **ESPN** (Currently broken) - **EveryonesMixtape** - **exfm**: ex.fm - **ExpoTV** @@ -151,7 +152,6 @@ - **fc2** - **fernsehkritik.tv** - **fernsehkritik.tv:postecke** - - **Firedrive** - **Firstpost** - **Flickr** - **Folketinget**: Folketinget (ft.dk; Danish parliament) @@ -229,6 +229,7 @@ - **KanalPlay**: Kanal 5/9/11 Play - **Kankan** - **Karaoketv** + - **KarriereVideos** - **keek** - **KeezMovies** - **KhanAcademy** @@ -319,8 +320,10 @@ - **Noco** - **Normalboots** - **NosVideo** + - **Nova**: TN.cz, Prásk.tv, Nova.cz, Novaplus.cz, FANDA.tv, Krásná.cz and Doma.cz - **novamov**: NovaMov - **Nowness** + - **NowTV** - **nowvideo**: NowVideo - **npo.nl** - **npo.nl:live** @@ -338,6 +341,7 @@ - **OktoberfestTV** - **on.aol.com** - **Ooyala** + - **OoyalaExternal** - **OpenFilm** - **orf:fm4**: radio FM4 - **orf:iptv**: iptv.ORF.at @@ -391,7 +395,6 @@ - **Rte** - **rtl.nl**: rtl.nl and rtlxl.nl - **RTL2** - - **RTLnow** - **RTP** - **RTS**: RTS.ch - **rtve.es:alacarta**: RTVE a la carta @@ -429,8 +432,9 @@ - **smotri:community**: Smotri.com community videos - **smotri:user**: Smotri.com user videos - **Snotr** - - **Sockshare** - **Sohu** + - **soompi** + - **soompi:show** - **soundcloud** - **soundcloud:playlist** - **soundcloud:set** @@ -451,6 +455,7 @@ - **Spike** - **Sport5** - **SportBox** + - **SportBoxEmbed** - **SportDeutschland** - **Srf** - **SRMediathek**: Saarländischer Rundfunk @@ -504,12 +509,15 @@ - **Trilulilu** - **TruTube** - **Tube8** + - **TubiTv** - **Tudou** - **Tumblr** - **TuneIn** - **Turbo** - **Tutv** - **tv.dfb.de** + - **TV2** + - **TV2Article** - **TV4**: tv4.se and tv4play.se - **tvigle**: Интернет-телевидение Tvigle.ru - **tvp.pl** @@ -559,6 +567,7 @@ - **vier:videos** - **Viewster** - **viki** + - **viki:channel** - **vimeo** - **vimeo:album** - **vimeo:channel** diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 82b8275..a13c09e 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -12,6 +12,7 @@ import copy from test.helper import FakeYDL, assertRegexpMatches from youtube_dl import YoutubeDL +from youtube_dl.compat import compat_str from youtube_dl.extractor import YoutubeIE from youtube_dl.postprocessor.common import PostProcessor from youtube_dl.utils import match_filter_func @@ -507,6 +508,51 @@ class TestYoutubeDL(unittest.TestCase): res = get_videos(f) self.assertEqual(res, ['1']) + def test_playlist_items_selection(self): + entries = [{ + 'id': compat_str(i), + 'title': compat_str(i), + 'url': TEST_URL, + } for i in range(1, 5)] + playlist = { + '_type': 'playlist', + 'id': 'test', + 'entries': entries, + 'extractor': 'test:playlist', + 'extractor_key': 'test:playlist', + 'webpage_url': 'http://example.com', + } + + def get_ids(params): + ydl = YDL(params) + # make a copy because the dictionary can be modified + ydl.process_ie_result(playlist.copy()) + return [int(v['id']) for v in ydl.downloaded_info_dicts] + + result = get_ids({}) + self.assertEqual(result, [1, 2, 3, 4]) + + result = get_ids({'playlistend': 10}) + self.assertEqual(result, [1, 2, 3, 4]) + + result = get_ids({'playlistend': 2}) + self.assertEqual(result, [1, 2]) + + result = get_ids({'playliststart': 10}) + self.assertEqual(result, []) + + result = get_ids({'playliststart': 2}) + self.assertEqual(result, [2, 3, 4]) + + result = get_ids({'playlist_items': '2-4'}) + self.assertEqual(result, [2, 3, 4]) + + result = get_ids({'playlist_items': '2,4'}) + self.assertEqual(result, [2, 4]) + + result = get_ids({'playlist_items': '10'}) + self.assertEqual(result, []) + if __name__ == '__main__': unittest.main() diff --git a/test/test_aes.py b/test/test_aes.py index 4dc7de7..315a3f5 100644 --- a/test/test_aes.py +++ b/test/test_aes.py @@ -39,7 +39,7 @@ class TestAES(unittest.TestCase): encrypted = base64.b64encode( intlist_to_bytes(self.iv[:8]) + b'\x17\x15\x93\xab\x8d\x80V\xcdV\xe0\t\xcdo\xc2\xa5\xd8ksM\r\xe27N\xae' - ) + ).decode('utf-8') decrypted = (aes_decrypt_text(encrypted, password, 16)) self.assertEqual(decrypted, self.secret_msg) @@ -47,7 +47,7 @@ class TestAES(unittest.TestCase): encrypted = base64.b64encode( intlist_to_bytes(self.iv[:8]) + b'\x0b\xe6\xa4\xd9z\x0e\xb8\xb9\xd0\xd4i_\x85\x1d\x99\x98_\xe5\x80\xe7.\xbf\xa5\x83' - ) + ).decode('utf-8') decrypted = (aes_decrypt_text(encrypted, password, 32)) self.assertEqual(decrypted, self.secret_msg) diff --git a/test/test_subtitles.py b/test/test_subtitles.py index 891ee62..c4e3adb 100644 --- a/test/test_subtitles.py +++ b/test/test_subtitles.py @@ -266,7 +266,7 @@ class TestNRKSubtitles(BaseTestSubtitles): self.DL.params['allsubtitles'] = True subtitles = self.getSubtitles() self.assertEqual(set(subtitles.keys()), set(['no'])) - self.assertEqual(md5(subtitles['no']), '1d221e6458c95c5494dcd38e6a1f129a') + self.assertEqual(md5(subtitles['no']), '544fa917d3197fcbee64634559221cc2') class TestRaiSubtitles(BaseTestSubtitles): diff --git a/test/test_utils.py b/test/test_utils.py index b401070..e13e11b 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -621,6 +621,21 @@ Line ''' self.assertEqual(dfxp2srt(dfxp_data), srt_data) + dfxp_data_no_default_namespace = ''' + + +
+

The first line

+
+ +
''' + srt_data = '''1 +00:00:00,000 --> 00:00:01,000 +The first line + +''' + self.assertEqual(dfxp2srt(dfxp_data_no_default_namespace), srt_data) + if __name__ == '__main__': unittest.main() diff --git a/youtube-dl b/youtube-dl index eb88c49a74e25c082ad86597daa5b3bb1935ff4a..79f0e0607c75c77a21bd207defc2fa5f144a0953 100755 GIT binary patch delta 214542 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%0A?JzYmHy0_>n1_F%v1imL zdWy~eF=>2zw3oRns2{7-zidx5UVLxr$h}I{U6t~~n&s#a34xLN-W_iNd)rlq0!f|| zW|jC|K98(8PpT^&uK&lRceiR^cqorwDus^j>2|S++p7Z0MN~A9f~QDoHA#=y8MdQ# zzQLASpRY@=nuDQ&fnIBTQ^#GlQzsTHfnU4Q^+mYuk`m&;2CZH$jxd~wV?90rm#HUl zCl>1N?QGUlL}J2NeqC|A-txS5*doVfT#S5Uc=*x8E$)4{kdzeh)__LVixcO>0Y~_T zNu6E;Monqz$ZH1#_^-mbFZKuI;b$B(On5@(WEeA^g*FC5V0u^v7U!YA_%GCku9rf! zVYm)NkpwoQ33AWL&ci-LT&K;lJDW{+45SQ6r7KY!*s*12u4^_}w?fv;-L1~eJ>$C} z-Olf>w(H>3ZNQS#n#`#U&HoBmOmz6sLz{4i#kTD-Fc=BExJvvIwUMFbDWX-Bi&Rvy zw5%#F!_Q&;R@fAnd8i-Bx2w{E#e+cqR1eB5k^L7l;ttNXC13vFXMu+f+NjF8rka@l zCK>8<|5yhCoZaSFFy6&!+NentRZ3IZDS7DQtTnNjtsH_%L?_ovu_cwVvxpXN0Iwz7 z7D4nK_s;U*Nv2xkL-Rq3+@O(6Z~z^T7WWC3LszRh&wH)A`}w=q-4#}ivRozqY;kI; zZ^!fD)%F(fc?U23OCw{`j_Wa2vpcQBY<%VU>E#1h>+u7gM{BbNL}5QYUU&DQJ-LBe z!seZVR;GB932Qe-#xc3R>dHFioS%EcE($ODFs;P%I3Tdr98@C<&o0X&A){Ra!%7Y? zV#ueCXgGoT={TxLg^)55!ZSSb;x!wuJ5NVDC*PmQ1lC^ei=ccXFq*^$&^V$O_p2yshpBYut+%xwxm8HpNu>c^87c=G?Zd$XOxbQ7v}B}HyqM*dEdAWQsI+MRXWG27-Dj}Am9N2 z()7;(Iej>mFthjBv68+B*&75@ErT*WC~U$=#AK0_7}Uez>(Eww7y(k)trMBB%)?&^ zqU^!BHMc0G7WeYGs2QyZv1uQ7lg(?!Lsqz>8bf{u?A+pqU6Fu?wekx6a%}6etadAY zk)7Rix&ZY0s!{u)`@9u#*fyL4A_z$65 ziT!;vG&AD~Q?RmF;ZZK@tld6($c$kdXmA*UrYGj|(Vg&zdz}W%eBI>N^fC$f`YKR} znlR$NluY`BL5(yvv;;?#TcB9Ay#YIyIp3LS%r^hB=g9^*Zu*qoo3?Q#6?x3mC?9?kM~Fb)J)7TZ7*yChUyFLY~}6vYWN>{*70 zG^{ZcNL++KYlV3SfIEAWogW`hq-EID+VYW7YK^wsrXm(p7R5i+3>XtDFjSph=_Mr7 z$kbd{-5+?&b~Yv69Apg)4XF<9LjTPZ?RZj8@`FJ1?ME9q4w#CpPd{(8p0qj5cXLE3 z`2H_scXaqg>DMN~X5+tYbtIqX#JR;~7o>9@==taKX73C6Y#HInO(EykgihBaA$N@% zy1%+r>JnsO^N?mio&k2P3@0{3{vmiK_MD2}_rs5l}Uh z*@PE{gs->a2UcRcYfQlvP!`%+uoqYuLZUn&8@X>JkK@dxqrff(*@L^>Z&w5&gz_wL zSSybX5d^OsX#Ui37J{r}3Pd{#kH1=;$_QHG>Moh`{sooCoY{zDkp=INx^9wamSX{8 zJ120VpDG_CCnhYjGWe;FH8uf<4$92a7>rkobBGQ>Qp;$B9n~t}ElnSEYK)vyNHghH z<6@s27!zZ=#W=gIR9AJlhofZFD7nYN6Jm)@y1U|{w{kS>@wVRSZH=oR*}r2*bm2NZt}9MmwSr!A$GY$8 z_$kHo1WP;BZnl#eFqeO=&-6~tpM3=&$^LRYJd0W1`7g%y|12X`w`Tr>!Jzn$E@5*; z(3t&d=I-JC_XOxl=D#OE|1+aXvm=6~1H`hBV$w|N5ckA$s%&Xg53>)fvI8(S=Q(P^ zAn;q5Soo^MP!MP%A+-aFtsX7VRV;Wie#hWA%*DjicrT9Ur~7T#*v`5C!q< zmI!Gpj!3Ex*!B)e#orQ{8lraYS4s9S*#0+M%a zW?^eLj!@k^aVRkYi{d_O1zr3x_U_MGsz^F2xVBK~1_;6(kUN{^`(}6zs@i z1fx)Q7!S+D1El`)$ZJKIjPYr!&8mW7i2kCe5x4pV_V*E!;^lG5gA+p&bu1QxYGRe5fgqBK zq{9#2=5r{nS)PR!bIW&PX)7!^G)0HvuDiq{zEF(AoqD>G4nkyfth>}71DxxwE6xAB z3|0{5tGwmxD@`nQXhcpt77zP)x|MwnU`^1AahW{j9pH(IS6c6=vwj-&*Sp;b8wq-W zOP#=35>$tX&69%yPRAc!X?c}B$bNv+cjkef%=+lf0$*cUH6eF`Q*r zx!M&lJx86Xj;%#A1i9G(zyW?maDrpqt#hG&&}z+algw>^C47_hFMU3@iaXRj2(`)M z?wxS#<0r=!;PrNJHP?F`m;34bw*EMh3phO;OELF)K|IBL{xyEPcNFpU`CNUvSqX!F z9ENsxZu6tp?M_IAwCl4evEb6Jwrtd}Ul9`dJTtNsmv?jh<-Ig3lVR&UK6XGF>oKy`Rp>0w^f#NBWvtW~ zyurvDtfDr2zo8BTdSCB79D%oI>aa&4A+Ot;xyE-Kr~xn>6rbnY31lOoZG7Mzfe^TH z>H1u86ne7y`U|oUE?zwj)TpA@Ms+xyx>ng30}VEt*8W`JV2O*`j#;)N=OPh|r$ ziJg34_ToKTO|Eip`h{UjGe(d-p~qQX#p(P0}udX9K$JBaA0K;m32E;i(ni_ zxXCJ_mQe%VHet0-f*)rSgTbfpw@QnpOl6len7Onw5asp7^GmAX)bCs@TvgYxnuddw z`H+N%fdBF`Eah1Vfq)y$HJLS(ye?>11bC?MfyuI<>lE73cIdogW(jFU>IuZrYDKEK zpcpN22n&$gG6p##MKBEE6ymd)O{>AvFR0lhhJYH2eFfnc9wKu-=YKHqt|{=xvna?I zZ>UFXFG1B}@S1^41Ws}SHi_aK<;sl^*|{oE1L+@DLOP+=mjCZx6hT%m1%#e0`r#>D zmg3_mg)9ik&iF7yO9z|a4TYY&bON4u&Iir6nrS+LI8&>N#=wm}+{AFVGJ5o}(=WCnYB-j$ExJ~Mbd*7bJ$emY zvAis2oHMNsDo&kV(CVL4w0vm|zcInjZ$E#**Pjgi)L9assS|_bUC3_L!6~zl#okB3 z+EoP@2-48qP)~)sZ;o6k{Kd0bzQN0j!b`Ato4nfB@1azOk>V}=i5z=ChrSBtTS6cR zR9TPh7d6847H}qSdIM6iEi*1TWE=)+WNHw&ufc zT9OvUp4|-!D(r@4+4H+Q9UumMgL@k?9k2(&PzgkPWP~^q45wfS#=VCQ3Z#n>P*qqX z|Fc51Wfoa8UWEpOR)gSQw3(1G$S2%v2BlLpEqOa;JB|li$6$XnP6<(RA5+9=Nk0kz z?;Y$e(RC?K`WChsIbcY2U6H~ed_&gyI(Rs!hZ@r46-nk|iC=2lq@Uw^mgtX)e1n3B z6QS*tEmS;(jyK9UNGO2u@Ib+fi3=X7eo~(hKF+jx75QlXPf`{~<+;1ve7!ZX zluzI=LnNy^&jJs6ueSly+bcly8cPQdn$s<_C;K#|m57(fEfp6J$%&{-M+W|)$QI{lqQ;NmND$IkNiP4%0=>gx zW0KakDP>x?ks|H5sFKe( z6_G_dBe%1Lv`#LBjn}%72gG=coD*F!1^$cXu7{X$f(x7HJFJA0w#;D4&gowjqpKpp z8}z&+BQa_hig-v68nsN>@FHhLZE(fE{Z|+{<~Jx@S|9NLs{+EP8I(lVL2Q=)N`p~H z|4*F;I6FGp|FHi5iL)x!w*P9%qI|VrL|sNHs{Q2FFe1M6w5Hiae2?*1q=}-)ESi1e zQk0ZxL?gqeuT*4#^q4jNq=;!mm$!!iQEum*d-#!4LY)t%Xt6$0te2djIn2HVt(+n& zAjzQU3is51^3(e&`=oeaf~{x4xLSYUD%FULX)vkT)qBY;C|PrHD{l-roI{j z#cl)MD%b~}Tt~=b*~#{1v z?NU!lzb0i#z^nu3kl6!{9$oRWsB0COyoKTjgN*^8Nf7Ch{wueHq!chTQ`B-fpE*~6 zBv#s<+{!hIBrf@jZ8#mKq{LKPKny;T)5r9@{`~4Ly7*|^FrwP5W<^oU z9G0?C92uwL!Iu9_!`DvAW;n1Omd4=8NsJs@nDpyn5v6Ey?yvm6N+tKm1{2 zgn8}T&T4vNjJZTj8qPH_(r{Q%kdyJ@6(K&Umo!xeROF0ZP|_Zi5`2MO_YUP{E9zCP z7r$5s;oJ&CKBQ#?`Y@Gp1<5~$pe0$E7HOC@#aXu+0=JNo1t=RK2WF;mAml;WH-C@J zs9|Y(Nfe`$!l+!&#oaM14N{5|j>TUThe;fdp7#ZdFC>u4cGqP4{I+8|Fa8<^}fgLH`wHBq-P)r4_Q1uq1-}(7}5n==wTf{v{ z@egIf^!g~qZWG$F^KZ=F}lEL0L*$%zZz&bVe{sN_& z#^7y=!Uii!a4+kvDv&Y?{jf35m%}llA=8cxy1-jT7?lo7yN}7J4$PDh=S_8phAnl!}$EW^w4A^GgY{?YjrSGGS9%X zXA{g9wR@kpD({ymq-udScG$w$12V?F8J@y#ZA3Z~4DYf?%ca=C)MQ@2L|D$Ed3+0Y zp`fnDDp78K-v5LE18TDtyU^)pD@Mx#n@9u8bIS>9Jxknu^AIWIXP0q8p!O+S<4S%o&CmWqu=rn2|4WeRV-MTE12lwsH z>u;Lu;j$ECLt|7Em|JG?W|Ak%c9g3Vdw-!ID@zyr88z-8Fz1pTd2O5YAnyO5{71ZV zQ)*GL9r|i8M+E2*RO5+hD9se4k7L=O%LQ|3c zcdP*SB*W4i+a`sF^=1itoK9Qo_xB;RHBVbJ?avM%2hG0e#fs{ILJy7VL8MQh`KTIR zq(J8H1B0&pB5%A}Wr|msdj<`ew?4SVAEmZ#HHpqN@VDNKGB_@aU}Vj+VS$o_wccNYr7_H&4c>3r<~1h6Duh`vc@B3$c$$H@kB;dm-yTJ*(Aa9W?gg zm-K!C^lFc}*H%eAx-qoEK4Pp7ZEJGQMWPPHIGnmG`h;lCz(1Br{i?G-N%$pw98fz< zXKdoR-qAzmxW8*8(^VlqrFp`j#FP5FUiYEw;5KMU(n5@^rz+L$aCMs5mp3#iYr?Bb z{2q#-mMoZCGn-9}<=ORqY#2Gko~M;P5-ZEKs#C+35dNowaB}?fF7hi{mjEU0rtJ%| zqb!ez1pmLHVl>hOBwz_a?b385V95absVlfT%E;|WANDL#DWWJba~(rERY?Z;IhKfD zBG%&Be<(FYAWe97x($VXOV=LD;4VZAu*AXzWR6DF5(}$3sMc6+EKoukzDd zh>F2C2MRR@{^xsm|kq+9%%FX z1Xcf3Cik??lg}izfI|qtY*YuTIeHbdy+^2{1!JC0?oJ4KE@MArd0i!Qi&Ew=2exx1 zYs-JUMfbV<{ORV!wH%s~Fe{iO$z-?gJa+#lN3moiN$vF@F>5W2h?n}I@^0)<#~}Ed z2SXYk7zBOC>en`mg{2Ld4N?Ik^}s=sAbA-~cvhvrOJ?DWv}bU#l(Z-CpX;LL9@-U4 z1`M8*ss7w3cZGIf&txKbnicuPmi$ zDr|e4o}_=+s<;WK5}ePCY44Spasm*={@_vOV`a{09%2xl3Dm`1{eQmNQHklKP~S0! zs~R|i(yR^zJV4M?f!QuIr;HQboD^M12-?2IBqgz+&}ez3LM=FvsldM9d|cZW?%kr0 zR0SRu9tMN*R*q?Ixa*oYKL9v%hH$O*?km$#=2bg4T|=%l}_@UwO_Q!OWCS0 z?j&%uvy6|PL~ddQ&SI8K);4mP{{2hi#i02+mVz85Uj4NA6Sy*>aX%dhMK0?+SvjcP zla80Zhwr@899O3}ix3hg!s5|>1AXNw_ka~fyo6cUIjl+q5k`H0YO?g zX54ALa%^HmNoozqm(0GGUAO=Q^!DUEo;DJNg_%rBHqa=X7fDIj5ZZs^$ zP-P3Fh(F?pfv>Hl#rh8uFAE}#T{fv=h7Z!cx+R{koSA6G@UHn^tAjm~*-VS8wmC+u zo-=X3ECfJE>mmeRlCfZsev1yg<4BbHP#7dBMuu$33{}U__qXc&3c~$5SWHPHR6B%M zt-)jkKzCv2Z-;8b)j)!&=WV2_iT{wJj``7_Wtko=!az`93+{Q4w^sAf4;ioJFSb4u zKJ$PlmyIlU9C~u_hs6YI&4GtIgu7!l+BYL*%8Sl}H7LknUfc1UnVzRWMWKbzX!n|M zVhT#1*#c3mAOH53>nzFlywBh`C#cYu_n;oZKedj?Vm*vXyBz ziB`a_Q1~p<$PDjvHS;L)DR}D{jgr1)-jQuqE}yVnfuoR?)Gl?v7DM(e_tD;m$Qqp* zHo)bhzE#9i%5c~gfNhS%0kKv2BW1Y^k|IbT0s^Fmeu6vea2WG>pDgBbR))#HRb|Zp z^vFGNRRU1YaDR1)QWMqFP2@iJ(Bz)y;{NY8?uXvO zg!QjEEj8wsl^dk>S{9ZJ2JycH#gHE87}b}*o8oJJ3rUbhpn!<P_LZNO(D)DfIw; zXBoyc$@%EV^bhH2SXd2;15;Tz{8wQ_(`vSUZT&yrz|F+X+vig;R7sGu0Xhb&oD5M& zgl{PpvRq}}xRssFO9D-@E8%%{WSod(ikPkP)>J9Mzl~8!HgIm^;k89<(jMInF#Ky*^08NxQzl0^G@z6Vj&cOICf@~0fUVLON@((Ux z#Ou-#AHLG(oInKsgZF^C{7z5=vANDqxlqfn&n3^I(#>Od9CXVcn9hPIV4<8+5(XP9 z1+iZ)x9BS_Pa`P`M8r?CU6v2QGH|^STaBs_1!|c}oqP+!KTs9VOAkjm(}bz0`_b<# zXKzgJG5rk2RYnz2#l>@PCAR#M0@-{cYnRFfuD=h5*Vy*J(JikS)XKd=^nq^}o3vmX zT}MU83CT-f2jj_vX2GD!m1&yMcoAh`+4IPW6IIri1u3u(Y$qSk@7Ex%*+ALX`K(6$ z&NP=w$o%)>dN&+xo7<;D>$xyEXLE(!td3Q4Vn1~nE2bc_(Y};!?(P@LPb!ns?&3Z1 zdpN{rFQ42oVCGUWfc7{_XN_D&7x`Zwr|1sauH} zAAAIBomb0_ofDr4HltoNZBJ+VsCn5O~Ji^G*QIk=oy%xwtSl{$R63P*Av zxpwpY6}v(tLJ(1dEu&stkiM7tKe8WPD~055^bNx7!3w_J;jP-bbS*P$`~R~7H~+@w z!x=_y`Yoq_>C~JJ*X=IC`}k^kfq3P*+}kKaHDnPa|M;AJEmXIg<=;`yKq#4TuIif# z5ePw}v;twn7;+M^N| zD-~hchi6%?)20mnpKtA4ke%z47pGz$kgeafV27apQyso~!TtL9st##T(&pYkzp6uB zSjaRbMMRkYi>Yo(OXa`X7JiSlBpZy0_!DjyJWkOahAWVI{sr_IRm@J`X2~$wQ^W%j zliCad9DH$?TQ5EFTUL6C41$^w=fU0~Z-v(q8Z3q!=FNS7A*`ZZ_v{mTc3t~Gt_J=D zN+Vtp%s77nu^2@Ce@>-*$5L$pkBJhuXk_VW#L#Q=`9K!+#+INKY zUMMoAQr}`Zl4V5->Sb?3U*{3S5mvR!iJiC!&eM4zuqUs6NIK!j$dYMJV*YH;x=dsd zKbO6fbE<2x$;oJ#U6l5@9xK(4~dpiyjnDF zZfr0)PNl)$napnPC&T)9SBo9jul6{{+_L-_19A51<}hMG+sCgw$3HjrxXbs`N(0^f z3O)XgHx$X-yeS+`uOa?%l>Fus99UHQyT*0YHOT>njn|` zvv=5w)< z>FDazRIxni8jgMAsUk1ghy~$+Wk6N2s8X?3ufz@hfsNqS#BANM`up^ux~` zblekDm!SEe7K)DBd8PFFym)VXdVG5R`yIyv!0iPqCT~*;RoY*X9(wv{ivV#aAVvcG zXVfr0IeplCsyII-Z|E^Td414&qvAs2s-Fm9wgP_*JWc&AeKKDo9RH?wOS0F$g0$e( zD4ABdXh@MVj&{n#N$0v&#+S0zAa+^2#+J{H`tQYXgyd89DADK6Z2r{1yOvcr?x6P2Q-no&kR+B+dOwl z8&DVjWYp-~aOF+7ckyDVq?$1P@M`f){(b z0`aD3@Q!aR?dndBT1#nQX2~~MZuYVV%6q!PuXoo?l}6`wO?muBh@4q168LO!Y_eu3 zd&u=e#nLVie`sAa2-dH+cvg1QDOavApWJIIeySdkFyK0|%E2YzvaQgP!I-JXFCIo* z)zC>*6~$O*&ljmuo|Qio-GWGp%JHk-gD<4RM1Nz_*#5rhf59@VFd3@`76(BE;4oW8 zTjtpWk73}lkzEo6Hx3|8s*O>_D6dufwA){)v}W~@W;pxnl#K8gI)Rekp7R(kw%!E-Hhc@au+YQw*ynK4c zbHhTb_-iRgJ#0~~p8bK9oKuPmfRi3Y7T>QAPyddcb3tY?LLFPgc?9lI)UX(VkxI(} zl0~L?XX+Ptq#(T)KBwkKRgzF+5;B=8TQWVzp|N9ya-s|U9JR9ta%UZX2hgyO@ovJuJ;8O!p_O#41@AoUuC8=h)V z6z~K&^p%&|8@^2!tJMwC^#2g{j=`PA&$jQxwr!gePHfw@ZT#X)Y}>Z&WMbR4?VI!8 z=j^I`tM)zbpO;T{f4h6F&-zuf`!3@hguDka#upxgbn`uXBSr@V2O3kZ#}TFnMtU8ksN*f}jR*govOrB$kOFb>D z#!%rJ|7j!yhBmhzKM&b;)cVg^q?6H6@&>K*_+!VIsnNh$YOq8yL z(R6#$_sf=`3@S@9gQbJ=>^!@<3gMX<9=s9gb#(ytzi)Q&+Q|AfX_92<>6J%Wm+u(< z)FHkEf8KrSO=L{>_e^GKsAM+D2yqLgHiN>eI`XtYXSHo~2FH0+Syfb9Jou5}AAwS4 z&7ECjEEr&imx&%m3|O&sw>BQ=g+34(Cx>TbeE$IlPsk*}IF|-vZ)#?ONA1qOkalo| zs7Mdx-qtj!9Gv%4--Um`RS|E`(FHWB96VA1Dk4)6jS1C@G3A3Fy}ErEoFl7qf#L6sYjRu z7zc!U!1G)d9i) z(AX1fn$Ry(+>t=;no4*fb>Ti$7Z@y@#{i!^`-l7vba1{uzAFH*oWb?*@M-${l+Y2^ zblLIN?}dwt1P{7{9RxYPA0 zlzaP(7?1G%b_?LfjQNh~Q=#3p>~iq{bWSd*quWxdxA&o6|EW&f=zW?_x^;JE`yv=~ z*EARDrfDK3piC&vEy*;zmEnB7OwsG`j_TW542<`G^ZH@E{#E-P4 zrvi0$-XwSkv1fw>x2ek38a7j&5yo%PwpBk0{a}jXT$D`>$88Vt7KtDCmUe{%cu+eZ z*(kury#IFFe&yi%v(eS{ew=0d>?%T4$?_sTw76qUuP1#oogI2CE8}3$HT2@2>g6fk z#eN@R7W;$usJFJwN$bsViMyZ3{yc|0p413@j|}!5Q&H;dKkDNX?ohd0GdTanh`$MrTOk-+jXy({%ODVt-20J`N{)pFDT_ebmF(#NCXUu zK&BTvfu}FqSiUPs&{$Tp=e*d)=fgO=j_M3M9!Lb#pb90?u`ugc3mvSD9M@USz8=Ot zp?+80N30XSW;AD_A3=!&UMOnopbSZ>xy99lYeVz{o4-?qu>J5345wEm3z@6o;ztE) zgJk;~fudUprOnE6)%RRsEzWU|gEQ+|pOgs=Wn=s9+>j{r#qD)bm?Qs!aXXu(u zo*vRG++vW|2ZW-&9%dPoN^S~UI=i9!#4BiADC-|)eXpC{>P@=27@gOuUgY-+gm&$D-SyaMyZFKeX}#V&5ko~Uki|Kr9H6tZaltBVEgM9@ z1~m>bme=Tr%VDZ{8$!Caz>750_H~N^?_J1@*cZRBl_FvQQ^|jaavxcnr)WQ^s)htW zthBRi23T3%O%-yJb-gMJUQ1@ABi~fwS!2SFr zsX8v*vf(TOcuIv_De2R}d)+ItCXa+XS)esb_Kr&0pm<7$SPv!oWC~T-c`Hb56$8x` zXcV*T*e5N?c{o`Fy>sjWx)d>?oq-j1zENJr3f_7*-=Ws(XJYGBU0sI`aqD@xtBww( z=#`TW5AC8#t-Y!;e#XqPXY%T1VmV7M+lX?WGG;}E=9`XnHHD|4<$RfjsRR>A4ehy8 zkyZL!b-J9KEZ|ynL=9Q3@nM(BVK@%vL88|$$z5|Te=XT})c$K-^M90j{~tF_l#-6!8Y8OD zbWQC-Xs_rWBHD;%k;{KVg^GE7Z;D*wq#^1~7Za|M6=69GdUbs48IgkH_;YKx8Y z3V0f5D{{pp_4@;A1CBMWe?6hVoFtju966@@Pxq=qBu5l=LF`^0y8Q9q?$NQ*UP)4n zl17p;=3$rkSqMy>y~<#YEfiss*?4Ho5XOc@_hCp z$S`RMSc6(gISp?uNe1xrsRdPW{v>3|6qE`_6S$8d;AiL`=;Q$_3}ywK>kyr?2Bm}e zU=9)t5Bx(IFgP}_ue3llkbo|tA*gbex7d)TxL@~1e(R&W350y}Ma?<54ttq3UUy;f zjG)Y?WM5I6>P3ZmJWlhc;pGZL-D))cMXju#cMPqX<>NSuBn66_qICd;@ITqyqtyOe7SL)= z*3!IJXcLP$9%(pQ`)iZ2(H3Tc2~?A7)tXe1gsQ_f?z@|WN~*rH5(!xAX!CyK_Mg`% z3vyWM?P3rr7naTg^3Pf;L?RCc%0OH_8Kz9459>@Il^HI+xcnG^8Ypg@w&PW$mHjuv zPIFEiM#B;`*tBfT>V-D|VV?_?`5<6mhMu%6H>yaWW;sH!95oH-o4crE9p~H6i?Ocu z=Dy>(WqG#*;d&G;ZcFoATZV#y;>)>y)Al-`PZ{Ldi4;@%I&^CW=5LV1Y(>Foha$o;#Zfsdh~JO8v%(m{#CdCUbRbXzunI#Fb)#OSksaF_w}|)1vT!f)aPCZCN@-eUYr0%m^z@ zhmx5GF}o-i=1~o0`1KqeI5N>{DT z@)Ugg()qCDI`JCl+9kSu^47HpIHFzH!+)8#Av88c9R8OX-Q9!p$%3yF-QS__U|g4P zm)a-+_;hyaG0vqLE$UrZ?5OBgm!TCRu;LzRFRXcUJ1ZjS%!I#L@63_D-CtHMUi{OR z&wQe?SEGIu9Wzw_P8pW$57kwfhEdzrUS>Dnr@fHBV|S^9P`9(2OaJ1;Zvpo?CZU~$92`9sD(AR7X2466Vl(s_KgrLDE` zo*y{4Uawv=J3m!A(FOXBb;FhlaDIpSLMT~~@be|Y=KJ~mr3C7(Z#cS=T<@-~ z5e%Pe@HB19`=;Sn$?NMfKUjxHW=gqw=pRs~nsGs7S~z2Q7tq$wu!ArE&|Vkn`Tn-8 z1jWtwIBr!-s$23KPCV_ndb@&=Uu^CgA{oe;XI1(aH@5rl7A@~P&RBmPxs08j$_=4^;)B0sCT6{7S_sjO+Z+*4u zjbAEg<=<%m1V-jl{xP?##oOSuOdy6p@3)Nh=c!f>NLXWt+%~eW@ZX2>n)N3B->e2S zeMVQQc~yCEfpq!MTh$aztDf=?5a4ip1fD;1v7A$=_y6MOnzw82wfxBKKmNC|*4gy` z7D>36yl%TLiWqYJhzbHhbtqiXfGcHAjoPe*Y44xwnh7&b$bKNd7PMjVM7Sz`N8jf1 zj_Fx95zkfO>bH@^D4oEP`D*&Kt-%*4J|q|ov18pIO%tYy6=bkiIgc3vAgtH6fRTm1 z8(>63XOojDa;_Ak9#7Qv%o-QY+SHgNscS{!i`;?5 zu0;vLYH{HX<~e*WJvXN7>_6XTn35Z40qFHw&GZefdC!`+P`{6yZZB$j zPgya0nGMp$C~gGW8p2J+%0)>lRVi21ov<28#~qOrR>PYzs^G`juoIKD@<^2=h>86z z!Y^7q7Hsj^q=MGCN^;qQ>;BT3=oTavugo{5i)HEdY_GqR*6w8izDfVxT~+@aZt`2Q z+~;0kg}q2GQ8*t`f`@KgU5x!Rd6 zWD{?TJVIdn20x{|ftw^nr+kbG()*pB;55n7u$*T06QbBiOo9~`)SH`4kH)4DlmPk0 zhT^K&X*7{vmka#`xa^-0iwmtwA60hPzNERdM>w>C!$*UXsFBZ35odMSXR@KII1uE4 z(|l1RU+v0^B1IiF9*F9)#D8A^Z$=lkBhyA!R3rFIoI-Fl@t` z2ezK?0qq}hgxsfZi)DsFae=JAj~0Pv<)(JJdaF>ecz!uuL&0cEGsHU#Dj3BBSH}Zi z4nAK94%*BCK>tud3?eR$yO?}rChscs>`7XO-9Gk?q^UV{41x)KuC5BG>KVA;9VWt3 z(|Z#X4AfRak2314u&ru_w}lt&vsrwegvE$Z%T|jbRu{As0xaR8M+?}Dsutj#;CcJ^ z(f7^Y(2Ti2t!wRxsoA$fN<=7_YU5V#?Ay)AlVwcmZ=D6gZ|UabbXUKv`R27R9Vn-7 z3$psU63>>d)tm(?IR0qtaSUdqh%D&IdHTU8!KBP)8|U3^f!(|LKWc^+#J?;5G2^jC z)J93!xJWpn7-PcVZ)~CN^^l#pZ6M#dwTL}I(UAWKoxRx6=Nb8Pa7BhqQTPDGNy)&4 zM);rj*-5GZxqS}A&z>A&K?*VrL1-;sRn*3OlN#g^;*%=be8jXti>{0njdlO}iqEUx zvYCSxAng&#Y;|T^JbW=`xK7EM0*J@V#~hHf@urbdG$o|QNbtzSOk!atj}M?DUAmRt zAF)ML1%RZ1#9{0Dc--K42bE!PnYtx2aGD1_q~X z-W1fK9X_?7_ve_;P@B|F&ZxitkRPyPPbx8;-vQI4{n9dhGdydqm%3O6>{&W80qdj3 zqkJNfN)pBa)3|{5jV4!W-zB*Hg|~9XL5m*NIw`-~gR4DPPnHbdHgKmVOu1Gjw_!=J_b3SXs|touQH&EOzH!qQ`_Q|Lo|gwyC)#9DyAdw2rqWu(Jj zuszISG`C1ldKDfHOk4uIbzN?LY`oH69FY+36eI6mVzXDHBV7Z1v%a|anHTs&6uU(5 zZp)jH)?SEl@&Qg6j+}T@GgE(uyc=f6t^mAOI$Q2V{c9G@+iY6a4Nz7pwXvAjAUHVH zzqn>oJl=$nsG5WK4YD@ALfgLSv_59TDq_%IGA~>v3WB*7sT9W7xNUJhs(XCBzKNuS z#nN+8B{J{vlITB6GQU2YI`30%Mk0L~l#J}{y*XZ5yGJ6)Yk*oqqy#bi`1Uz%r2&$< z2qwg09L>Pd3dlS4=s$d|Ix`?99h8NH`VzadO#L2yI_r;O^~9qlmp)i#P@cqso*mk0 z+$7B?nFKK_RndU9uC)&^K9gLwmE=5IZDR8UF77h zUYZgz9Sh?H${OfPmDf{E(yhh@djN4QzG(!t;O?$DsL`!V^B12XPSbRuSvJsgc%1O) z335B!L?3+tPaMhmLgUnCI!KDRk~zok!bgQ)=dSAx>=?0zVQU{52@Clfu&SsvSVPrF z?2#Bi*0z&K(4EG)^1#v4>M|~a044s0n+)Nzx0>;uOV4)Kbt~=MCR4=julr90O4=En!yR4frGlsSB=odrTe^nz>XPpQqx?k)XKU@p zuA^k$i6)rNz{{rH+FgDXrn!^2pLT_yBlgop=e$+wj*B2mTuSF}`m~u*%_=TPlwZq8 znps;fnj?&BKA+vui_XtacsutWfI>VtS)7jgiBS4jXkZfr(E@_e+-Owb~SaT6Ge!XXpK`t*Bl zDLE@f0$>5)Vad-%*(RBb{VlY+IXOxEb$f;}GqJd3*n6=FTEhmSmvndh&zEn2TvO>=WJmo2*5 zz6kiTz|VtiU;D^PX(cCQg)imWt{`2|4QPKHE+s!VkL}#H`5)^u&#uK-=5pYO>W)<{ zFed_JdRW!hl!9vYBS=MbRmHKrwZ6;cRZY3DO3i=BH4do6QX%P7Yw7m6U15t$CBuf5v8C#lWoo(Q6Bcx1 zAOzkaBn$==gwMq)hYrV)%7~)7H}dhkjk`aT#=zf7HIWV5$*F+Z&6uR-sqzcLyjcPI zA~t44mJHXz&+@p6j^MF5SW$ZMY#6_m&$gL3dW&Ni;eQKbL>O(`cNY!ftF-wN2aqT3 z47Cbbh~?w5_sJgOhs@12pcHzzDeQBoT_;R-ZLsEJl}~SkBnY3b zgQ8id^yk-7PF7+5o$Au`{9Zk89Su*X7J6-9oF%JGP`Kmhcp*r(Rf%Hz@8F2A?L}72KWQ-)V0I3Z?Lr*`2 zp6xr|YZ8+&=}eoAf6hu?Epa}f?LpYRV|3IEE^{JZD}M1+Qp?dSdo}s>Oks9Tqaz|O zO#h*W&E64(!5oSziP6)S;or!52LJ90pTaCQL4CbDR2wVIm>6de6GSwRZ29I9BLgCL znjFN$kP0lA_1y0zmqK~xMVb!aIkECG4-&?yl?3617j1dlW_9L%H6!+-v9tHcH(o~c za0@7}Z-vm{Y)NN!NT%V@e3eh-5)+WDffZa^P+;Gzp1V7Bi=m%B(l~BBufqN$B}1GC zTqaj@hhqpO7XMCy_b70Itr>d>DDY#B7&Kgir4<;*V+ zI~V7ajSUDSfU}FCg|qAb#g~(%y6v>i4(t1@*EjB(&?q6PO(9!ek#SzMb*7d6s957= zu8B|5$8LvQrl6c@d;a|=Hs1VI?2VCEofydb1=7#2hoo$xRh_(WDdNPiR=%Dvk={~= zCO7dWACM@SplQDVlI{c-ez>SV13h7@=|Te*2u>txq98t-Ha#dPOVDIkmR!EbNKH1M z70yTa!s^wi>M?a~F{%u<3*;ZrV_Et@cv5RQd2fj`_L@OWrV`j6T&$=-1lA88*he_2 zp%UleGkuKEP}VcVB3=pid2{CZl>X)GB||Rk0idZGKV#IFQ9T za|<%fzom0$y{Fgh)z^?hAeVof;|tvhe*V^?XZo8iIan}vcti8paa5$jlO=0gcebUb zdTYYAShQ=_s_6doozwQqNbTsBkyY0bazT+fa!OV%bbx?$nN#|RCb!2itD1kN#brn- z88H7>b~_8U%RX?F37>VpO!OeCLNpP}4!z#YK;*{!p(~$fGf910G~`O+JiGBqLfCcV zH+e;SD@Nq{0G0Tk4$wiqt)U`y-yW+tfh1~OOZwoVxGb`Q`-a(u`(1Yq{G7;~?U*T1 zdj}@`fmeGV81Q2+#3sY4&xW7mvZx0u1^|b8R%PiEiPGn&RQhPsKe7e^Pp8l9)<^uM zWq%)&TEc~+?HWS8#vwEOo@#z5Reo{F%B3b{4ZpJAnoK$Yww0x$Ndz1;-Go_qyJ&5F z@p8@X)V(zH8_B^+`tpW2hi@0MRR! z7DIO@Un1%_cvNbqmzD>{obz5QFrauYsph6!Hd>nR?+pLa8>EKaUr=t9K6fzgE~kum znX@LBu3jrBtlKtsea>lZFx(C<5w#n2!E&OE2^BbjniVwt>D>UU=wZNs?dtE{Q%Q#r zSnPl$a#GCm?7U02L^Jw9umRCPobFj1jxP2cIWyozq0nZuU0vrG-5o-AUcmc}-7o>L z;qmBTLnTQ9Pc>mgEddbZ^`XKF=O;iRr{;!SOR#XLI$b)1{DCxlBg%|;z$68H@6t$O zoscGjwr5^T!(AQCOwqHK=>*&Kg;Lg(Qio}DPqb^99rY{ARs)lWgL-R{h^ zm&h*b!f&KGqCmy&re)c;2oTXZK*`^5Y46287M1}*?_glZ0otWsTkm?HsSGCNJ_sx@ zJ9y9M`!uobSMUc}((`u<<|0P1%4)aCm&(wK5jJjlUVVHzyqN9{lSKY*N!8Yb^I>Mo z??BB))f2aw3`cg0MHKD=uM%_9{yv3kSOhue_pP|5Erm5-AEU;OYdAaj`>nInuuY$* zk_kYI6gPA#*ni}{31J&LB|jCbDy47b=R5!_01f{?4WCUvueG0zlh3jmZG3SevH~%g zt_p={!~qfi8fsm_A947)19-9}(iC<20?a18ccIS$UkS6eM&a?4C7>|~9gY^3V_LJ9 z#MEh-c>Cm}b1(~IOYpNPLbOgog+%sxBt#KX8ftn{i!lJK578J4RKU@r{tOlg&)%O@ zTz=v`18X2m4emaE7GgH0HPj$xvX9ZpNR?a~SO7#=;UUJ|QBohz5VNEO*1PB=RNE-_ zH{&Nf+t?jYEaJ3vlGgBbk=u9;lC}#3z#(rEzP?ZYkn%m^M)tpym}n4UFo zC#-RBXie za{%VyTJa%E6VSMBS6;gh0Y`0Vj&ei&jw*(c;V_Giw4+0IC-J(k?etH>FL}!6~UE5G4~a;b_+p* zCnL~jvmR+oNE|ySPiUNV{Fz~VH2O`t*48U!=mZsm>;fa5O|*?Bty!+-~j;h zMuoB+oTlb7Zz`**A?*U#5)BmP2e-Inp6)f@uQ%2ea7|!I)_#%%Z;G+0v7coviwU?c zj(FZKaa~T&h3+c5T{yBAl>&K4gwS}m(6-gq1hr?`^pW8*Zf#bPH?cz0^L|vfB-Dff z#NbOzxhxC(BJ~1WOE)g=LbwJC!~l;rZ7jK|5NHRV$W*3jOT}L2SB*^oljS5txvTo{ zAite6xs8fZC2GD5z1~;9)XH;WQOm3e8&wJBplo2#?%2Ae4^K6&rjTjT@f zKSh5>p7PhEx@+%_&8>|kx^X(Be**MXUg#{_9p!VfcLP)jfr=V;Z17IZGbO{h=m(~>O z;zYi3>j(Bdofn2X6>HSrQp7xQ2GnTl+b^~*L`TGwY}(Z{crm;toJ;Pjq3jnK(47dWnyFiCR)iV7RJM z-;zYB9-tUrUtg`7wR&;&gZuy=bw~LKy{jI&x)L@lN$p$^J07;sl1zS)T|c^utjm^LTt) znq0!9>L+DSvTHA&imz^u!HO%mDrS&k(Bi`}qIIXgZmqlA z+92Fxl*d}Dxj}zS%Z>sT!9uTC4gHr9RYLHR@&I8=NUDy3W|(bB6x;F_on~U*H@`ox z7I+Phy>&-|HK3IDjGJ=lT>AVQ)JaGKW4d(AJQjgd*|-qyb^h2{Z)iwftqn6^2=PT| z>X@vr#e3OeZ;*zUo0nqeFk&MFJA)i;!v<}4^VjA99CK?jzN{!4kY!=S+n-q>`_lni zt=z);q|uH~wmD5T_Bz$Yc@A#^Eh-LYm#=+eK0UH*=8swb%WL?5KtR;;jiSqdlRo|* z8$2QMe}PGzU77#STl;@Afd0Q=(js-M|K(iyx>iEeDvU=IyCZSk%RO!8Z|c0K2!Uqfp zjYh>l3)Q1c9|H?r7qlM&MKw)~i}jYbX%J3>ZiB=!E7TTOj8;o_q$PzaI~W;|ZP7+1 z-B*$y*mE7XYSL5)FA`2s>$=CdLdL!xya`p~)6L8Yz6NaR<|-X*&?M!6`oDh|vuA9+ zY&o%AZoWi9D5-nh<3;uKggx_?BzAf;b%W-K-4`>IAeK2PS^=T``IoX+aAiM(1t#0E zJGJM3gfEhSbV}gLop5z)JcBnVwz;psaEgbA5Ms=Fx<-u318Ia!g=l?|T)0BXVoHl7 z6qsvi82_`sq6#lhG+#^2O);!SH9+2+o=+4HzCn#bOG6IPMJB5Kt5#%0Od{YU!a2`H zUn7qY^=QVX37zJYAKMSiIvV;+DvI@?Ged>Mc^nIZz@ZjYk4E#w^$&JuhZcflbHMkx zlpE8Pn?_m${uL>dNp(0!w}ktIpLLlK16a*nAOgULjbFtmO_dgm#E=S)MY;>k3H<4% zEl=#9sc12qqj}ghb^;n4u%m3&IK`nB&uT#;9!Guuz*fYxOB6*E#kz{XQkn0iZqKGy zaU|9HD;%`>d_8Fhkz*N(5<~m;Z^;g@W0snkQAt#$8ivtGy{)}ru+=$J4in1Ib3BV% z*ffAckF1%Nx%;1W=DfZrInV`jegH4l0af<9=GQB5|7rHe631HtkT;jFk8d5|kMF1L z$FP9cKON9KoxrCxt7aVX<4QrOM`#PHljGZ(9*(W10zGmLPkY;xK^Kl(eG@L!wM{Fr z9*N^-Z+lz0X7#{-g66C-0I@`?=9ZRWDHOn9YrSx<_B}9r)pet-gdUPvczr-65{*Ox z!BjTSN&>ll1mi1J4$`it4GhTzWB52f_m*ny;c+o@=3e43cDk03tyWz%kh@-}_WQ*? zPpIPtrn(rI7ATLlC2+?|9~23YfCM~?8B3$(_)BkDRSLeE7ZYe*t)aTy{ZJDpF(E)= zf1aEXr&EH?Posz93p+^jiiU_w!xyq+)BFXwRM~V&@$T)H)KqD^8y>;mKC20H;3W5^ z5ZY?o@Lq6~_=~5Wv6zu6T~(hZ2Ul*hOWK>|Y3`Rr;Y1T(CiT`y)pYq6)ESvhxWiH= z@jR8e?NL>_bc0H)<}weJH$k+h$&(jLM3XD|AcTTc*r?IB8h4#{g(}qGrsl~~^ z{lyNn)HMnaCN1dfPGEklLFbke=41729JHxp=Bp^dW)>CTzw~v}U$v!J18gh)k=3pR z+s$4JI9m8Mk~yGS&^tD#!tr#$Su3;UDQrwYwTsn8g|o#p2B)7ItX@Je=Qse6q&5rj zrc*ejSE}b-E2pckBCPuv=`ucxcWaI)UA}UUID-sbq?xrWf)`oYtzwzzSge0rw?}E% zTZCNyLqkF~%xB{J8s?pusq1n=p6m!*fw|nUD<8UUpTC6A=+tp}Ak)D(7gDKA`s^33Vd1^> zoPTMiXpG?<+W=WiAgU+TLP6oW>#NdVmT}@rQ@%Y<_YiKTy}ZaJ1Kk4lw@>f~c+KQp z=J$YtoYXUV`_z5*ct9aK6MO-z9A^Z0QG0)gS`lXAgPgsxrfRv*BEdtG!zsq)c*oA> zMY8z1;$IfND(}g+P`Rh(JUn`T0R*lTQ5V@g+dt!lq@ph8kI~K9I1|Gke<ZnLRHza*OAgwb zSPKAG++R#48R0HQePEG4V7N>=)Q}C@Tjs_vk*tbo&3Nv*J2ha@-V~{sFs7@-`dImR zP-k~+f;NQijuSz3erySxBXG0^;1drZIfY6KH8Mfy`-6=~b7V2$rb1S%*v(cB(a|Z+ zSMdd5nzsTt6pmsj_g9nLD9(PUaXX2R4^@EC!07|$52X)R7pxw2AC#Wp?-aUMq@IwT z?fsNnC-x@}t&T+`$nX&4$6AHm} z4hLP*Aur5=b^howdXZKzSWsx9NOw?9Q1OUSObPe^K~b$_HxNRrNYnv%SPC zRvVMzT`yv;J_rDu{CbnIW5A}$XpJAYDfJi}(cm11&ZRn>fUO(Nc}(zHqRk>7g4z8e z5C+ciZUM|{Q-QpK0OZEEs;-U5rT6z^2GEK;8cKzbKTI5cNCRsk$c_X0YMi2o^y;c?tE;Qu(V3K0oe2jxH@W1!qmsv#Bx^3H?;SqW zW3=RY{WApb0#%|HpDtfzmWd+E{h|E z`gL7`*%sw0Gw~L{1a2U&j0+XkNXh@DuO8LaU^>_3V#*HAmNfTAbUROR0UByHvAh3H zl$XWp_Nrc%KPv7F;&HyjnE~wv1PLW*Kf&B9h{;QXIgGbnZ-n zA4#zgn8C_!6Q;Se&+=mzYSZ=V*NGw{5859oL{ZAp0i_^ap&Ka1{lUTwf`|32V$J+) zMjunpZn5+x(JIvpu2d&y9*XQ%&(qKgxTe27d~-1D*jkeA0At_py+ug4xTVXk1b&&S z3_D%ii|aIs8U+0a3k*R}Z#O{2;+$K{(f#X+`33n+-7XSQ$|5a(?CZPKvPI(-1bjDf z@Cs?w~Es1D<{rq3_7#ex?nh* zJrJ>IzhK;7Eb;p)*^cFPT<0cJg{`KgqRz!Dms;M`N;%I>-JG2t zNjBb+blNyc(hP!bdj^1VeE+zr`w6*g&@q%C zSc->bt|W{@Wcpg1U%B&}>f74un3Z<4P3D^FrCyiK+?TFBT?!^B)5gZ_%75g|{?Qb5TTZ3iDG+Am0^~rY;2BB(95A;-Wi;RhYDLrh(d*VNKi}XM08& z3o+b%I8yTMV|ym2*_jq(%Ag6Pi2zI;1F&M1&OHrVx`IuaXfyr|19K0g$b&n2*VmSF3AU>_ zM3QRrQ>y_#)PqZ;FgmETztFBg8)HOx6mynaKnBbTQb|tuK7ki80;g0}P-rJ9@!X$_ z50_=ap4-Q`w2pXQW$&wRfr$H*92~%GF^N;nVRMd%D@_CTb2JvG5)FuL7v-kirc_;r zy-jcmU_>trx*n4gPN70$oqg<;wiG8&^pD_Qq!Ni}k~4`h?2YkD62~BX3kT4rNK_ne zR5hIP5KAo+7DJ1qi%`Rz)|p#kyI`Ghz9Xtdwu`J$T)b7l>~&tHn~SZDLtB$nXsY$) zIr#eHY?A@_qzZKhv}v)IEdOk@pNPyN7WFO5rMy#Dau+=$6+t)-8g(#!QfZ|Rf-h8O z8vc2#=^Dbub8>yqZwbs~TEGnyXBSzC(x}$(^8ED=^!rs@zg0NGT#FbfE4z57QI*7=5ws04MDc3#lDI?iBNz+gY&s(7Qrjhk)oi+*1Th zBMf49>X!lz+E6VTm!MTH(L*orSYZgHJE$eYOUG9b*Fi=1cY+@8(G8m3A3*6yk1uW0 z2FThXeylRY3!V}A#=`+OgdwOer^jKp_-a*md8Lc$c2SohUuH&<%R%~@^$(*_bH!P` zx%q@mXMPu?I^v2ACxtO0vt}w&R+!Sp+qyo!hR7qkc^* zMV3;p2MhWkQU(aCWF%3mR4lSrH3kf(yGIWg`>dxik>VWszv24S@v`h=8bO{~HYLX% zJKBCtC8?2$W69Z)ldA2mJCLASNPF}Bkl^ThpP^zJlqusWa8G+m^k;u(2+lmfu1(ZGVqM@v14>$v$a6b5TPBcY)@jnL(A+xFtT4efD2a}>|o z5X;On8hRYVlO1ARBbGvNQyG%lSQWa%M$XF}UjdRQ zw+8KBe^L;B%xT|m?`F&-{TkFsqYV-*=h-q#=a2dOS%-4S=x^`su!7-YI@ye^=hYm6 z&c2IX)-Iev#oNW1SyLF5BHLd+t9Q5+`+FbbLl}vC07kFRPGYD^lQtJbOf$hsU*(u~ z?xMZphb?~K00_+n++zSfR7n>SCZHh?eT5)vhJ?d+M4tm*lo7vP;QP&-0~cwK zrrv&V#EeJ&Uu)fhE)$)#SVUVO_vFsts>7$K1Db#Ld!{3?lK`=#U^XJS@sNQaF(GuD zzwzG4v&xtYuHj%F7O@{Da&TfiBR!$Kcd%4CCH~FDh+C|SjyM)%HdQwHFaVo96ILHH zQplAVx9c1)Ml7(;kBQ58*$DbCFr3?j&e5%lVB2kw->3=}T-NW1DH~TMvwsbgMH9ArpXjgPM0y1hULZuvMu(hy z`(pM(0(;KEd?g*bHGUKxX8g=AZ@o*UDXJy2)+H&9?ECy0M4Usi9}Xs(uoOwNs%i#e2ldu9#HRm|L)RM&s7 z?h`)0%(kK}_aRON`V z(y--1M79|gbkj>eiAZrAa+ogsZQ|V&OE+aY=~w;?3=s#JUUJfHfl(u?qwO(&Rqu9o zu~$!(*38r_F*|40Qw-$}Dt4kXuRFGbhGs4wKsKeE8VvAe8OYh6s=?*;?9QxQLZ4nQ zA2h+(8onx-p^lBml9A=JC6(zoD&(gW@{{Dx&H-8@EescJ(7V}&RFs-zB7+$U(!%7QlJ{?FTYXMOz-#7|IjD^5z>bpd##b`F~QNT{^` zA~NwW9-p6{@==|lr@q;^`O==S>)%nDj*PK8)3ZNO@Q7s`i84_h9ND>-QQ0{7e4Xy7 zUmjC__xAn_u6Ub|Xhomrcrsi)stIxk@fd>t4`J`XU1{`gd&ahHCl%YM*tX4z zo$T1QZQHh4v28o4Bsb@O?&;CpW8ChKu*Z7$de)k2&fiQ*><1#-+}_s1`7D&13H_V% zWeiZXzY{)xMT;oKeF-y671NVw9I~1d=yp^>NNE4pvXqJ1=f2EcKT3rNc>4= zitM!Erd|rrAxOe+5DdVkgSK=STE&!QwTg)+<%*@|nX{rOi4x730IfKZY1sE$Xj-1- z5p;u0QQ-l;{$C?ukD-L0Wvx*`auW`vcM+Bm=5WQQWX0d8FFV?e`@M~%bKPWEKLr@T zqog^ElJiY9JP}87KNyuh=*V(A*JIY9CE)5Y%rGl;!#)BrC%4y(Ig1J*ElqUL6kbpC zGsq8MV)fr(;W=oRI<-YYpVSFq8y8JHdN_8uxMRB9GWvpG-h+Nk3}>m6S;XZEET9AL znI~6`h0T}&4rg8bqsA$_AEXR%lnglD2`ZBsB#nz$Tq=z71bA}u`0^`#!m%Pt~^ATLv+GJ$YMrCE634)_BkZ6tHz0pMp7QV46}S;Lw;@GtpPw27(GeL zdhT`j%&=%IVW1@MTJzP${~`R9O6%f&Gky1D2S4?s2T7dMv_(-0ofSW6)Z>HWK(zQ| z)D-x4MH`R5PLMR7e-W*-;o`Fr?US2vfE-g$&(~Dl3$msU(aeYEWiWkPDR`ApWBVoG z*8$p`AD0&Vb@X)_I>G5YEdhwIf``h|>B2y{;mZ?P2e%qe>S3KsIhfv=?&w9>Fu z6oOLe9wkeuRlnmz+Zqtm2h%>6)@Y>pY$9gsZW6j$Fe%^XFnj;-(FoAI-FQ4&gKpCA z+kmN-0bpxC^`iSL9GOw!B+cT^`?0~H&~hwy;^{n)+^~T!;f|`4C*ig`+_LtWGHYlC z`tbY7<-j1wi?`A3>_rh=JAI~v;6003ORS6Yo$d7d*dt_o=}Mfd_MVM~sC%j6Li0p0 zOQA%4`8OSY`MG(Mk`bQKX^NI@+Ob1K8rhm3U0L>YaQvTt zZpc&&3R;KvyTi0)7@R>QkTtfKMQ-HLVC11FPTC`?&DkPT#nG5rPhYgs?XF8kFko3g zYzOP)yIWyg-Z-)72_!B)bn7uS6Zs=idJakNX*nj4*>;KcG+XtdJp|znQjY6Z9s=>sTP!m9#oPG;*Mf`B$@sK zet{AKdw=}KyK#9;(flaV~kNzJ#=~9P7ip>?`-V+(2idd zEz;6N4yP^;G6K`(woT%%H?TBEgBx4GG- zxd7cQVUH`=XA)OfMWX?h;;=~}yb%129l#4Ll_lV>8nr-r-HR$aN( zK`AmJQfk)nY28%xlmO<4YxNjY;fYyPa$e4t0I)}2?l4UpU*|;0=cQ&YpvK!2FnrxO zwL7mIPHi-%l2DW)?9umj`=_SbsUTxNTv;u7Q8}8L)XzFS57!rm8ex^*b%3F?(M}IH z{9bUq|I)woAoTtA-Xh!c>{6zZIwEXxw*0A8IOtX9Fe5-$mS+=(!NG|hxU#}ZTdAiR z3IGw-L{JWz`!)L#nxb63I%MHvDkig1%wKFgS$a3;hBxbQKt+M!N;exlctwsF8~zjq zMY`m^39%cvVv;$2%NfjtE+{p(e#>q>YA;T*Ghn=kFWPf5loV8Gh{wg>BAd87W=q&C zPjK1N*pH(fTa?W9IC@YIj%pfd>6XRv3ovQ5qsYrVu>?ACQVK^k=ai~I?&|fPF{j+E zDXL5gm&EZ_y~EY~7hEN~C(ldnhd_t4I5Q*95UniXI6)6ze%jzR4!B&Rw6A^?^rX%_ z897wO)GG$11A6mL7beZCIV2{&AT?hUn}B7g?oHl4se@)jLvh)8QkCpk*Si~50j$iw z(SNU)@-k4%+jCn`;gxxLCV$fi%1^&R2EUW8yma1gkfw;+Zafp|%Lt1Pjno($;e`Hm zs46{j(+(%8e&}4q=Hqxt7DhX51sQRpc)gC>mbw-jir4x;Ees;(h#j-gtxtGr`Y$7eFTkYIWX&*&zRqgXL}W*-h&wAj%5$ z-zl-WHyH3#A4pi3|BH1L0}0Cn@XwoymsKYLk7&qj`FbIz9#6q5r9J&QQ@@yvrRSrN zv;3A&I#&WF4l{38!ATC7B?nD#gpVi*K3PHlpH`QF3avoZ{$l+56S{?N&*b&B;87s-NiG&vRt3pOVN#K}cm5b3`}god399B^ z?&8aa^~#~1Iep9pXNUK>c3VB&W%mi&fTh9s+MMs%L&ip-e>}@^anaZNc7ZtamBq)h z{_U{w&GGKh4qvApoGC{DD2=7~ds(Wz0hvlOtX>vw3lb{35U2)J`RCAbWTq#jvJ`f6 zgBB}OHB4SSNpFA=JEu34EPQtLZ2ah_*Pxz^OCZuRb70y7W#nWX>7`wT-fTDq+|lmU zj*C-rC6r*=1!nn0)2gQ=Lt04rutA(KMTHKidlkn-hf&#~i3TzDp5qixmPi{KY66b;_FDFikIruVam`7(u4m*}wxTpx*?Xnlh1`U#y?%PIu}t6Is}1@UyK5(n?_RU7lAl|F)_rAy~0%Rol! zZN=WeL~UO&pI!BK47j-{3|8Up9~`7Y;!W8XhLYBHGNsxdWvUv>{9w+mQSp{S*eT;D zveLJXt57>OHml#&+%&OrW3gAgX4MTqk~v|7+Suq_7JB;tLP$Rm>^ZMrZ^sIpf0A(> z0*?xcIL`-K*Z~)fPW3x2OuJBbU~KJI64lwXj4y4R+{1rV3b9pAa+W4fTOZU#Hbz7O z^inkGWc=a0d%+hup!HW1u0BJjuIUK>5&h$4HHE{93224vg2+%~nHJ_!rXQ1$`%+MpAn&w7;~Nozv+bPW*9cwE#>mfRO%41dL?JL(XSCK2All+ibw z{xYQGW{3T{Q96s+yDQM+Ee1=rDN!y%e-hZwS4b=1@86m=nAiE3(woib>DgRR^!-x$ zrN2VhY1iM&`{DVf>Qwtx@AS~#9=63rGX(RC^y#BkptBpFDqk5ChSHcjYruw;ivl1> zlm;;vxOQa$q3kIbSm=;A@CeLk>c23Q-EI_#Q(sDP3BililxdRq9AiWS(daf~GPJ-3 z(=LdON)`=uPKpi;Legp>(qc;kjt!MUJ)%rXwd zTVUhS%ZU{|+Bmpp;>n3eFfBG)KzPX$zgU^LOP2pz*fT=n{CV0Y~T+J@y?mBin(Ka$IzX zU;&t1nNru{z!;uyR|%Xyl_30ZcjU~$OXf_!<@ssimD5!45C7JF0}T{N)B&(Q_?O;c zP!{D`j}(th3cGi?UJ3*w83L1yD3J9~5+is?Xj8%Vd3%G7`u4htnz;&ocx@4#L?x_n!tDqP||F&QO zS-#!nYnR^3LDLK?g2KSRIR}&!S~nGTGsvQk0>wC&cfw1zz*y0G>#o&Z=t*v8m&Ly^ z#Nl-6*{bgVj~h4JlQ$Z984K+*@lM@I9`hr0-%wH9t9%r;+5XGG_Keg_GRv z>-0{{*=}MM(s;JEM4xOrZl}cfRg*puHp4D#>@OAOALTlO-(Q-aU8*nH^#qlBu^LouMb zy8-Ul6#42VZK*DJ)wBd&jLkCNH9cRkQ?d}8TL7rF4hdEs1uEsKz}hT8Cy#htL{3sWE2SW9FVPImF6?CEBJbWZ4DZ=LQ=Nf z6<{a6fJ`c4k#hsADc=3hZ1>&F?3~U}5`#FEdSw5_wr~WP=sbyfJDFmTMFLE@!VL9o ze3+srnVDv-IdsA!Ou9XN!tYz9-3W%EqwECtnxM-kPp6PZxGe<|KrQ_z1QXU160dsd zd??2a!#wu=a^F$<;OX&nXJzE+%g%Ox`=gpv@tQj;-uuD4Sz~%ozs7^y0QS6iYi{Ub z;9kbaZ3i=SFC>3p2B`}DA_09QYAs~QR}#<@Y9R%DrW->0h+KX zEGm2oVmCPEC2BA2=#gPxYz#HaCmN;dnD(?4B4RYd4&A!clc0|AD!rFUGfx6#ibUx# zHy63(R3st|a3%6dX7pTY$BBYt8bVp+Rc}z+Ht7ot{R@k}cuaYRHnuyXv1SpYR=E!t zr9o+}@;8S`%04-8JBUpB^cae_-(NR4u;#LGEyKpRX{eM3^dLjY>wjX!n^FuTFo>Md zv(MgJ-(Grz^f`Q-tC=RV;}=yLES^03BB1H3lWxo4 zQR1aGshH|9JZc5dWR?!RA?!U)VxGKTqU#Ei5BT;eBsqzq+3FB0B4FXm zA_FaueF!Yz=-E^0W5!$LA9E>ZlZs$piU=U~NCW+Kf052J2Sh%`-1g^dbzB38$o>M< zhWlD%07XZn(vP}2cEHb(UQ2goHoGoKS5%)jh@sl%)2*S%0Vmg%|>g1PA^ zSMsJi$gKIeORck$Cu2w&NbkNNR5Y9sWT?p1UFY&2-vqLZyjfjPbjT{}!R(FSOD0h5)*L_hE zt-$Lo+}4Dw&TLsaF2jTF+sE3MogXLf>;`KB9c=yyc#!<{PvKt!zKtCG2D_;Q1imcM z1M`1qM}+rxi?`%c^(Uest7f02-k|J zdW=-L%(1T7Mdd9>M&nt&DMd!DyzjfwGHiSzHdlb{0`CyT5_(A9B(;@%*z@&xb%(f$wH^n%g8qSi!{VALdEo-9gClpsiRxW|p8 z-~5YBK0b5wj92!+Ss?~o(QdRHe;Bz06k3YKrVxGJ6!mc5AZ}P$S`m`chhiw2Ba^ct zs4MzkS|leImxD->>B7k_g?ljbKi6$*q{msQndg&8w?8|px%@qi`no#P#ZCa~+86x8D$P+a~DfM4xr2PV-LWWz9_anhF2cKo=wH#Vg;?D{;)!LvJzzRYJ7V!C_jEE zFYxW`@?!Z9ymIE>^-X0ciHADe&$oZOW%c|f`zIZ|7j9wRfJNpe@-{b6ex!5dfc9Vg z?BiV>!Th%VG($;WdMD33;)g8#>2U8?Ml6We^Y|Om`_h#grvU&a=g&G9?3B@ZmMXYP4!s`pRiB=5y;{`AJDs_B{95Y6LF;3+aD0q#C^S4+mRC2Wj*VMY`KK#ofy4SNG zhV^2}vlz?Ooh)qy2or#%9)XMW`5}BMF=Yd!Lu$9tH&~DF4!ZB+O%y{tgL19R&=Wm? zbjOlsBa6!2Jxs^IHTaaqN3cES??E6e8oy4VnAU-CJ`~OUU0n^=xIPBxxVq4a`E$^ z;O!2}IDFt?n}H^(YOZZ)pL19XrMyh$X5 zKAd>L+HMRnR(v~?D&}}L59&_Vn0twB>8}2qt72cXB4i%HJp!%%siXX=Y}|>xPf7i; zoO#JC)@W44?-?nKVSz|=UaI43vjip(SK`zG85uAu#4Z3NDB8C}-;e`FZa)W>7gUhR z);BW9aj`qrr;M;uf5IS@zL1$R{)X#>nym3kWNOE%27-PM1BZl@tHn&^vON zG!H=PRK_yAQvb&yr6A5ZBB?xpPIqMryGUJK07g(H@WyYJc24shh+7&^%q>0m4&*Ta zY-p9j-5(+_Z+1PT>^vIkG~j|aI>0h`-wYbZs*not}Hjrg57hzJoS(^Txk!sfi##{__vgs>N^)^w0PO+TvWZvIE%x+c(KNdn-6 zC|$olO4Y>l>qK)LaUm$6x1;}-M`aup!ZYZ)NOCm%6}`!lRpiBzodlCn$#n&jY_H-m z#MFE)>+bXEe9%iXPE8oTD8AF$i7{~A5x!eszW%s5A*T5QK8ZNn*sWILTH4QqyTw46 z)qqFE!5G`GOa5iREV#|?GE7%yjqExGa(7H7(orX`#t(}NJ>I#L_}86 z(>A_R$3gPjbI$&z#(y`FPjfmMI}kvsF6vySQ1XJqlS01<#}V5078r zsG-O{J^b{1R@ek(U^T*MpaH-@jnmu7*UMs6U3QIF#|$E2i#bZZu_ABi8knWMNHp-S zVQp@AWR4|=p+SgL;=`-@`ZV3eb@2S3z;V~OVc)a84@gthAKHcM7Cu%THAUo9|I!6K zJkmc-Ku1cK08{%yO5d9@?>3UHC-`Z`P#CPejW4MZPhN$Y+mlaIsV9JY*?U4e=|Ub%^EkreRCW zpX^JhO0IN=4{f-%xsksbirt^@DiB(dJBSfmN|O$}xE z>1HPNrf4X3~=Y3Q=@1t2#x?ng8VQ>^ND&Do&MaFctS zI`2H96m0#e9eW2M31pxT|Bp{mp{?1X6V!h>>|-lIa3p{n(2m?ja>r7t1qkF@m5-wLPw8e{h|S$E-&L1^o22Er zzreE=ER~cn`%!Mv_ym;inR)1XV}~b@NY-==o!06^`EMHh^b!O+S5WbYfnuuk$q0UoOrfdaNd{yz>o>?olE;~!W+QtJFBBwnhX3q0(9X`=rl zk>I)lZ<<4hJcsG_6HR69s1rsc@*YC1adJ&5S@VCo5(=~j_cq@heB)1 z($wpvtYs$`*dQLKL&?^Bdu^f>wp^`B-*9$@)*3rUTf0D0BeP6+F>r0$8dT9qw`^3b zzP$?2te&f@@(6O*Ts;yZRvyKaTHU|i^IJp)&qd0${vN zpNwD459Q(%L#kjGM#Lk~GD(eySh=pHRPD&>pEi|Q6xta;Yz?v~(Bz5wqaXXM z{aG8q&XJi0e1G-mxtQQKJe#^OD{MX1j`nihi$MXS-C$kcN3+``8A3bBOWGD?Dm(2G zt1mBqptdSAO=sRP|DQ?Nxn;x*WbmIwN`?O4JV8%bM9Tj|2sT>P`lnF|?XyN-2+f+> zydibo6Ba;tTtsL@gHGy?@|oy5T91=r>Orguqf43Z;KtsJ*o2$<#|u_ivVDGHsiq{7 z7Rgg?XDS#KdmmUT7*?}&UzFYx+5Wry4H6!-$F|}aJNZTBeOh!Xt<@S^TP9|g9)%A~ z4Q|gTF6x~OB>|pil{)p^3w8m3_ZvNeoTc2X=R=App4HrKJzKB+-N^Lian>C7x516b zK!cMVEruN)800U3o8yR~_n9nV(yiBM>_cuUAm* zQRhjZ%<=bq|5EA+OdBLOnu6kd04hap*uuhLaUQK$acf{&%jG=3M7TE~6$OLZw>T!` zcJTQgLu7oQqN&^|&Woss^kcquvfNkn@URfnY})L=J|X&0{zR!oVFHFMWf5UKWz ze&?4XMs<2_s>5VjK5%HMT<6w|UEvE%;S1z*RYo)+#V1ilxBilkJrZUH{2f_ohU^%M zIT($iP+@UANlEK>?bI586rGLJOAym}GH`nF@6g4f%UDklQ|+bsi$&6jTZtyCUv!iD z@xgg<{XVJru=SEXl5@2}!|!9g9!FeW_LxozVN-SC@~qviqL(AYtiZj5#S~5q7%B9f zwgi9G*fp&F_CEEt`LgihXzE4alFlE8O1Kfq?kq#}r4M8^k;xK3DIyPB0YrptT{*Sw zU)Z1Lv8F^2D#8YO8yX^lX5E5RkIrsOx()Jr3);SFnZGc<9;*HN#RkRRCVsd59B*cr zzmM&yq^h>3CT5t*2>P|GWlN3O0yx94Wnjbz{5>ABEfcUK1Pzt>{h-yf1b77 zoxW7Ix3fT1KhLFLbh{V+MUI{Wy&|^G`@$B|{YQ|^?cFec`HAf_K>l}ZKf4kZ4(fkC z<<$C0SX97&)9i0MLW9tQ$@+dwXU&Mq#I_99t(FC>j+eOhsY7E95KBXV+^ZlYtZa4x z1D=W2&Bnn9SN1=D0>*i2{NcGj1*N|Fb%Z=F8V#qkq17*6iV-o zWDwMG(P;NWDYg*4Lob(X*AB8Tq(QQ6;mT;by>@qp& zLbCQmN0vQvI(wsio$5UMIsatp#w&7CZnnm~bun`TcR2l<*{%ChspuK(N;D~;@+>6V zP;tODcv2YTYHbUYx==(`%3J2=*Peog2gb!5xU(!_-^lc3+-dYb|Y zv@TDZF%|_4Xr}|uW|bpNn89s7ieAIe%jWIn^U+{PR<)ROG9l0GneqHN2t+vXkP#7q zUOo*t6?#HJ@p|w^4W*6Dw+=ppkJ3GE3<0Q@c~6 zO52*Y5N5f%SyMWtr*gbCz|0d2CJJJYBgAGY2W+_@S`qOybe4SgDm07RhOGv;#*XsB z8iv`zeDtcAF}QOGp!9OtB8QEWapHs*%-@$p*0?)1A=W(0;V&( zz%#X?r$2VXd?qoZP8-y{GvYtXkk!Y3xvwym!_+0Ck9v%vxhN8vx_NTdEW{X1F4Mgt z*-(g=3iP>6A`k6lYo$sbs+a|2jeM(FJu%ly5R}(|j^TfFTdI-UZ%nC6Ycnj77mvvw z4=3>^#9A-ncp`KH)+_I9c)0=%kUkZBxGhB$d>pw)PqUYFX5W>kZ+fCiqyKRTWZYF( zOr?GZXWqzVf6P!@s+u{(XnMx9wepGb=e#L>Yhw%Nl0D^wte;6a-BPC4)nI zp*nd`l2h1%zT^m8PT{;+fg(e?nb|3LrDcUdz^yr@{EYlvDWQN6=}l7L~ zYt(6LH#ctD&5N#A^Tt~*)}`6&d5O{a0!yFa*Bi3G2u{b-32rbAu2jZ*5+eI7swC;U z06ir2JJ+1qJv&bwITwWPpM^C%0_QKCpf`0F&e=l9!h2bD;=0g%Pp(SwrP085AcE3k z)k+)~inVm{DiFWN6Lu2S$1@M<-+10&$$QBF+u!!zd@|P=f!SX|YfD*!0MFVD`f77S|7@!LOAP0CaoeRIs8kYN{p7yF z6}WKKWhPYWqQ#LO{#D)9#WRE*z}J2b*LmIP<#z1prE}<}{fgiW-xcPux4fwP>me+b zky6f25+}Zd$bUx=iKTK(i$FUB0PMuu zg+g^DW;a!FC>SbDV-llW9|-Qi`MP_Uu$h7TaS{?^P*vz=Rl2LV)bv83wq#+#iZdo5 zI+Bqe1AN=)*cKX90{khmX{D^)UE<&3nh^~1`l|@`fmp5|jjFS--0)mmKUYJ!5G})+ z#3PD5?nZ(Vi!UTgvWl%yi5H|FF#Y({gBQ!^8Cb?q@qRv|#*h`c}wNlqq2g*;b9 zAfItXKu?~E1Us2?y~)axdnCL@q&v9eI8 z%br^#rj-Y#rn7AW>`BQ;uILP5Fv5w6xFD&kEKc0ZVpJ8Eu;CgG>-S{0 zDgHYZ(64J1Aq6-b=^ivVZ&xEbt^RRn(|C!am1&~=bNI*bA4F8ROg}#A>2mH^h{(sfb6l-1m z*^u!3zV0>JwI!i`9vgI1;v600?$O<$Xdhme{9{c$U~fjnR3h<9a?Jq*w4G-&biYF* z@3cU)^D4AJ5Oy>5*|YCTSN|)0^#4r7q`o^p{&Zl3PZUk(mb0G$awAv)Sf*jK&~N-VU0pQ*mPL8w!WW<46Y4DR zEKOzN=f&C<;9M8)EK82h4;mH@3JbxLEnv|ntB$gJJ=_i){1_a~81_N-cCAux3+ub!TTk>)izHW4_$#!|7F|e%hJe6wN;P6BF1xbz(YZ_ONdxJSWT{<08av~KX^OsWN8mrF#T2ewI z-DqmoJ-P~14c#=SzEs#^&pmcDPp%AMR7I`KFg2c5%G(!Iu1A?H95wK)_RFsZ6c6|9AgaQgWT!^}ew$1Gpg zLUSAmNiR3bl!*&V}RZZ={cL;NdUlNoF=w$fOQIVeLw z58}SrJN^vbhAKR$2MB(oFP{QiM9&o8#Fnr=CNgA{}z7-|BQKO`F0@RQhnJqGo`_^mdNdUVu{)SGf<+LrFHhZjrjnD`^yChQCY-28f1j-uTdH#!_b@>+vNGxZRM9N_^@d~pvk z_z@%GNF#|U8hPV>H9BjC$|>yFYSlO=hFHY;G9x2GR=2PQcvwfV`$giuf%xmDx7Uhw zm{9Libqx#P{&d8a@EQAknY;@SS_(`!dO~^Y1)jZVvCETg2FP9SLU>(j=gipGVepl`hx>QePB_mO#OA z%J@9gJq0LkXh@N6koB=yG^Z`ZDC0K^dMwnEQH&|i07(Wp@8sj7r=8yHca0cdEDnwu zc$*#z9w5M0#DxhtNF>A|80W?*G~WV{=Vn=3c5PRS5uX1OdWES&f$Fe(n< z1PVcE)I3Hh#X}E}I3!k>Q{t>w%fkh0F(4La#?XVaC=GTum6Zj)Sr;97e|NvEwsRGQ z3&5xkHCT;n_em(LNx|WVLKY>DF-*pY-*G{my$6ms%h`>SACCspuAggIGy96_Qc;Vs z0u5b04ZWg@c$o_M&|{D>HwVuyaN~uH8}OuMOCVb|?4^CIVF3=3YzzX_p%0L5FS+8T zA=K8dCasfC3~pZ#EP5#~zm3|&#pEM(RlpV7$(tt@y-!m@jSXB6m^pb|6I8NGtah0ScrropZg@{Oi8LL6WwgK1^!r*V3`deSd$~~&m+}f zhh(}Km>^#>^0ZznqjWHNL&#rVnYo_7*jrA8nlO^IbD>Hf))e^%g4k}h5Vj!odjLG+ zluC~QMx9Ydpn+xM=4(mO=090MzN_%w@?>YCL~1@b!NhqiQ-!SkStF%D9mI#T|J>2~ z!=+WW7P6jflR*iVupZE+9rKhrbF9*024$sB8SPm{acIy3l;AsY)a%54UL|v);pNiA z;eh>m5RSIT>)V&pF>eBo`J4$=!~x=Y+-O>lzpVhWqcj~>wCs7-!5%se&Z86Iz_25;1b@(qdB>`ssGYsyyVh<&k&TBFKI^YFF7VD)5&C$k zN^sPnS^B3^iZgR)C+Sqt55!`~QU;tk2bfTC`f*%XW#H9^15W3HowB+A`2d*FCa5hU zV~ScDQjXvCN~7pgbl0wa;Ka{Qe5@IB385u(GfGpUySdQzGr#o&r}r%{DgB&B8jr%+x@XZSk3K-k4EK&NmhOx#RLp!5_g9CW0{6%G zr@Xtc+$=x84yw1Fz3Vgy&?ruxHEdn8bp8n=ul!yT^WJI;WOJpj2q3=xheBD;iu-P2 z$IklP&wxIe&nm1ipj@WZPOQaIgFTnKGULkG1I#5f`uC@PB&`0@vM&B}Z$M;FW6pr; zp6A4s1mq8{Kh*G6<3Aaam-H@0jIAhZu|-`y_LD={^CNJks(9&6(!TITS8J~M^E@gs zuFNR%sAgK35@#|sF2GnaEJ|Ljtn}colcQv}XhDQzs+nNg7vKUNG=l6laB zsgGwibSb`m1i$C0LAqkS5w$@4-fm}0#~u#IbmNYk1|{vf$vzwk@mqc4Vsm-Bc~+&2 zS~}P0XP&Q@39cWi{~dSfw=-XCuU*)*w44aLNqNz=oT-8k69RN=_oU*?)i$*3>F7$G zCtO#>sz1O<*A9-Gocg7nr-LMh$*?E%12BXS&HUq;7lwtUcn3n*gL6Utf}JlG)vCe~{H zGFUQ<^UxlqF9Plvr^n>Rc7H>h8K~06&+OMR_DK|pXg;k!JgFYkxVNF%ME-y*jmcn1 zG(8>~1g2PwpGHfrc_+z5JE`L;WGbGiD}fSsd%+ow|J$(1<=w)w8F#kZMH5$CzuC@|GbA@PCI*BAUf*%S zncXoHW(~_9s>hXnJMxWAS5d(?F7fYxL3^r8InZ)>cyhHhj<1@mHbHD9p#S>LZqik` zkV{r%g9S*nFYLam@}zEMVH3&B?|mw{APXruE%TVv%JhmZr|egOL;o9wtIP2oBjv@N zr1HJw4>VU=x(K`!Cm@orgstd>YKtQC_!bFt@{Aw5AY5xQd1r9p#xxLErH=2-T){Hy z#Z@+7f*>Lu@12cPiqz_FSIpNm@*j@CgRIhDp#@xV-`A!uetvD6$Hn5x;LE9=122RkCrr_K`;F8z{A0O8CefU3>Tupp)yVT#O>4AeWi&hNK|J87MJQ4Z@TB3CHa7gp#m0puv zxg6@6e#n?-wwf8hFv-BB^9v}^q-iXItoRJhm0E+Wkel(2?2QJ@&zBXs8Ixa4QR+BE zTQc6x?<=V2B40baDvC?^=XlQF@q)AqbqN4{mE_HZNrCC1y>nMh8R6589lWH$<__Oq zr6-~Q(&~47np7J<5M1s}6!JhaCAY9kqRY_=tk`~AFx+bmp}5>UIm0UGd7P2v8UK|j z@4^lLxuEe{=&;^Zm1eDz+Trj(vI5B?D59h9(ysWXMFgO_#NMr4wk`ud@K)kqq5u$6 z9VXC&Ap&8&S^IRNmnK?PHsVl`7rK}$OSE`0X`Uu>I49gyG++y*=%jOY%kd_*Q~@xokyrECusXl37$I{nrt}7F zK}BoqGAt>Lz`;seXW1f%p}E_EWSjg)^d7a{LZMne$-som{`Gm7}+p9b=BlQPk7qN<3s_5|~k@D@Edr>Xc#X(K%rf?x}LedK^a@P|}aV4sT$+o8j!OA}YnV z5k|2QC%l;?&tg$yciaQQf`sw+GMG^+$}If)PpF#zzQLz8;Li!f4E?;81uU?i)ok&) zuv96{l8HY*Wpe|!IV&Jn-)}cMxncXcRdF-EC%zL3+8ri40Rjy~a=j)^Qg1uIv$Jdu zEshWqX!mSl>OREHL7WTV#p!1Bmb{yNjqf4tVg40R+m#%poWPj^Clja3(n@)sm&mCQGycaC43g1%c!A8n(riN3c~~)ykhB}G z6P&-U_PdIB)<5Lc8oi^>=1zs)u$#XOFw)X0GU5$ri4BPoFuo!Nf&(DHIGBnu zS+*-%&MVg)R|T_k9A`D1{KB*8z!E@U#HT4GVaADRTuyf1PRCO~gSG`46?QQ%VJB9@ z%aNEF09)B`I_sQ^HJOxf{%p+_X-^tdwUXt}C%9C&!FS66;TSk;C4Q^w8irVSF?cPm_XJhOF zSR4KBxAJCtH{iYyxVfButy|xoQRU-~0VP2C0PY!}boO(qWG=IBU$C3;DF6;69DEy$ zkMS1LR&{Hbv0QdtmfgJvAg#hgDJSP4sEHE>f0HP${~|d{H$K{I+>(q_W)P49 zkCOfKlryC1hQNF%*fPA+*|Wog#hZ_tqX)!MliWj!8Xl)-SGV#4jhr*?;(F6)_z{i^T|I+9ErF$&g0-41K0gu6^kc3`gX_ez*0GAKAms0GG6J~OJA!r+9@>8Jbl_Z$xxf;dvc zCHNnebTJdiO=|_G%Xy|ro~b!+r~P1k>8?;C%@yuR2JPF4WN$;o_DzKGY@btnz+P`g zlRiV_#nI5JxtSfMa9i{?Rsn~BMQ9tU^Q25G_AK~NGZcRR*ig1MSiw#8v5^=3WGaNwG>a|>v9#i2FDtS2MgNe z^DBrzDk5;7cXkOj8jI)B-Lt0zQx^x~BoozG>N;WEC{k__F+=)t8lwUS2v!Lamk`ru zM+wf>%5=$Y*WN**0(TJA`(2g#Qtg7{K=3N0y~K4rlk^BTI=Cv@7G`rQxf6+@+VH>d zqeMMITuO*ToEkGjlT%W2^n6M=WKt34f%B_uM*x4w?H&FP0MBbxkG;#6jf-1gT>+) zoGN;ICTfXR*O;qJA`}27mm2#VZH2HSLc)V9c>7+0$}4Th)VN*h>F~K9LUPP*^L8%Z zaSGq+=FD?TuRG}8{jKl2$3Jbsw;O7B@HGz~3tKS_lCPCy5ac}D6C4Z_vSEK@s0?z2 z7a{l^^RSFL1%ZbXodXj89!;At3AnoHvE1Hjx|q-B;cU9==wnkiJCx60@&uyHV6wQm z?*ay1YK&r8wvYE9B4n7aUCR{dRz4rRG_9#Mf+)u1u`k8c&h@5%OyIu^xM(wK3$1AI zSj!p4r3!69fbP7AbzrumJ1&33;sKvBP{{>z;sVG}W45sEzyIYw;%%cbB-$BF+?@Ec zBdfZD_)_B?l?hX>4=mGU+)UUzu?tfVEl}8WxG+J|j&@W{94Kjsnd6=~V{9qMo9yXe z0)c{UYbJJ>GPJIf21J+jIne+<0d(RWa6TKj(^(?1s6kRR@xbfo+gyJ&-ZJ60IX*&7 ze}u6NMz~=%pKZ>EN5vL-HDUl|_KLs+$V@E!A+stJfJ4p}?gVmerF5HfR?VTol!fW1xp@_LzucpXBqVk~N$j&P_#%)5-L#L}<`p|gLP;a3Pn2WDDWjVQ|z zO1ZW9Hw5J&3@i%w@Xgc1Q$kgh3{D1IfEmOCBMOB=-GOxtF3gHp-h$MK6RdEj^co#S zi4Po3hqVjVOHk)wBNoJ%nKv3a-_Z--B3Lhe{qE`&L7R`MPGM5S1%@yHHs8nYu0~~U zvv9$MH~n%eUM7Dn`zO{>ctugo?2^sUB=VfvFpZ7#x#7xNvHH!omRcggl8!Hc+zBZb z!N)$)x5)pyT;cwl^Y0-*z|OF&w@hOJo*bT${P%pRM!G9mfJt{YD{wG51YmMafW)1E z&V1!jNMN2ECIT_%rlDUm?qE%~!TWx_4ZhkTV#W}F@MnJjLIE-(3-k^w!ZRS!50AQ> zF3Ms`vHsd$3rR8d)}?vrycPw~WezH$!ewsvyEsU8kotst#edEValZ==4|n)B%I^m|%k zNw;Q?wE%zLT$SSW7pP3R7|zrI_p+pFENDN6^mwLYk01{v_xs3fU0aBrIq@YID_MEh zY-Ou3(w$Z3s#}K2lXqU#n8^kSYDw`Sp+~4>3_d1~b4T&WdnK2Nc>R$Gs7I7=5lpTZ zZ~>Q0C0sC8N&y#)m%WgS?CB^Pii z;wOB-;LRcxV(G4l`~eo=6Uj5E9xvPPLMRkijWr(ai(ITRc*b09yByR#np9uAP`AyG;eENP*KI{z+@R3Te zS&mOB#6yvf-Q)hD|HQ`L+S*K%e55CfB;k3jKN=kcMvR<>+;X#{Pkt2(79Ore05=+UR`+SR~PP3{5yJcb-{mn zSJ10yTH^6dp>xSgxUZ>upg;jNAC9Y{?F~W0Z}~;T{YIJ1%?Ht8G=oW~n}tjaKc$~x z>Ru?9C6l>#P%LE<59sJjcLbx2e%$71RfK`7CLD%#`%kC8#0(O0qlR|fgIvPg?UeLaRV-$VRl9rSVgeN3%{_yAKE1Qm(`jr)S^PO+_Lo-NWI&%tZM&BkkJU}>s__UkO;_H2N z+$R1~`et8j?c+3pdpEkvpBYb6>>1T-j?1pEQwyfW0(_Nc*36p~IvAm)*#v(+?RL=7 z+rG`Pn&TvS(eo?sgwjAVL@Sd#-zM1Y-0a`NwLV29$#L2Fdb#~gCqo+A_G<-D*@4_| z=u>=igLF^=Zj|kBGI0b5zsv^UZNTh;fO5>Dk^gby=6jIv0 z^2Bgi8nN9wMOa?jh3q3QSbr*H_2v(oo^7M2CVG&GqQgQ7=jx{IzALf z;$6W8=4FTP$ca3xlF>p$l0g^P4T_FUa^$5#>Gl2Hu#FYcoIy77#5OUg3d_G6W-mmd zKqq_kD(k!vO4Evz}dam52x#!Vsa;zR5M6Riem z)8rd|#i*dIYTBT+*24y^r48DwJZ#W<+MsB{hm0zf%SoPktXZY9lsfDK4J(x^sl(pS zv>~{4XERt&yd8fI&&aWU!^pt38J)t!vf|xNgaM?|R8);!-ElnT?AGe_b|EBVqnv7#TJ33V zQfZ`u8u&f26DsW_Cp<06aD*8?Pvs$bv+O@XZKJ}ppC5wRrD>!FU`2Y043j8AINMTZ z!m};)R6T!^ZKI~D(M`d_38TVLs^lV!1L^3<=BaE=P`>2DcMT}4ux+2Ctb%aS838s1RmMi*80#9&0SfWbgtqNs+3yc%j9bc@DlFsfW&OLCQ=l zita1fvO6+a$;y{HX@;rP6YJY2V&A-*{ga?z1ABq>bWeR4o}7`qXX2Yjp=0Jb*%mK< z|DFrpD8upjOvcYR?pN^_g(d8hF9$$G1+yGHo!_M&PK7Y|v9=l5He zx!udl|NOWA`p19&pMU-5e@Ys`n~7H&agei#Zs@Zac}vG^%J6i6okk)H1!fa{LdSob zJL3D}T*gXSsz_y+EEBq_%u#H87Mw5OIw%urJ9{Lq#ihwx&p#aRk<1&DQmb9LG%w8| zo@CPT?b?u;@CE%9NeTNM!L6xQR- zN*B3-q9e%3OEP52#Iy`+yvSW8(BXgUK{9_480d7xrQgJ>V3DaQ;JOS*#Z=*o&dn*cuWKny<`v30{p-z9lG>r)~JfJ{RtKOOv3AQz`cNBx6-_n3ct>>u_{ zuQH%}s@C^lpjJauX+^Emdb3rlG^?ssSDK2_Zr9Ydc2}$}<;xJEyzhF~dtxN%Y*YY} za`WhC)$GxE_s3L_eC&NZ^})cWTzq>U^S3xz1ORE*8xI4>W(jzw`vRm|ZkFT6$$8f$ zK;C(dtD9t~Pe;r)=rseN3}JtsVg~uBJ6xOIEgrws-MB`4pae`bYEW%78!g6^>PP`d zG%D3bqugM$-ELHyiSmRo@tKR{E+s;1XMjfrvU@;9fF$$^`Vu6IU-~~CYkKS8myICl z;mfZ@enK@!8B(+MKuB!n$2;9WXEb0nlLm=1TQ?!~QG*QFtw#;eqU(P+lpj3mLe{4W zz7AR>y_xRdQ5;EX!nYR0!8^}n1bJjcO1V91wnl2ZDQOa`vP!GnC`+m~qEcO6@xfGr+@PfDY{XOcM-kA0M8X#go%oe-kXAq`xMsniA45pOazvC=~!G)PJf@ zO4!aj;wC{L;XafIpDpcdVjudr9d)soJ)oSj7c-Zs zWLarEavtlysT#`J=bKN*-3Os)Gd=H=j-sWTx|(f$rpomW8Nh$yh>=ga;aGU;Z8%|Y zi`v&jgDNE4m@#ii71k^_ni_31t99CJj#Onds<)JpB(<7qCH{jm!gL{!1(Ic)S+aGH z%)3%qN&Jx~^(YKiq~0st#ifudI$Ra*6ts@9qqG$M8Qt?~JFM zi(foYN;ZGxrc|!9Dkc1J)hw$4{8d6guYqg2;ustlRPgUDa>H({9dWV^&(~P<@K#=G z(U^qLx9&%^OP$ZBH@p~fk zthuvMu4hbM-6&QbQPrhnw8r)Em+GgJkCOQ?ylkfDoigI(kg36sJq;~#vLL-%l0Sif z1-MYRK=Q{6+&=q=hRC{MP^~r__0gzWZ8K?9Yclw+GOE|wP)D^#|J&Y|HaBu52Y%PD zs6m%cJq!kaO|lP;*fg7@BueZ|4b-5u|T4et?N z?-d&x_Re}_Tf1}E~6%?Xe6-eo%!EH|&qwQ=X$!lvS}{apCqYlWu2W0S_k2!}+3rgZ(Tfr^~k%ClQlIP|spRtVX@KJd7kCqU;Sr}*KPiL@raBx22pAP=M!PxqwDd0kj# zC~Gu-UAN=W<8a&^1g&T$>{*(KJ>ln{9N&HtZazIuDJZ7Gp6vP@F0<;P?kwf*Y>qvB z28}6@=flSf_Z(Qzr?8+XW;!2i?^QMq_u=P<{niVA3_q3@osUN0n3PoT=Wf5(#!#5} z7Y93?Pu2iZDw2sc%0)8St7Syf_B;!_j-jG|Wtb0k1XJ+2$nj1=h&!E@|LIkt&qwGl zI|$BwB|5>?IPpfaa%*$x<0l&rQ*l_Qqgt8usZc)NMez_L8^d-T;-Tf@ZLKr!+^bGW z{XvkQMnMpUe(#~*KbwZcc^Hay>^$`VNDk!$0RG$eoD1jmPygigFaGu1>mU8cZ~p3k z7vKEvU;X1B{1{6fJVPd(`hY^;{NA7a_J928iI1Mk-oir5JN3sviWgu1@jrk4)1Uw5 z55D~7hrj>LPyYBHe*N#i`Okmy`X@j7&ENm(w?F;MN%;Kwr+@L=Kl=6SAN)lwLf1Ab zIQ+Wv+yD8aZ+`#Bum9V>U_<`RAN`?!^ZLL3IsEN>^N0WH_0PWi=HL9~KmOp~e)He| z%WwYO@BPCse>vp=im}>R46t^i)1|x#zSjkTbASgbMpGYSkR;X3&5n|vZ+~?5cyzke zxpOsAmtCIjd*{Hw2j3`KrT-~QHFT!xC+#@E05^-rMHAAJ22Bpu7n zg#`hi8H}rU;YZ=keuFRF(D3nn^_pti<$kjTT?Ig{58sj%lQ2}u9WRxX zjkNukcxG2k>mkKrhTt%Ncn(1S-0Kcla8iAQ&K?VZ=J8ViX9gSC@5M|Y#c0ur7F!)3 z51r;#-Rkpx&?_dHd5UnX7J+cYJj5mb#DGG|D5}vQ4B{eGR>3OJRhfv;o2M{=?_@Zh zvZfcb8(kLlmSVvgF~r^KjrB@#{mFYl`+m)=+-vE6V$(?s~*^m?o~hFyU2ef};U50I!~ zH$3nyovW#GLE9)5wDmL&dl)F3_^3`0`q4N7vfvO($wIg;tRdJ)4f=<6jSUt!u5!|O zSp>pMW2?H5$*{eDDDsoESyfDFgtsU~K8BLBwkF1t%!0LvvCUI~Nc~}zzE)}5N((vY z6k90G2)%Bz4f_Vqf3`WIT2QCG5a32gno__n!=&QfHjLTGFr=Oc z0wE$DA+!pXAca+Sm{*T|*m0;#`uV zerTD0bk;Ed0L`Ds=6K}Y|GVeUmkbA91!lMy%0zY zM?Zq0Mg#GGO|pN`Y_q{nu{F8zK++K>6K1FbirWLY;sK@68im@h&B^g<$5x_3=$Lp+4u8kP+6lE36P1ai>!idpBhfp6?{!p zyB^{H>NFHKE1G%4rXCsbq**U?C}{7mIiHODuyx`L#vL@GiyWcmbSfM=#1XO_aLySf zz@WB&SXwco4+5s+79U~cGvp%MC4KsI$doa(AcYlw84PGuYm2LOOz{T4Rx68j%eo0b zunky|~&d;zfAKx#eer3s#k|KgPEdITj(M6^wEYr) z_6~4m4Jb#C$_KH7=Xpeh5?sS3$ok2exXzHyj;heu(Z$h4F%iz*1##=B=!&KdP1O#I z*FD+#N|kkx z2Y#%9gao8PO%rz3!LjR!dW(8#S@>XoWAB6QgU06W#{Rx=dfFG@+47lNhO1x%u8iMq zuu$V`)R~+yy)2qd<^oKsugLUjH)T|w@{zm&451CQ5=g{L4#y}SP>+az-#p#k1`=4F_hh*j>IAYL01_;;`4L>d@>3uqa_5|eI(6)s`#w+ zS7l5K)+oC3^R98|D+80+dU0=C1j=|gw$>#DKv4x|rf44-k%p6z25qJt=~;BN>5~eV zT~d%7eUbHWwIe_}xOG+@Ep=!$Is7_5!*o7O9cM|CfVRAA@d6j#4LPb*=v|)Gp_>#29Ni^166kVl* zJZ_>O1pMxrcJ5$iwrJF(3!*5cBjjSV0-_WmL*)n{o>mey&by&ypyFzlI#DxPW3Hig z45MGC^iFdqoUUOgLw`YAoWr}?33_cW42v#(GSL{D;t2Ml%CfN6 zTxy??KDBeGJZnA~MtWyh`Ejh1gn6#%ZR6l!QAu2Iqb7wKK8<7iPc)2Oi}1jM$xq7B zl)g{Hhvw+6(tOf*LM2Xr;d3@BQISp;Z&P8|8Q+NuS~Z|cFYBqiRjC$US%_l-!KydF z+#Oldn_%GJ4FY8&(P2c;%$NteHMY*v7^Q|6HT;D{TN$@{f>IuqY($#4%h;A`_x-4M zj|8^wLRP;0@7LIipm(g%FWQ=hVbZxchq3lM@Iv;0N$ zUbN`Y(MaL!gBYoe*HZ`X4Ub1%%+P`fw+7hgXuu-C5Br#Eed5*IF6Lo@K07SsC7X}z zUB4(4?R5Li=SCjG?~Y@3o&x^#Isp=m;uqB$>#s`RbrUEgv~)OZbR!a7H~XWoO$&si z$T9{Rnohb^ETO@FSUI{$2*L+32@wR-Am;Tv>i6i%A}V6vGPhyUPU>{SD{$0Ls4dl8 zd~1+UK4;DhVu6|)#}RH$42zbJUNp3PG6)C_kU>X<)lJ8pLo%g*jNb}Zekxj64AF4eg75hB zhrw~s19^vtL67MS)Mn`%^m90OAF1 z;hYv23yr1l8Bnenyyk55gzSYlMKT7)d2ae#hT|Dtq~O30ddj0oIcdD1 zn(@BZw;icX=CQ&`Th0P5>l8os$0X*I4Y8;6R!>@gdi^`3eCqn~Nxv=GETLEk+Qn8F zm5~`zx=#2IW?2G7s!1ljGGm?K>!;g$4<7HUnz1~#!LA4rx1bc&hH)d>jjT8|Fy(Q= z72HZG&?F0!u#!?AH|%#C-KEi8&P56vd*fJ2MvGRZXhOQCiGY$l#r$hU>C|XSc0rGn z{_?wjP>!S0S}Tdopk^fqQL)JtfFa06l(!O@bX~)B%_glF9a}L$%NHjd3^I)p?BFTu zW)p&HOV`e%Xa1?d=a+y?LQE5#xoU;!o?OtTYLu z#&2oJMBWx53}?sT7|TRU-SAcrbwDP9IYr@GMn<+ zxYbvb;3O=VbW^7mM!tBc+)&atr}gQRH0jn|=FZC&=Gi(?KgqDoiE>GA)C2^ckLHVi zwWG76DrV*?tJAYUsHC?!op#RxXS?! z9H4BauP6>>NGT$dF-#c1o@Q5SW0J{#Re=_rOEeQ&#B{fCC|aZqIAwWbnW7Fpd1e9% zNY*gu+<82YY_+|iYtF&rt;bG)*S(|@dFnSmJvfjHt$J6e4=PtuAINM>cCQ_96yj#y zrSzEg5`?j-iymd!kc<YCjOFOu6#Ou;g<+h_u##79$h78e#4@*4A^{Kg3T_R*#R z@Ock?S8~TDFaj5V|I8~*L20vpJMVz}UDa=@I1=!7S%xtO2tl2SzR)gRWs(4Y4XHotgS^(@7e9p+)bT-)nV^N59qM- zaOdGRw;{z?zQ*AT+=!&8DbYzRbHc?@f_Tp9a_&}_5Xqw>ZN!bV&z*SF%i`VwC?mfG z+!F9R#*Lr=1LvG|<9#kbO5IH24#Q0P@dt%d5c#qxfGK4j#`}O%e;9OlJOY>%`dB+6 zH!9O(pq)v!N}kP3NwHdg*5y?$0;i0i$&3zxcGGb!q5v~GvS_P%pO1jQGBo1V5G~0D zMR(q{O3E}yMaHKQDlq)O7oJaCNO))ZkqRf>>(ShCxOTWd$L@nqyr{uo>$gEY^ID{9 zgLR}V?JPJk?q(Bz`%dS-5SZ}FXp`aqag`p%^YPo#m?-Q6sbCgO+_iGX?a6Y}XNcc6 z@J=U-Yho6Q5+qz84UyH0y{lXtiLP?*)Lq}WwiYvI<{#c5h&b$#O69Z@k>Yxi@uPT# zZUHJ3j-nf@@PE|a;9k%GS!QjbK-|G-qHC_H12Z(oig)XOQYor*Ms@4WIa?_>C{NLMi7!orX3kuyU`!++YIAI&P|k*c-Z7*?vG}6w)K2Tn zC>(y1;{pz&8o<#W6)ltIi$sNppUe&dk)H~Ywjr%VE@`yo6t!x3f37hN1 zJC^#~Hae>fED2RH((k0MrnAMx$K_Glfsh65Row`xhw2R8W4*Ru$x}f~!DD)@Q9x6< zj%)T^XP4<`7;k}qRY(L>4Qy=Laa)hLHh_ z5Qur4gVv5I&1|0dKsa$~g&}I!!vY(RX3*%42Q5xHSfNJK8#YjxYfOM{R$XrdQo(Q{ z=GpJ7jbU(O$^nvN-v~3XPwsPm5-&uF6e5eMNiUkfp>b5-!^pnon(4T%wXuAUaO$>!gK=z z;TY{ubn;6W}`0*Dq2w~FwK zFeX=Bu3-}y(QG|F*x23G5sQyu0&XSKUK3Sp$VH1SijqUsB>Hd#^y4chy0Nc+o-$r- z6BF*xdbQ!uis6(4Bt}4-p}lrbm@o(Nghpo~Lpn$@s1Ygz6y<0V*lY?qgrSV#kS+NA zvkF!L{J2j@^4>gR({!{Yz4ob|(tL&Nnv|FoK^iJJaYWer@PD9rPe#o!h)(?W#UU%v zzSt)j2xN~iIQ2^yU0aMe9`<{G$2RP~Dt**}=?a%)sT{4%mn(HrjyfsbD7UFHIC#Cq zQIB-dC=Jq8i}F=j=x(EhPTeBs@l?LM2;KKimTRBguivCVRR^S$|#WqkGC zC}f{G_(q`#I)f0XInxq#7edXT4BBvwSTlSaauOKXX@Vk-&&I2L_FnyerWmbt8;3<4;^P&ukLk{*CSK>AEg7w<8(0ZcXs{E?7pR9)r_T%<8qG1@ zmarY06e{Fx)KrtUf$BX<6n6pm=V<}!J?|*GX+1??({gw5O8w?qfw+_c6fWIZx0a{# z5{@R$&b+N=$)a?vFpevKqu{(E?%68HccD7>eyS2-S9+d+Xxd8vh`bC*0nUb2I$T?! z@AU}ji#fH^$kb^!Y-}XRSsrn|YXub<9DW;;fHhyQh!^CngR}%_o5iTdbblWnJlrkv zni(oUyI5&!)O8IzR_W`Ga#xZ5-5}?FGkg^j%cjxk58dR*xgHgN82!VOrgqdWV`u{; zkL=_FX&XSzb(~7)6Hb@1la$ROk{sl0;JLA0`0aNf=8s%X=(YT!TV_raRx>~C)K5}T zqM@q}Q_5zk@IhMUN=tG6U1!_V7UT>d^1XT4n>Y(6s-+C%OncdxjamHgGF#PTi;!%a z0AFCQw4-m2-)xV6hTPuHMjZG@E4P_np5ep{%%m}4;wH6)R19W~rBuFHu4Qu#Db9u< zktp@0C53HzdOv!60o9nEqeH()z13NW18BAT_@ zn()we8N@ArtRJOn=};G4B_1kQ8W3KHmzB%>iDOBtq}c>kXI-gls>R2mEEiv zd5IB`*OaDF#fU5Z^x3YLmY0amm>I0et3g%STOC5|u95f=?E(;#mZ=K=o^qDaw{E*3 zuUgb*t(Tn4b48q;vLzUit15BChZ&8)Rby$vrhH15;Df*CsjnJ7wn?Yo68lR2*{q2MO#vaCz8oC7x+!;rO z)#}al!gKg9+7xgpspO^sfY0+Np(+i$iJy{*PK_YvHc&G;0(eLh43eXD&N;IcH;E^P zmXjcVV`S7}=*Ti75Zv;s@E8{gt>!%2q0LSa#9hVn|nYA%orVfBSUkDv$ zZ^7Qn-tg5gj8g-=l9`zLyeS6alVD-WE=xlj)8Sk^nxUd*nqrJC6Uin;7qjbXG3yEz$;_Mbevq}!0)27 zZ8MZ=sI8c)PQI0WYV1{vXUmva3{9Og<;;1^ibLWVx|Jdv7<#n*60;?K*DdFY6}HFi zgkE&QtD%!C9AcpvOKZZc1en#P^f2pu-ubj{;u zRDgm<^~X^LTvp*w%Aj0H@7d0|*_1(@_G})!;>qAg)7d!1Ly{0Q*Bqm-qso#`V0e>C zYbZfk8c7`=jF%ATzxR_FBeb?n3JitO>` zuQ{FI9P>`0p>sqOUPS+A$!x#RT zAz@r>cXanuY`NW$kp?)FGu*Hf?PZ5K#wvcXbhW3q%?|)M1iN}cXmNo`k``ARhC*Hv zRxN;;)psQ}#W%GDMSR!%Q#;3lPV+s1y^~o6aya{CxKJ zln=eRPS#uy9WD&vA<%M5&UfHgM#t=o7znV=W@1o0lG!pO>%e$2Bp|%+VtQRgd?u|Q zH^)ayO?{|a6=sxE9ln%*ch=G(O{4OcQBGv1R7~*964LBTmJ)A_l6v;Y)J?TfTCs@{ zg_BoC*(3m|C@S9=CDXT>P$m7+9J#n^Ts5u>&DP;)3WIKd(GM2yrqyx_W_jiMZZ&;X zXOtFR9{l2BDmUHi*vzVx_NrosZInu`tub=1{KEv0dcO??wZF}ONrS9|(?AGP;5^#g zGB!f$R^s$n6fHY7)J3oh5~EeV)nrHv1$eLCdFLG#>!167J^^k5xyqewk!%y=t?WRT zl5^l(*UolhYkPkaWjF3Mfbb=D1RLPYdlDWEsY0PpK+7JGQ8W1m_{Lq1=jTgyGaFv) z=)| zz1Z8jINU9*sFopygh z9E}SY&BM(S3j%fH3UjSyRJzE9P8I;t^UvtEB%&ZU4z?dY+1)tU<~txWmisA1c?CW>blVW-6GkLOm7L3mq+pVQ1w?5jt_vr5NC*CKI8V@#4 z!~M`3+!?CAyE!SPlU&f_xE)eDBIn6&DkU}Dm(SFvlK9vaLzlFAiG6%kcCJ4E_{s6; z&gO&V~8VKIQy>#nfhKPKVpGt=+~pCjM^h>d}&O zA+TVB06N>zXn1KBSETKSzD&al;?T9*D~llbY($RdH2b{~qXArJaBXD~_2)zj;P_E$F5vI2er8v-`xn>X8u0>D)TwE}R8?(zkBsO?npt zElURD$|!Pp_+aBf@BHEN#_%2pb$1`OpFdxJe7^9>tUzMU0TGMGvFVK{PTkNBl_~n1 z1e-he?&VM;l`uTJ*WY@y)E=H~F0~#uKRQ0%ztjFWoOOCgFCwqw^P7pR)t;f-TztQk zxAKV-wsp-jFRB&ZOOS`#JKj#T{d~XKxp(_}@9&KswOad)z0vmf&K|X+{`Sbt8|3nT zj4=G@@z%!TN*3s57|N?0;B0f?C?S5PhtpvG*`t+DclNjA5B+#$Yx&XkY3HE5@UnIM z{)@ZIk3N6@`z)_b<8XhjgTYsaez>;q)`4`#4x>q9n-W3~M#slvNjO%uJQydK;=(EH zqEi!EM-?zub=>b!$m$?AqTZAJ6vL{2H=sY?JF9%KBP>UA~k_0Rnl=7J=+_B%o=y*QQR*tFad&ePP8Ko93bU+!7DMg83SAffZcs_#v zx_et{6+aTZgejzZ;<38spdh5U69{!FV|sif?P z6)h@_83;%awQXThDt8~Vjl~A1NygXJ3bObVF~h9845@VEENCO5BOZ`{l_@Fk#h(;9 zNtS0f39wQqged4Rbl+KE=8$$zW#-aM2-*FYol5)Fl#U1R^P zvgm}m(m-5i1O}0!$e0n{$^y9>41-hEokw(@Qa6C{fRC>@9B;EL3^g0!~6PrG$gGUAK-i3g}ji&GXD z*@5L)Xe47eL(7SPMxQx3J5~OT@oS3jsEbWvoNV=&OSh%+U34s6<2Gs>1=Cdk&3h4E zxHKZzl`VhG3}UB4!Z@ICROG57U#62^BIMK(;&`!zTifq{ccsh|Inhb~EL-X!O+7`N zury?fK^d!NE}C&1v+2>|nO|LHlgl*`yxmm(`yvv-qByw+Vdcc9NDtHw@mvKAM?il4 zEIh%Yd1cQnlts{$nHeoPnk(^H`piqFsFfFkI-#+Nz?1M)W)34x0ktGX-)iC_WtwK> zA4+hbB{NcgCMCHfqM{x{zY1D?VBBggsPX3`e>f)bSqpx`d{w2Rk@-RVps3JQYC{8r zdrEFKN#izeQkqm!qz08zMuC$|-+FziHTcBEX7qzMz8F2G9lE3#E< zl1&@FCitm1IE#bdy<&K`ya`B*h2d8muie&1j;tVm&Cv+&mzKg6GqZG>bY4dD<=oq1 z2{y96AMToqam{&13W=fr`6$55W=;!+27HW?%9y^emD zzsbUO?Q9okxWDJIzO2{xuDqEquCLOmdQ@%t7s*{bKWX6wtXc~r*!pOI4(*oadBgLz zD@$>IAvyJRsc7ta#C5!x7n;0e&V8oP5(2>wdZbhmb*9(wiSZn6e%$%gTiRdrm!Eui zdj7O^Hh%c<`0kliVX7$i?=4QJ{NqZz$-TVNbacNHq1j9;BiS8;AhSs($=Z-(@pKD% z4K9r<-s{Ya$o{RvX}Ka&6UU8*^Qwry0;oWLKLx*tu`zCz)>Fz8E6U8R+eL1L5UYG% zU|Rp`q0_YRB5J*qo{45|GxiPI=NKa)fmW4R@0^IU((s&(Lih;kaIHbR8KGq@1*P$` z9@!3`DdO^~gXg~V*`wEc*UNLZMHJ;k>?N?LN*86LiJ90OzU7p}4h`aH(s>qErMoF6Z((6%>+(Juj?aEFT%*$OxgJ!VTks@yP}4ywGK~ z=^-Joyw@3$O_L$f0puPYQu35^Gqqc*IzyVl@>w)SDUO+9(~&0DP1`W(YTZ(Q!a6>Y z{Ovn4A{}+5pq5QCUsMP^+OHBwrpS_W}WY{xh$1wQQ+WzO=mG9so#vc zQ+#ICpW0wQy<#$NZzns~*xtHyei-?~#L8aE>iN<+-kM1ROJrd&0Q@+{*9GT=KR)XZ z+a;^$4hI?gN3pI?3GPQ~*l#NE9r!~S2w?biyyM{J?Obt**8J~Y)ILM845TxV(JJ*) zsdT|cwF;lV)A9ZGd`U=uaZH4Ra#s=jX<(D3ek{f#&|JlanRQq=^rl19xx|oOs9Tu=>4l%;X^EKtgF4bX|Zg?|n21Vhkl{%X)v! z*`nyv9Otn`aaoOAKX;qt#{f?*#$*rSf}u3!3oTTcyGR1#?wnD7uAl$~rM?3jy&FVP zaOw-kO!k@Gpv$JHg9hU*NU`vOHW!{(MP|4{FG_e$9f$oU$P~qr2&6|e6$&X~Fm|@x z5_QPh;p`QFLu1yx-nbZGm|6}lgcJ+lM+c%DlyTm1(CG=FENuLSQ22nN>hmiK*cou>HDOouJ7RJ?xi{5Dml0W+lXy*|MgWFa zz4Rscly~6BV^Lq$n2|0Qrl|yw4mPKBF_P6+MZdOmcY_YnsGfHkpnspi_`I?YNe}mE zu8A4V5uw+AFwFE!BF6}L!Pj(zj6fC+nC3Xt*Hvi}gN#b_!!Z8myaAJXgt54+fx4vsAJu zk|PXYl4V^9I8|Q|e;&{F?zQjPv&&YI(n5r6rDTchOO}weP*kdaXpd7N?P*tOqeNOn zL{h1&DJ@#GpoRW(?~!`y`+UCN%$zxM=FH5Qd+y64Zl)_MYE+vyZ9&o2Eg`wd`vubF zBDNoE-ha$yCQH7_HCfv*B=L=lZ5z6h7=-_!g;4SG>KL&Xn`>Yi+ z&-eNn7i-_|oo6Tb-*-%^*b=GJDjLR4Gu zsY7{ENWjCUWE16ZZK3?JeGN%lf6jWepxW`G`WLp^y~*uGMj3-%gPkq+n^t`1(O!~d z@Mw2yw9{Jy0hguXEuSLABD$wo{I@R3p>7Y`vxD6iD<*t({Bg6rJ^7PayYpX3`!z1o zyBj=K#p%I@RjFqdXzx}y`=;ef+~k;z0U1hWQypLK(4O*r$C~FFM_yNnxvAy|Unv(~ z^uCLKN&(ICC)yX)OIHFP9{XleRt(QF3H3^&FP#G`HQ1^tVG-@t$N24TY>^pC>TgL(o&5SzRz>Kb{=Ek~ z#6>oSDL)nc%4|RM+=KVlt()6*)hq2tRRw$JFJWggM34QPI0?-Xw?ft9h_}KQ7I%8r zUyq(wGW*#L+m+)3+%mn#v3MkHT_3j_Yp#>tYFTtiavs-oww7w#g@l=bhKa8$yAGzB zJe@qR=ejk&Z@7Q;b+P82RL7#~y$5ERX%%fNzBCXqxNy+=!rMtX`S1TL^5u^2VpS%H zEEg3U+EB91gHRkV_fV?5g@0XL&Y=evQ<;Igi(gywMKyg}?_k>45czsj$g9$F|2~QE zux-`T+U;aa1l9yZsO^efv%+e;{e@X2&AghXpK?C@x9GET!o{wlx$Xgtb*XQYir;M6 z!`@iB%q{esURTr$TNfv@w>qJn?<}NP2SnCA*gVm^xOMKaB`Wfh`5T@r%$lEL6cNxh zuYWVkIi%J8)8Zzl|0W$;Q0y`O-Od+IXV&UetHf&0>nr7{((j(Qo6Z!_aL}hyUXhy=7PGvq`OOt*!onY{~eInx$jzB_#F<%ki1Qo*$U{Rl$W&L7GbhC_xN7na6GlWW3 z@}yYF$QRt`cpS=?ziG2a@-82N6Vnb?B~;djrtUj>zCovEzkIQwv6j%L{l=u${jrys!-uT%#QviNyXS}|Cth{G`t^Lvt(_5*8<5D`=7|Aat88Y; z>saP_Hm7Qz*!29M|EgX+&7wK^s*~I{*U#fmh{|$`kl7#S+OYppnH`@%W{1zwkm^0WR(pR=UZB5+dhH-oWWxKBY*dZa!tMojd8OF@tcsL^=MBjn$ z*!*{18-r}(I{DRgPmxy!U8N40MOOJODq88A|NTIG()`qgiJCE1jTXuKwYJ|$DI6Oo zzVhj8Da#v=sdK05ib_KT`Q z?SOo1xAoo!O)Ps-U1U!Nd^}&gX?aaiV~N$P4mKgD-P+u7WI--}#fq!NTvvp-6n<3p z-u0coX_NRvo=W4P+Y5S^s8%ieAwAp8g#UHHS-;Qwv_i~TS__3+&ON={KS{%J^Q@Cy zVH#X=vtQp;TsJW3Ah$`LQBTGM)!iDm+|Ku&OFH@MlJ^*ehvB_kKT@MUTU>n^^+@lO z%jYn0ukVJnJItorH>SPL9P>4|L@!3nTH4@f_O(}Kwg$=G7MU-iH?l4~yp~@cUbuAZ z^5YKoUfnlTF8eMiUuxoy6t`7p_2y2lJ(R4Qc`>TZ!`(aYevFRp&w$`Z zQIAi(dlpD$zPMC+WG!F`|3@Kfj_K6MM_t+8|)XK zVP!u>5^87rt_2V`}%x z)4x6i_$p^5)C;NzmaK_B@%6CFQuzty8$$ovY7v)s;nd97HGK{<-|@qCKl$s zIZwnXuWGCPeDzr?{8Kj%zEHh2gNy#AgNwW|M2j^2#q6Rw=X)jLdk&h=#|?x@>dxcQ z3#gw_e`5TmtNrFqYmu@aZgK7#pKK~`ZhEgWv(qqxR~reezj~%BtY>`jVI`-;D{j-#qqh;4!N1W3(fR< zW*KgRKNl|g2@yl9uOvhm_$oSCET5rRyDw+2*RP0LmX^l7m}wJaI<^}}3}31=h9cL@)zi%D6V zcFvnieOsMmqKA~H$csFQ?+4R^Sv#A~xf*IZ$oSs$Ob9%^K%w8Jb~W(4C&-x7#Z9S*0J6$8OqsU%}%fe|D4GlrIb2gtUwJ zuPWsISg#+Gk=Ip{^tp|FN9Whz(rsBvZkI%29}-Y8>-dMt#ny5Ieu-FvrjKZCfxeY~QH_sCNZ^pPa7lkP}*jk|E7qAE~N{xnZI@p#!&$?A!dOTQJ}e<>YiV^Syi)!SyAW>#3P+?J}@ zQ}b+lA8c0J@cw?voay{odSBPrzfA2i@yg`$cUkSVRWG}3=bZB=${Jce$r(TIm2b2; zqJD4EU3acBiHmW)c8Pa(97#-$P8AbIQ8r+Qz@zS&D!&N%F{;Bo6RF7|A- z87Hf{wH59wUOCNWq*rc#YvQx#DQ%s7665%GryhJL>wWXi`rRUDezh$h5E#=susN{K zKi_D5vYT`2?Gx7}&pbV;CiRn5^~f@tXq>^E%35(kI`G+}<7PA6Sx*chr~i2wFmW;)`{Hk#+eCkXzy(Wa~HZfcW$CT+otq>i*XmanuQuC-pD$GC8l z&$O%};`qeRZ5M7YInt`|K2@vN`eTx1if3oWH&#E}k5}KyTvV)$%-JN9dg@E4;pbcp zm8XkhUt|sO9+|a?&=8{j;-8mxeA&dg48}1BG{2ZIN_6RqEh+Ak3DBWjV-MM94Icrjyp?>RZ-dXX?^&a6Q@FA`H!bmkUYpXaLE znPA0WOnb>-h;t~q^MJ8k_<2FD8|tN~F!oCajcBKu2V zK>vwoYLGI@xC92M$Z;W~8C=q+>=NO~Z7e^G)GrhE+#$NdDC08l@(qVk?`6W4dyF}a zl#pi$Va`2a7L8=kg%ZM+DK|H#l<;HTcZXkcXhkWZtxWA;`Z!5T74W^)90o&~V@WGK zkx@Azjao_x5qe`Ozax<=gdB4qmSV{ut1E;JQzj9ELstj~=1>v_?5l(`vvmaqH7Q&K zx;>55K!sOf^t;uV{Ol@W&m6xV1EqCbByuVPhsSThl)^H?h&IuEw|-U)H-oVX96FZ6 z#LL^T=;5tg!j$W&@T0wGeGTU6$idvCYlIV1ERO=Rh@A_ze7FYl2o_M3Kql)T<`k6^ zj!dEukCCnb+lb>Bq*M@g%)O^DXs>`Z_nyVT;yQ3{UBIC1JeMev2_#ifdkMjVo?QnU zDz2i6N|?6f3M@~t5~gjdz?9{cgccp0V$sVAv*F9YP1G3-d5-0MxJ!wSrK6Kx7T*m} z`Q$O4&g=#;hbhyE!N+zkF@!D?8t54%v-AZfi`;}Y$-ToM@g^~wsqu*d(rEA_mmre3 z4Fd#j!GL3Zm^}3s43HecpywwTefky{ZO(^!ZxI2^Gg3&U3YHUf8(eyH3!w>z%OT+n2 zFa19QCTGGs8e!e1448uG!VOr+_dBqVQzn=!Yz$=6YOvjA7N!(hGD%cGQM_$YM>XNY z47bOeg*9O7ulX3j-#R0Z%m>idQv>=k-7s1CF05EC41?swAY&s90bOzzWNIQY`TbpR zuzU>K+5l@_5zXX7?zJ%8jCf4h8_Q&)s}!Xmg{I^rgGCA7U@E&hP-B|*o63XoSHkEG zbs+m?^&e_?9ZbN?#OmzsK?+kTiy^@IVfMa5ZL&4tBaj2C7w#&BrS&!I)hfPmk-GF;-6(ZPC9^(YssdRz}VfBOIh zWYO~du-G{bgetx7YBlN0G(owD5QCw{q5OFfC9nG@#@iY|<>CtzRSrqshXn_eVEyD} zaMz`tVU;s@zxcUAC|!h5;#7I;Dwc1%Pl*4i?2?V3*ZT%CYJ{BMbesA;2Ayq$H1Ds$ zp!^O~2x&b4pIhIfD6)vGWeT7yigNVW z7;9eJyDcp(o7!9Rvgc?gF6>PA~1QHk{slKS$y5x_#N4`IeDpD2nP%K8X_H|G%; zl-Wm7?CGs@eP(>8!jQozyu@HAa(Fk32XVcIZ1-Stv;R7ql#$hAnDme_<|aNS<}))) zF>p2E7DC@Fp^BMTLKTy4200&KEXf;g|4)vqP zql+KULrzHUxI6Wow>ELrri^p8~XW+rXL*wzx0R4(c5cDE+E(z;_#GHbYy;qz zgF$W^#NEeT82oAj<<|=^2y6$jw8I$Gv;!ycI0l9t0DMkikliutoYjhM_KlEPOTp)y zr^m#zSoC`bLHtQC?M_(rqDwR@=MsEJt#2nWi+QZ%H-SLaov?7jGCX+fbMQ;(O$x}M z^6T89)LPBC29QM;MC+U?ZsD9R5Ld6o5-HW-Ih!i*#@-JQJegfE8M_|yu62Ri)EY5J zuICm;hA&{~j%G}G`;ePNh@$AUU`p=`7!cBqL0JoE_I?TMJ6)Kf+{ry$_+Pz*X|i8o zvV1q8ha*vifyCh3FO8uza+byJH&}G~E1VTnFw)J<*=|rY?;Ym8>;`{7`GCQP9+=+k z6-;0A8B^LnLY`csDE9^^iZz{zZ`F=T&W2uP2jA%Jup6SJWXb5rzpE%ct^I45_B9vU z`Uz5X+sc?Pu3Ob?fA;4gq8Z-J_trw%@ zWsv+^LikU9IK71#*T`d5yCe^sHE&@h(BIL*&)*W-IQ=mKoc%+|&f zv3Fq7PJIj#DNr>5gJK)qg6|{Da%vu?te6W1pQ0!x3n+># z66hu7GCe&o&~@VxLVU`gr?40FZ1=+CmR?v#Unm9Sk@Y9of#L`X1T$TtsNZ9d#Am2e zO-m^tgO+`UjJ=V7{JsL`ImHo9#=!0i_~7m;3{HO`#?c`Xu8?4H2V&A4j%&`2yJ#&X zDlZfr758_H(EZP>uV7(g1|<;4oVFS3?EDHYir9*b`UrofL^ef~K_~m5G*GSmLLH0D zDHaUIo^PWQAUU5F6%C3EiU}P#)&JDw$D_7Hs12)beGHC=T^mmCC(lO789t}wa$3Oc zulvF6DcyLWLkAB(vL67-s&|-jXaM|b{SgEHZvgU{sDhi6MiD=G2=v7K_au4WVBuF- zn0N0R;lljPkHOUM;A<}egM#mHa4Lz80A57?Andt(QN<59H)DT*qnhO~xA_OeQkMb- z(|-ckq=LbsF)RUe;wPB7Q4LeP6j^kf4zGC1AQ*E}2lJK;!u)#-FsL7dC`g=u!K5LW z&cg(Q{2^$Io||I8_luavtTn?R&zMD^mA_!RlhZLJ#gxTHuFZr-Ha{uHSYoJ$ z5_Isylralf!=30dCJ4%c+o-KL&Lr)a&jTnRgM_)sIm{O!7%bx^ZJ5uaC@_-_w(ROS zj~s|IC_xuI7&(uP30lkf1V@Ru`D69jE5wcOP8ZFEZ`ULkk-r($u!7ekvd9L zZ!2mO5#|BMTMZmrnP{5a&eF776`C%Kk7hxcL3^rOw0LDx$MrYVCX0ZTi&zw|>L9GBNa4sJP zmsx^nx**8zuf!C^tFT@0aD$8gzU=-11g=kmf}+9UBa2(Kyo_H=OlVL{P(o;6P}DzH zDX2ye7HL|8RsRwsZJAni7@WKgn-s-{nGZBjln`ch6XwjRhP;5%Ih+^#b)%eqv>D6k z*MX&UGSl5;9RXAAYsEY!Njfl9J26;Hf^);V&>52SVRm&>zh#lG5UEGk%qOJIuJdrd zrNQ~e+2vICP@*zuix5QD$a6`V5X{rmhgqM5Ac~{EV=(j{QX*#!q{N1SQ8ugaAZJC0 z`cng7bCocxdW9gS2>ycA8j1iVNE%Z%h=9(1c?^0)z-L#KF>n+Gj-M_CWY7mCUS4!j z6bAAcU`qB_UJ=wE1@qg8fsLn(FnOv5uONODJWi2sm|$|77{tu7$r#v(gNxt*r8O6d z181o@1|kyR$vDRmz=M(`zzTh5Olg%MXEXOLz`($c7cN>P!K9NOm}2GxCS9T^I~QS! zm=uhT3cz5{jh7FtkQ(kZt_OHKwnBpw3A@3WLA%4T{39vIAgU9`R~FK+ocgHYnWVwa z!|@m>gn`~dX_&TfC8j9F@)Af$1}Nd_n6g*~l48?(3~FVlc*(?IS1KpT$Igpu_kIDDsz?q--Vi1-MGSEg0 zhj#cF5S)7m^9sg5UUC;=kd%if9DY(Vl?OrjW0)5q4=#Us5`%m4qz%_5G*=Pom5~By zFes-OvS^nA%)8|V2K<*{V}uo9MO&&UiZ3(iE*@{FMDn0}im>}X9*j`znQqM()YXD3 z_A0@^z79-T@(@&oCBicGl))&+F0@Y-qVdLKUMZ9aNlQOgCHPoJ_CYN?@lVB0>!#&} z{Sty=em5e+8!Ar^{SiFRwjP2&6@q~CuAufEJ(TqK`+K0#SW+4Jsemb;da)_lDzKW` zK@9pR(8YuHsezGM{k;6hN0r)G0g57vgnxpc;kISi&poQ3=K>q^e1;%zbjOnBTzk=8 zHSq6jZay}W()?YRE{+A^T1hP2GZuVrDKiWNLC{BS*cokat{sqphjur(3gtX!NJUCs z>re081Jf|mG$^VJQdS4kS>rHRMS--57z}Fg@uAo1VA*!GMFT9e(tucA0KKXP8Nii+ z$~A!|tO+C3y-NN+_L&$^?H;+8Su(iNE zp-8OKTniHUW(?{DA``I8$G3;0wK(^-!YNL2+pO2Ll}H~#>bDMjbO|!CQ>m0 zuocLu#EMXJI9w_ka|6)ffh~$`&VUP^2Vv;d}eYM2IfIvCdlBd z?w@ni?=0NLD8OcOc5t6JWBEnX$iMEXvZjIFAKPeFP6R(cb=Lv+4mns>c{-F2<6I1; z#DOtc(;<$fX275)`!IR-3{r`a%D=NF2UjR{_ zsyNzQ^)q-3+kDtux@=4_hneL{F>8rASZ7s+!98;b4C*c9ThF?kJy6Z1{!!U+6N_dZ z;TQOQjY&tEzXfO=dk=H7Eg+I@9%Ar~0twGBSTqynTh)odwV5Qo(BE;qU#|rY>0p?X z^N`kfL5m8-`j0#ejMTs8YJSf8=l&Y&9jb=yq}!{DmSEMo9!zd;1m}OTBxfWxh zQYFKjdHE}*lv_cSq+IZ5V~kc7oH?b^&^vIHcH^H|RBsk3MrS)-|16kE0U854C|5bN z;CK|^$6#m{#C0+>0TjpA8kS7yFUsB=A`VO53v+Nbr+p$=)aMhw;BObx8`p0QQ}{_> zuC5JaKp8X$l-8{_FvURy4ETOQ>d3%f}AvV!Bh5AZCIm^;-^=O%Y%t zJ$v97`A`%YwB8;hv7ytLfDm$@3kKQcW6IgN;LE-P z7;IT9z>CH>1LfS25ek7aoMFJ~lbGU@DIkpBlY4Fw;LO5u-wX00de$x!EgX6`7h~R4w?BB&U(&$ zVYg#>Ti3t$CCL?xY3;_WQ?76{PJ4@iq#GEdEA7D5@| z465{>Sl;7_0Lf7TB-~-1$|1~6dIrg&sSf+Uj3Q@qqh2p?(Fu1Fzl>^9GCmyy!8Hq> znm8N1L%dkjt4n}>*G9#cUkO~PTY7+^00MIpJzxXNMKLh^0QvXIW4OCoT(Yq9BAEU2 zpMvcoNz0SL|F%|93qiTBEY_FYCqSUn3#olpz!aVDuv0RgKxx*%lo(G4UUyv#o_fL- zFVe?gh8JniH6NYvfl3r9BFILkys`EavN)u*P?ili*aVX=SS zJ+GR9<@4kPX?Kh?gFhF6#lcpXYv>IbF=UIuc5gV;bRB7sqa!Ga1bo1N24~C-@PP<8 z;fg`E&u|gRyjvbp0tVzm1IKyqxY7ez_`y;PeTVNIp@_)SEn122!h1e2rW=|9&SPS; zH$6t!KlIPT&xqmPzF@d@0M?pjCdiL+eTTPh`-W$Wj)2CKP|7$pK3I(9g)9W=vz^jL zR~>af(AKzw;`%dR#9*m1Kj>Mglg#W|FqagxOKzZ)^Q@SfNQ;hoI-}P{9WswnUsagH zfuSrm`qVF6PP>jw82`IIk6f2I`GYOf(y(h+`;+*iL8gkPUh7bzf(P6t8tx>$mNNHB1^D=~-- z9_|wTR`XabfazyLVsjRbm$$L#gJ76>q)`gZAGOpRD4Wz=oAL$Wx*`N3*RBCm_J+WO zo=q5VFNOl3`3yNPhKI`HHtM$wy0;k8Aoe*15$6O2kXa}w@Oq6Y*`Z*5!AA`GLqXex zehg0E23fih&j4fWfQ?$keK_7>F!^>#0)_z?RS&q0D2>(-{FgC~XNWa5X%J zQL5+x-Amw^We}dlMku~qYyspQ3F}sd=dKa*mB``J`|Vj@B30HWLVe^cy>h01$*r!y}sbv^g#6Zw|PR8I+4D8js)fn)_ z!fThZO&Em4LXDjdPhFJv>tf+Kx*bu#k6D;c6LS{BH38i!+=+v^4(`XIgK@)IB%5Wi zKLBdhj(06 zvqk9lZ^&~Q%&?&alQ%CL-sysCPeb~lEE_-@!@1M89awbFal9uZbwYVLD9Y}_T$kmr z4JxlNxU?L~)tnv-)RTbI`jG-Y%#1$7l>#fPEobxN?3PIeEk55c*&!Kr>E2Ha&Lu;7 zP*LbJC4Z$Uxbg8nu8-zM9jl-+$)vzl%7|gJQ$QtyAG1z{javz4Ikn==E}w_^iCY|dk3w=tzx1}Xl64TalX4V1(pI7Q^AVv)TpLKq!Og&j_wi7CI> z1c5}-fU?#aQ^L|90q)MGfE=nzgQZ_|#9*2** zDqMRP(L;o(&n^F6)5y`dZ8i8u?kFW8jc%@n`q^{}gAa)Wz00ad#1$&3+ZqtucmeY= z){qX|MWqDtT?enR>(U7_C!I9s_PR<_)Y0N}QdNa2^dtYR0~#?Mj??o~`S56w3__eL z7nDi#Q{qrMDaRdtbC{j7iI76}YeBp9?O{^kTGF1|q4oFpb)+k|WXCXCvkuNN={Klh U9jPY-D`Osiz+m{ih3Ogp1H;T}cK`qY delta 198697 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�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

)X$>(%Kcnorsz^aijpbE7Gp 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 bnDL?t`+k$E#KukJCN?~V@5)?-$q4@gg(}NU diff --git a/youtube-dl.1 b/youtube-dl.1 index e09ef88..5b15884 100644 --- a/youtube-dl.1 +++ b/youtube-dl.1 @@ -164,7 +164,7 @@ redistribute it or use it however you like. \-\-no\-progress\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Do\ not\ print\ progress\ bar \-\-console\-title\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Display\ progress\ in\ console\ titlebar \-v,\ \-\-verbose\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Print\ various\ debugging\ information -\-\-dump\-pages\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Print\ downloaded\ pages\ to\ debug\ problems\ (very\ verbose) +\-\-dump\-pages\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Print\ downloaded\ pages\ encoded\ using\ base64\ to\ debug\ problems\ (very\ verbose) \-\-write\-pages\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Write\ downloaded\ intermediary\ pages\ to\ files\ in\ the\ current\ directory\ to\ debug\ problems \-\-print\-traffic\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Display\ sent\ and\ read\ HTTP\ traffic \-C,\ \-\-call\-home\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Contact\ the\ youtube\-dl\ server\ for\ debugging @@ -236,7 +236,7 @@ redistribute it or use it however you like. \-\-embed\-thumbnail\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Embed\ thumbnail\ in\ the\ audio\ as\ cover\ art \-\-add\-metadata\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Write\ metadata\ to\ the\ video\ file \-\-metadata\-from\-title\ FORMAT\ \ \ \ \ Parse\ additional\ metadata\ like\ song\ title\ /\ artist\ from\ the\ video\ title.\ The\ format\ syntax\ is\ the\ same\ as\ \-\-output,\ the\ parsed -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ parameters\ replace\ existing\ values.\ Additional\ templates:\ %(album),\ %(artist).\ Example:\ \-\-metadata\-from\-title\ "%(artist)s\ \- +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ parameters\ replace\ existing\ values.\ Additional\ templates:\ %(album)s,\ %(artist)s.\ Example:\ \-\-metadata\-from\-title\ "%(artist)s\ \- \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ %(title)s"\ matches\ a\ title\ like\ "Coldplay\ \-\ Paradise" \-\-xattrs\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Write\ metadata\ to\ the\ video\ file\[aq]s\ xattrs\ (using\ dublin\ core\ and\ xdg\ standards) \-\-fixup\ POLICY\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Automatically\ correct\ known\ faults\ of\ the\ file.\ One\ of\ never\ (do\ nothing),\ warn\ (only\ emit\ a\ warning),\ detect_or_warn(the\ default; diff --git a/youtube-dl.fish b/youtube-dl.fish index 0eaa6a0..82f424b 100644 --- a/youtube-dl.fish +++ b/youtube-dl.fish @@ -89,7 +89,7 @@ complete --command youtube-dl --long-option newline --description 'Output progre complete --command youtube-dl --long-option no-progress --description 'Do not print progress bar' complete --command youtube-dl --long-option console-title --description 'Display progress in console titlebar' complete --command youtube-dl --long-option verbose --short-option v --description 'Print various debugging information' -complete --command youtube-dl --long-option dump-pages --description 'Print downloaded pages to debug problems (very verbose)' +complete --command youtube-dl --long-option dump-pages --description 'Print downloaded pages encoded using base64 to debug problems (very verbose)' complete --command youtube-dl --long-option write-pages --description 'Write downloaded intermediary pages to files in the current directory to debug problems' complete --command youtube-dl --long-option youtube-print-sig-code complete --command youtube-dl --long-option print-traffic --description 'Display sent and read HTTP traffic' @@ -130,7 +130,7 @@ complete --command youtube-dl --long-option no-post-overwrites --description 'Do complete --command youtube-dl --long-option embed-subs --description 'Embed subtitles in the video (only for mkv and mp4 videos)' complete --command youtube-dl --long-option embed-thumbnail --description 'Embed thumbnail in the audio as cover art' complete --command youtube-dl --long-option add-metadata --description 'Write metadata to the video file' -complete --command youtube-dl --long-option metadata-from-title --description 'Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output, the parsed parameters replace existing values. Additional templates: %(album), %(artist). Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like "Coldplay - Paradise"' +complete --command youtube-dl --long-option metadata-from-title --description 'Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output, the parsed parameters replace existing values. Additional templates: %(album)s, %(artist)s. Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like "Coldplay - Paradise"' complete --command youtube-dl --long-option xattrs --description 'Write metadata to the video file'"'"'s xattrs (using dublin core and xdg standards)' complete --command youtube-dl --long-option fixup --description 'Automatically correct known faults of the file. One of never (do nothing), warn (only emit a warning), detect_or_warn(the default; fix file if we can, warn otherwise)' complete --command youtube-dl --long-option prefer-avconv --description 'Prefer avconv over ffmpeg for running the postprocessors (default)' diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 691f3e0..aa6ec9d 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -49,6 +49,7 @@ from .utils import ( ExtractorError, format_bytes, formatSeconds, + HEADRequest, locked_file, make_HTTPS_handler, MaxDownloadsReached, @@ -759,7 +760,9 @@ class YoutubeDL(object): if isinstance(ie_entries, list): n_all_entries = len(ie_entries) if playlistitems: - entries = [ie_entries[i - 1] for i in playlistitems] + entries = [ + ie_entries[i - 1] for i in playlistitems + if -n_all_entries <= i - 1 < n_all_entries] else: entries = ie_entries[playliststart:playlistend] n_entries = len(entries) @@ -921,8 +924,9 @@ class YoutubeDL(object): if f.get('vcodec') != 'none' and f.get('acodec') != 'none'] if audiovideo_formats: return audiovideo_formats[format_idx] - # for audio only urls, select the best/worst audio format - elif all(f.get('acodec') != 'none' for f in available_formats): + # for audio only (soundcloud) or video only (imgur) urls, select the best/worst audio format + elif (all(f.get('acodec') != 'none' for f in available_formats) or + all(f.get('vcodec') != 'none' for f in available_formats)): return available_formats[format_idx] elif format_spec == 'bestaudio': audio_formats = [ @@ -1045,6 +1049,8 @@ class YoutubeDL(object): if not formats: raise ExtractorError('No video formats found!') + formats_dict = {} + # We check that all the formats have the format and format_id fields for i, format in enumerate(formats): if 'url' not in format: @@ -1052,6 +1058,18 @@ class YoutubeDL(object): if format.get('format_id') is None: format['format_id'] = compat_str(i) + format_id = format['format_id'] + if format_id not in formats_dict: + formats_dict[format_id] = [] + formats_dict[format_id].append(format) + + # Make sure all formats have unique format_id + for format_id, ambiguous_formats in formats_dict.items(): + if len(ambiguous_formats) > 1: + for i, format in enumerate(ambiguous_formats): + format['format_id'] = '%s-%d' % (format_id, i) + + for i, format in enumerate(formats): if format.get('format') is None: format['format'] = '{id} - {res}{note}'.format( id=format['format_id'], @@ -1366,7 +1384,7 @@ class YoutubeDL(object): postprocessors = [] self.report_warning('You have requested multiple ' 'formats but ffmpeg or avconv are not installed.' - ' The formats won\'t be merged') + ' The formats won\'t be merged.') else: postprocessors = [merger] @@ -1393,8 +1411,8 @@ class YoutubeDL(object): requested_formats = info_dict['requested_formats'] if self.params.get('merge_output_format') is None and not compatible_formats(requested_formats): info_dict['ext'] = 'mkv' - self.report_warning('You have requested formats incompatible for merge. ' - 'The formats will be merged into mkv') + self.report_warning( + 'Requested formats are incompatible for merge and will be merged into mkv.') # Ensure filename always has a correct extension for successful merge filename = '%s.%s' % (filename_wo_ext, info_dict['ext']) if os.path.exists(encodeFilename(filename)): @@ -1525,6 +1543,7 @@ class YoutubeDL(object): pps_chain.extend(ie_info['__postprocessors']) pps_chain.extend(self._pps) for pp in pps_chain: + files_to_delete = [] try: files_to_delete, info = pp.run(info) except PostProcessingError as e: @@ -1703,7 +1722,8 @@ class YoutubeDL(object): if req_is_string: req = url_escaped else: - req = compat_urllib_request.Request( + req_type = HEADRequest if req.get_method() == 'HEAD' else compat_urllib_request.Request + req = req_type( url_escaped, data=req.data, headers=req.headers, origin_req_host=req.origin_req_host, unverifiable=req.unverifiable) diff --git a/youtube_dl/aes.py b/youtube_dl/aes.py index 07224d5..7817adc 100644 --- a/youtube_dl/aes.py +++ b/youtube_dl/aes.py @@ -152,7 +152,7 @@ def aes_decrypt_text(data, password, key_size_bytes): """ NONCE_LENGTH_BYTES = 8 - data = bytes_to_intlist(base64.b64decode(data)) + data = bytes_to_intlist(base64.b64decode(data.encode('utf-8'))) password = bytes_to_intlist(password.encode('utf-8')) key = password[:key_size_bytes] + [0] * (key_size_bytes - len(password)) diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 8ec0c10..67eb960 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -141,6 +141,7 @@ from .engadget import EngadgetIE from .eporner import EpornerIE from .eroprofile import EroProfileIE from .escapist import EscapistIE +from .espn import ESPNIE from .everyonesmixtape import EveryonesMixtapeIE from .exfm import ExfmIE from .expotv import ExpoTVIE @@ -148,7 +149,6 @@ from .extremetube import ExtremeTubeIE from .facebook import FacebookIE from .faz import FazIE from .fc2 import FC2IE -from .firedrive import FiredriveIE from .firstpost import FirstpostIE from .firsttv import FirstTVIE from .fivemin import FiveMinIE @@ -243,6 +243,7 @@ from .kaltura import KalturaIE from .kanalplay import KanalPlayIE from .kankan import KankanIE from .karaoketv import KaraoketvIE +from .karrierevideos import KarriereVideosIE from .keezmovies import KeezMoviesIE from .khanacademy import KhanAcademyIE from .kickstarter import KickStarterIE @@ -337,8 +338,7 @@ from .newstube import NewstubeIE from .nextmedia import ( NextMediaIE, NextMediaActionNewsIE, - AppleDailyRealtimeNewsIE, - AppleDailyAnimationNewsIE + AppleDailyIE, ) from .nfb import NFBIE from .nfl import NFLIE @@ -352,8 +352,10 @@ from .ninegag import NineGagIE from .noco import NocoIE from .normalboots import NormalbootsIE from .nosvideo import NosVideoIE +from .nova import NovaIE from .novamov import NovaMovIE from .nowness import NownessIE +from .nowtv import NowTVIE from .nowvideo import NowVideoIE from .npo import ( NPOIE, @@ -376,7 +378,10 @@ from .nytimes import ( from .nuvid import NuvidIE from .odnoklassniki import OdnoklassnikiIE from .oktoberfesttv import OktoberfestTVIE -from .ooyala import OoyalaIE +from .ooyala import ( + OoyalaIE, + OoyalaExternalIE, +) from .openfilm import OpenFilmIE from .orf import ( ORFTVthekIE, @@ -397,6 +402,7 @@ from .playfm import PlayFMIE from .playvid import PlayvidIE from .playwire import PlaywireIE from .podomatic import PodomaticIE +from .porn91 import Porn91IE from .pornhd import PornHdIE from .pornhub import ( PornHubIE, @@ -434,7 +440,6 @@ from .roxwel import RoxwelIE from .rtbf import RTBFIE from .rte import RteIE from .rtlnl import RtlNlIE -from .rtlnow import RTLnowIE from .rtl2 import RTL2IE from .rtp import RTPIE from .rts import RTSIE @@ -476,8 +481,11 @@ from .smotri import ( SmotriBroadcastIE, ) from .snotr import SnotrIE -from .sockshare import SockshareIE from .sohu import SohuIE +from .soompi import ( + SoompiIE, + SoompiShowIE, +) from .soundcloud import ( SoundcloudIE, SoundcloudSetIE, @@ -502,7 +510,10 @@ from .spiegel import SpiegelIE, SpiegelArticleIE from .spiegeltv import SpiegeltvIE from .spike import SpikeIE from .sport5 import Sport5IE -from .sportbox import SportBoxIE +from .sportbox import ( + SportBoxIE, + SportBoxEmbedIE, +) from .sportdeutschland import SportDeutschlandIE from .srf import SrfIE from .srmediathek import SRMediathekIE @@ -560,11 +571,16 @@ from .traileraddict import TrailerAddictIE from .trilulilu import TriluliluIE from .trutube import TruTubeIE from .tube8 import Tube8IE +from .tubitv import TubiTvIE from .tudou import TudouIE from .tumblr import TumblrIE from .tunein import TuneInIE from .turbo import TurboIE from .tutv import TutvIE +from .tv2 import ( + TV2IE, + TV2ArticleIE, +) from .tv4 import TV4IE from .tvigle import TvigleIE from .tvp import TvpIE, TvpSeriesIE @@ -636,7 +652,10 @@ from .vine import ( VineIE, VineUserIE, ) -from .viki import VikiIE +from .viki import ( + VikiIE, + VikiChannelIE, +) from .vk import ( VKIE, VKUserVideosIE, diff --git a/youtube_dl/extractor/aftonbladet.py b/youtube_dl/extractor/aftonbladet.py index a117502..e0518cf 100644 --- a/youtube_dl/extractor/aftonbladet.py +++ b/youtube_dl/extractor/aftonbladet.py @@ -6,11 +6,11 @@ from ..utils import int_or_none class AftonbladetIE(InfoExtractor): - _VALID_URL = r'http://tv\.aftonbladet\.se/webbtv.+?(?Particle[0-9]+)\.ab(?:$|[?#])' + _VALID_URL = r'http://tv\.aftonbladet\.se/abtv/articles/(?P[0-9]+)' _TEST = { - 'url': 'http://tv.aftonbladet.se/webbtv/nyheter/vetenskap/rymden/article36015.ab', + 'url': 'http://tv.aftonbladet.se/abtv/articles/36015', 'info_dict': { - 'id': 'article36015', + 'id': '36015', 'ext': 'mp4', 'title': 'Vulkanutbrott i rymden - nu släpper NASA bilderna', 'description': 'Jupiters måne mest aktiv av alla himlakroppar', @@ -25,8 +25,9 @@ class AftonbladetIE(InfoExtractor): # find internal video meta data meta_url = 'http://aftonbladet-play.drlib.aptoma.no/video/%s.json' - internal_meta_id = self._html_search_regex( - r'data-aptomaId="([\w\d]+)"', webpage, 'internal_meta_id') + player_config = self._parse_json(self._html_search_regex( + r'data-player-config="([^"]+)"', webpage, 'player config'), video_id) + internal_meta_id = player_config['videoId'] internal_meta_url = meta_url % internal_meta_id internal_meta_json = self._download_json( internal_meta_url, video_id, 'Downloading video meta data') diff --git a/youtube_dl/extractor/arte.py b/youtube_dl/extractor/arte.py index 8273bd6..76de244 100644 --- a/youtube_dl/extractor/arte.py +++ b/youtube_dl/extractor/arte.py @@ -7,7 +7,6 @@ from .common import InfoExtractor from ..utils import ( find_xpath_attr, unified_strdate, - get_element_by_id, get_element_by_attribute, int_or_none, qualities, @@ -195,7 +194,9 @@ class ArteTVFutureIE(ArteTVPlus7IE): def _real_extract(self, url): anchor_id, lang = self._extract_url_info(url) webpage = self._download_webpage(url, anchor_id) - row = get_element_by_id(anchor_id, webpage) + row = self._search_regex( + r'(?s)id="%s"[^>]*>.+?(]*arte_vp_url[^>]*>)' % anchor_id, + webpage, 'row') return self._extract_from_webpage(row, anchor_id, lang) diff --git a/youtube_dl/extractor/bilibili.py b/youtube_dl/extractor/bilibili.py index 7ca835e..2103ed7 100644 --- a/youtube_dl/extractor/bilibili.py +++ b/youtube_dl/extractor/bilibili.py @@ -3,6 +3,8 @@ from __future__ import unicode_literals import re import itertools +import json +import xml.etree.ElementTree as ET from .common import InfoExtractor from ..utils import ( @@ -67,11 +69,19 @@ class BiliBiliIE(InfoExtractor): entries = [] - lq_doc = self._download_xml( + lq_page = self._download_webpage( 'http://interface.bilibili.com/v_cdn_play?appkey=1&cid=%s' % cid, video_id, note='Downloading LQ video info' ) + try: + err_info = json.loads(lq_page) + raise ExtractorError( + 'BiliBili said: ' + err_info['error_text'], expected=True) + except ValueError: + pass + + lq_doc = ET.fromstring(lq_page) lq_durls = lq_doc.findall('./durl') hq_doc = self._download_xml( @@ -80,9 +90,11 @@ class BiliBiliIE(InfoExtractor): note='Downloading HQ video info', fatal=False, ) - hq_durls = hq_doc.findall('./durl') if hq_doc is not False else itertools.repeat(None) - - assert len(lq_durls) == len(hq_durls) + if hq_doc is not False: + hq_durls = hq_doc.findall('./durl') + assert len(lq_durls) == len(hq_durls) + else: + hq_durls = itertools.repeat(None) i = 1 for lq_durl, hq_durl in zip(lq_durls, hq_durls): diff --git a/youtube_dl/extractor/cbsnews.py b/youtube_dl/extractor/cbsnews.py index 7e47960..52e61d8 100644 --- a/youtube_dl/extractor/cbsnews.py +++ b/youtube_dl/extractor/cbsnews.py @@ -32,7 +32,7 @@ class CBSNewsIE(InfoExtractor): 'id': 'fort-hood-shooting-army-downplays-mental-illness-as-cause-of-attack', 'ext': 'flv', 'title': 'Fort Hood shooting: Army downplays mental illness as cause of attack', - 'thumbnail': 'http://cbsnews2.cbsistatic.com/hub/i/r/2014/04/04/0c9fbc66-576b-41ca-8069-02d122060dd2/thumbnail/140x90/6dad7a502f88875ceac38202984b6d58/en-0404-werner-replace-640x360.jpg', + 'thumbnail': 're:^https?://.*\.jpg$', 'duration': 205, }, 'params': { diff --git a/youtube_dl/extractor/ccc.py b/youtube_dl/extractor/ccc.py index 2a5d4be..6924eac 100644 --- a/youtube_dl/extractor/ccc.py +++ b/youtube_dl/extractor/ccc.py @@ -16,7 +16,7 @@ class CCCIE(InfoExtractor): _TEST = { 'url': 'http://media.ccc.de/browse/congress/2013/30C3_-_5443_-_en_-_saal_g_-_201312281830_-_introduction_to_processor_design_-_byterazor.html#video', - 'md5': '205a365d0d57c0b1e43a12c9ffe8f9be', + 'md5': '3a1eda8f3a29515d27f5adb967d7e740', 'info_dict': { 'id': '20131228183', 'ext': 'mp4', @@ -51,7 +51,7 @@ class CCCIE(InfoExtractor): matches = re.finditer(r'''(?xs) <(?:span|div)\s+class='label\s+filetype'>(?P.*?)\s* - [^']+)'>\s* + [^']+)'>\s* (?: .*? [^']+\.torrent)' diff --git a/youtube_dl/extractor/chilloutzone.py b/youtube_dl/extractor/chilloutzone.py index c922f69..0206d96 100644 --- a/youtube_dl/extractor/chilloutzone.py +++ b/youtube_dl/extractor/chilloutzone.py @@ -57,7 +57,7 @@ class ChilloutzoneIE(InfoExtractor): base64_video_info = self._html_search_regex( r'var cozVidData = "(.+?)";', webpage, 'video data') - decoded_video_info = base64.b64decode(base64_video_info).decode("utf-8") + decoded_video_info = base64.b64decode(base64_video_info.encode('utf-8')).decode('utf-8') video_info_dict = json.loads(decoded_video_info) # get video information from dict diff --git a/youtube_dl/extractor/cinemassacre.py b/youtube_dl/extractor/cinemassacre.py index cf0a755..c949a48 100644 --- a/youtube_dl/extractor/cinemassacre.py +++ b/youtube_dl/extractor/cinemassacre.py @@ -60,6 +60,17 @@ class CinemassacreIE(InfoExtractor): 'uploader_id': 'Cinemassacre', 'title': 'AVGN: McKids', } + }, + { + 'url': 'http://cinemassacre.com/2015/05/25/mario-kart-64-nintendo-64-james-mike-mondays/', + 'md5': '1376908e49572389e7b06251a53cdd08', + 'info_dict': { + 'id': 'Cinemassacre-555779690c440', + 'ext': 'mp4', + 'description': 'Let’s Play Mario Kart 64 !! Mario Kart 64 is a classic go-kart racing game released for the Nintendo 64 (N64). Today James & Mike do 4 player Battle Mode with Kyle and Bootsy!', + 'title': 'Mario Kart 64 (Nintendo 64) James & Mike Mondays', + 'upload_date': '20150525', + } } ] @@ -72,7 +83,7 @@ class CinemassacreIE(InfoExtractor): playerdata_url = self._search_regex( [ - r'src="(http://player\.screenwavemedia\.com/play/[a-zA-Z]+\.php\?[^"]*\bid=.+?)"', + r'src="(http://(?:player2\.screenwavemedia\.com|player\.screenwavemedia\.com/play)/[a-zA-Z]+\.php\?[^"]*\bid=.+?)"', r']+src="((?:https?:)?//(?:[^.]+\.)?youtube\.com/.+?)"', ], webpage, 'player data URL', default=None) diff --git a/youtube_dl/extractor/cnn.py b/youtube_dl/extractor/cnn.py index 5efc5f4..3b1bd40 100644 --- a/youtube_dl/extractor/cnn.py +++ b/youtube_dl/extractor/cnn.py @@ -12,7 +12,7 @@ from ..utils import ( class CNNIE(InfoExtractor): _VALID_URL = r'''(?x)https?://(?:(?:edition|www)\.)?cnn\.com/video/(?:data/.+?|\?)/ - (?P.+?/(?P[^/]+?)(?:\.(?:[a-z]{3,5})(?:-ap)?|(?=&)))''' + (?P<path>.+?/(?P<title>[^/]+?)(?:\.(?:[a-z\-]+)|(?=&)))''' _TESTS = [{ 'url': 'http://edition.cnn.com/video/?/video/sports/2013/06/09/nadal-1-on-1.cnn', diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 65bb770..cecf917 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -786,8 +786,8 @@ class InfoExtractor(object): return True except ExtractorError as e: if isinstance(e.cause, compat_HTTPError): - self.report_warning( - '%s URL is invalid, skipping' % item, video_id) + self.to_screen( + '%s: %s URL is invalid, skipping' % (video_id, item)) return False raise diff --git a/youtube_dl/extractor/crunchyroll.py b/youtube_dl/extractor/crunchyroll.py index 1c77df4..41f0c73 100644 --- a/youtube_dl/extractor/crunchyroll.py +++ b/youtube_dl/extractor/crunchyroll.py @@ -76,8 +76,8 @@ class CrunchyrollIE(InfoExtractor): self._login() def _decrypt_subtitles(self, data, iv, id): - data = bytes_to_intlist(data) - iv = bytes_to_intlist(iv) + data = bytes_to_intlist(base64.b64decode(data.encode('utf-8'))) + iv = bytes_to_intlist(base64.b64decode(iv.encode('utf-8'))) id = int(id) def obfuscate_key_aux(count, modulo, start): @@ -179,6 +179,16 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text return output + def _extract_subtitles(self, subtitle): + sub_root = xml.etree.ElementTree.fromstring(subtitle) + return [{ + 'ext': 'srt', + 'data': self._convert_subtitles_to_srt(sub_root), + }, { + 'ext': 'ass', + 'data': self._convert_subtitles_to_ass(sub_root), + }] + def _get_subtitles(self, video_id, webpage): subtitles = {} for sub_id, sub_name in re.findall(r'\?ssid=([0-9]+)" title="([^"]+)', webpage): @@ -190,25 +200,11 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text data = self._search_regex(r'<data>([^<]+)', sub_page, 'subtitle_data', fatal=False) if not id or not iv or not data: continue - id = int(id) - iv = base64.b64decode(iv) - data = base64.b64decode(data) - subtitle = self._decrypt_subtitles(data, iv, id).decode('utf-8') lang_code = self._search_regex(r'lang_code=["\']([^"\']+)', subtitle, 'subtitle_lang_code', fatal=False) if not lang_code: continue - sub_root = xml.etree.ElementTree.fromstring(subtitle) - subtitles[lang_code] = [ - { - 'ext': 'srt', - 'data': self._convert_subtitles_to_srt(sub_root), - }, - { - 'ext': 'ass', - 'data': self._convert_subtitles_to_ass(sub_root), - }, - ] + subtitles[lang_code] = self._extract_subtitles(subtitle) return subtitles def _real_extract(self, url): diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index db10b8d..70aa433 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -225,7 +225,7 @@ class DailymotionPlaylistIE(DailymotionBaseInfoExtractor): class DailymotionUserIE(DailymotionPlaylistIE): IE_NAME = 'dailymotion:user' - _VALID_URL = r'https?://(?:www\.)?dailymotion\.[a-z]{2,3}/(?:old/)?user/(?P<user>[^/]+)' + _VALID_URL = r'https?://(?:www\.)?dailymotion\.[a-z]{2,3}/(?:(?:old/)?user/)?(?P<user>[^/]+)$' _PAGE_TEMPLATE = 'http://www.dailymotion.com/user/%s/%s' _TESTS = [{ 'url': 'https://www.dailymotion.com/user/nqtv', @@ -239,7 +239,8 @@ class DailymotionUserIE(DailymotionPlaylistIE): def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) user = mobj.group('user') - webpage = self._download_webpage(url, user) + webpage = self._download_webpage( + 'https://www.dailymotion.com/user/%s' % user, user) full_user = unescapeHTML(self._html_search_regex( r'<a class="nav-image" title="([^"]+)" href="/%s">' % re.escape(user), webpage, 'user')) diff --git a/youtube_dl/extractor/drtv.py b/youtube_dl/extractor/drtv.py index f25ab31..baa24c6 100644 --- a/youtube_dl/extractor/drtv.py +++ b/youtube_dl/extractor/drtv.py @@ -1,8 +1,11 @@ # coding: utf-8 from __future__ import unicode_literals -from .common import InfoExtractor, ExtractorError -from ..utils import parse_iso8601 +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + parse_iso8601, +) class DRTVIE(InfoExtractor): @@ -60,19 +63,31 @@ class DRTVIE(InfoExtractor): restricted_to_denmark = asset['RestrictedToDenmark'] spoken_subtitles = asset['Target'] == 'SpokenSubtitles' for link in asset['Links']: - target = link['Target'] uri = link['Uri'] + target = link['Target'] format_id = target - preference = -1 if target == 'HDS' else -2 + preference = None if spoken_subtitles: - preference -= 2 + preference = -1 format_id += '-spoken-subtitles' - formats.append({ - 'url': uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43' if target == 'HDS' else uri, - 'format_id': format_id, - 'ext': link['FileFormat'], - 'preference': preference, - }) + if target == 'HDS': + formats.extend(self._extract_f4m_formats( + uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43', + video_id, preference, f4m_id=format_id)) + elif target == 'HLS': + formats.extend(self._extract_m3u8_formats( + uri, video_id, 'mp4', preference=preference, + m3u8_id=format_id)) + else: + bitrate = link.get('Bitrate') + if bitrate: + format_id += '-%s' % bitrate + formats.append({ + 'url': uri, + 'format_id': format_id, + 'tbr': bitrate, + 'ext': link.get('FileFormat'), + }) subtitles_list = asset.get('SubtitlesList') if isinstance(subtitles_list, list): LANGS = { diff --git a/youtube_dl/extractor/empflix.py b/youtube_dl/extractor/empflix.py index 70f8efe..4827022 100644 --- a/youtube_dl/extractor/empflix.py +++ b/youtube_dl/extractor/empflix.py @@ -4,22 +4,28 @@ from .tnaflix import TNAFlixIE class EMPFlixIE(TNAFlixIE): - _VALID_URL = r'^https?://www\.empflix\.com/videos/(?P<display_id>[0-9a-zA-Z-]+)-(?P<id>[0-9]+)\.html' + _VALID_URL = r'https?://(?:www\.)?empflix\.com/videos/(?P<display_id>.+?)-(?P<id>[0-9]+)\.html' _TITLE_REGEX = r'name="title" value="(?P<title>[^"]*)"' _DESCRIPTION_REGEX = r'name="description" value="([^"]*)"' _CONFIG_REGEX = r'flashvars\.config\s*=\s*escape\("([^"]+)"' - _TEST = { - 'url': 'http://www.empflix.com/videos/Amateur-Finger-Fuck-33051.html', - 'md5': 'b1bc15b6412d33902d6e5952035fcabc', - 'info_dict': { - 'id': '33051', - 'display_id': 'Amateur-Finger-Fuck', - 'ext': 'mp4', - 'title': 'Amateur Finger Fuck', - 'description': 'Amateur solo finger fucking.', - 'thumbnail': 're:https?://.*\.jpg$', - 'age_limit': 18, + _TESTS = [ + { + 'url': 'http://www.empflix.com/videos/Amateur-Finger-Fuck-33051.html', + 'md5': 'b1bc15b6412d33902d6e5952035fcabc', + 'info_dict': { + 'id': '33051', + 'display_id': 'Amateur-Finger-Fuck', + 'ext': 'mp4', + 'title': 'Amateur Finger Fuck', + 'description': 'Amateur solo finger fucking.', + 'thumbnail': 're:https?://.*\.jpg$', + 'age_limit': 18, + } + }, + { + 'url': 'http://www.empflix.com/videos/[AROMA][ARMD-718]-Aoi-Yoshino-Sawa-25826.html', + 'only_matching': True, } - } + ] diff --git a/youtube_dl/extractor/espn.py b/youtube_dl/extractor/espn.py new file mode 100644 index 0000000..e6f8f03 --- /dev/null +++ b/youtube_dl/extractor/espn.py @@ -0,0 +1,55 @@ +from __future__ import unicode_literals + +from .common import InfoExtractor + + +class ESPNIE(InfoExtractor): + _VALID_URL = r'https?://espn\.go\.com/(?:[^/]+/)*(?P<id>[^/]+)' + _WORKING = False + _TESTS = [{ + 'url': 'http://espn.go.com/video/clip?id=10365079', + 'info_dict': { + 'id': 'FkYWtmazr6Ed8xmvILvKLWjd4QvYZpzG', + 'ext': 'mp4', + 'title': 'dm_140128_30for30Shorts___JudgingJewellv2', + 'description': '', + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + 'url': 'https://espn.go.com/video/iframe/twitter/?cms=espn&id=10365079', + 'only_matching': True, + }, { + 'url': 'http://espn.go.com/nba/recap?gameId=400793786', + 'only_matching': True, + }, { + 'url': 'http://espn.go.com/blog/golden-state-warriors/post/_/id/593/how-warriors-rapidly-regained-a-winning-edge', + 'only_matching': True, + }, { + 'url': 'http://espn.go.com/sports/endurance/story/_/id/12893522/dzhokhar-tsarnaev-sentenced-role-boston-marathon-bombings', + 'only_matching': True, + }, { + 'url': 'http://espn.go.com/nba/playoffs/2015/story/_/id/12887571/john-wall-washington-wizards-no-swelling-left-hand-wrist-game-5-return', + 'only_matching': True, + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + + webpage = self._download_webpage(url, video_id) + + video_id = self._search_regex( + r'class="video-play-button"[^>]+data-id="(\d+)', + webpage, 'video id') + + player = self._download_webpage( + 'https://espn.go.com/video/iframe/twitter/?id=%s' % video_id, video_id) + + pcode = self._search_regex( + r'["\']pcode=([^"\']+)["\']', player, 'pcode') + + return self.url_result( + 'ooyalaexternal:espn:%s:%s' % (video_id, pcode), + 'OoyalaExternal') diff --git a/youtube_dl/extractor/facebook.py b/youtube_dl/extractor/facebook.py index 937b28f..82dc27b 100644 --- a/youtube_dl/extractor/facebook.py +++ b/youtube_dl/extractor/facebook.py @@ -50,7 +50,10 @@ class FacebookIE(InfoExtractor): 'id': '274175099429670', 'ext': 'mp4', 'title': 'Facebook video #274175099429670', - } + }, + 'expected_warnings': [ + 'title' + ] }, { 'url': 'https://www.facebook.com/video.php?v=10204634152394104', 'only_matching': True, @@ -149,12 +152,12 @@ class FacebookIE(InfoExtractor): raise ExtractorError('Cannot find video formats') video_title = self._html_search_regex( - r'<h2 class="uiHeaderTitle">([^<]*)</h2>', webpage, 'title', - fatal=False) + r'<h2\s+[^>]*class="uiHeaderTitle"[^>]*>([^<]*)</h2>', webpage, 'title', + default=None) if not video_title: video_title = self._html_search_regex( r'(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(.*?)</span>', - webpage, 'alternative title', default=None) + webpage, 'alternative title', fatal=False) video_title = limit_length(video_title, 80) if not video_title: video_title = 'Facebook video #%s' % video_id diff --git a/youtube_dl/extractor/firedrive.py b/youtube_dl/extractor/firedrive.py deleted file mode 100644 index 3191116..0000000 --- a/youtube_dl/extractor/firedrive.py +++ /dev/null @@ -1,80 +0,0 @@ -# coding: utf-8 -from __future__ import unicode_literals - -import re - -from .common import InfoExtractor -from ..compat import ( - compat_urllib_parse, - compat_urllib_request, -) -from ..utils import ( - ExtractorError, -) - - -class FiredriveIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?firedrive\.com/' + \ - '(?:file|embed)/(?P<id>[0-9a-zA-Z]+)' - _FILE_DELETED_REGEX = r'<div class="removed_file_image">' - - _TESTS = [{ - 'url': 'https://www.firedrive.com/file/FEB892FA160EBD01', - 'md5': 'd5d4252f80ebeab4dc2d5ceaed1b7970', - 'info_dict': { - 'id': 'FEB892FA160EBD01', - 'ext': 'flv', - 'title': 'bbb_theora_486kbit.flv', - 'thumbnail': 're:^http://.*\.jpg$', - }, - }] - - def _real_extract(self, url): - video_id = self._match_id(url) - url = 'http://firedrive.com/file/%s' % video_id - webpage = self._download_webpage(url, video_id) - - if re.search(self._FILE_DELETED_REGEX, webpage) is not None: - raise ExtractorError('Video %s does not exist' % video_id, - expected=True) - - fields = dict(re.findall(r'''(?x)<input\s+ - type="hidden"\s+ - name="([^"]+)"\s+ - value="([^"]*)" - ''', webpage)) - - post = compat_urllib_parse.urlencode(fields) - req = compat_urllib_request.Request(url, post) - req.add_header('Content-type', 'application/x-www-form-urlencoded') - - # Apparently, this header is required for confirmation to work. - req.add_header('Host', 'www.firedrive.com') - - webpage = self._download_webpage(req, video_id, - 'Downloading video page') - - title = self._search_regex(r'class="external_title_left">(.+)</div>', - webpage, 'title') - thumbnail = self._search_regex(r'image:\s?"(//[^\"]+)', webpage, - 'thumbnail', fatal=False) - if thumbnail is not None: - thumbnail = 'http:' + thumbnail - - ext = self._search_regex(r'type:\s?\'([^\']+)\',', - webpage, 'extension', fatal=False) - video_url = self._search_regex( - r'file:\s?loadURL\(\'(http[^\']+)\'\),', webpage, 'file url') - - formats = [{ - 'format_id': 'sd', - 'url': video_url, - 'ext': ext, - }] - - return { - 'id': video_id, - 'title': title, - 'thumbnail': thumbnail, - 'formats': formats, - } diff --git a/youtube_dl/extractor/gamespot.py b/youtube_dl/extractor/gamespot.py index 47373e2..2d33fa7 100644 --- a/youtube_dl/extractor/gamespot.py +++ b/youtube_dl/extractor/gamespot.py @@ -14,8 +14,8 @@ from ..utils import ( class GameSpotIE(InfoExtractor): - _VALID_URL = r'(?:http://)?(?:www\.)?gamespot\.com/.*-(?P<id>\d+)/?' - _TEST = { + _VALID_URL = r'http://(?:www\.)?gamespot\.com/.*-(?P<id>\d+)/?' + _TESTS = [{ 'url': 'http://www.gamespot.com/videos/arma-3-community-guide-sitrep-i/2300-6410818/', 'md5': 'b2a30deaa8654fcccd43713a6b6a4825', 'info_dict': { @@ -23,8 +23,16 @@ class GameSpotIE(InfoExtractor): 'ext': 'mp4', 'title': 'Arma 3 - Community Guide: SITREP I', 'description': 'Check out this video where some of the basics of Arma 3 is explained.', - } - } + }, + }, { + 'url': 'http://www.gamespot.com/videos/the-witcher-3-wild-hunt-xbox-one-now-playing/2300-6424837/', + 'info_dict': { + 'id': 'gs-2300-6424837', + 'ext': 'flv', + 'title': 'The Witcher 3: Wild Hunt [Xbox ONE] - Now Playing', + 'description': 'Join us as we take a look at the early hours of The Witcher 3: Wild Hunt and more.', + }, + }] def _real_extract(self, url): page_id = self._match_id(url) @@ -32,25 +40,37 @@ class GameSpotIE(InfoExtractor): data_video_json = self._search_regex( r'data-video=["\'](.*?)["\']', webpage, 'data video') data_video = json.loads(unescapeHTML(data_video_json)) + streams = data_video['videoStreams'] - # Transform the manifest url to a link to the mp4 files - # they are used in mobile devices. - f4m_url = data_video['videoStreams']['f4m_stream'] - f4m_path = compat_urlparse.urlparse(f4m_url).path - QUALITIES_RE = r'((,\d+)+,?)' - qualities = self._search_regex(QUALITIES_RE, f4m_path, 'qualities').strip(',').split(',') - http_path = f4m_path[1:].split('/', 1)[1] - http_template = re.sub(QUALITIES_RE, r'%s', http_path) - http_template = http_template.replace('.csmil/manifest.f4m', '') - http_template = compat_urlparse.urljoin( - 'http://video.gamespotcdn.com/', http_template) formats = [] - for q in qualities: - formats.append({ - 'url': http_template % q, - 'ext': 'mp4', - 'format_id': q, - }) + f4m_url = streams.get('f4m_stream') + if f4m_url is not None: + # Transform the manifest url to a link to the mp4 files + # they are used in mobile devices. + f4m_path = compat_urlparse.urlparse(f4m_url).path + QUALITIES_RE = r'((,\d+)+,?)' + qualities = self._search_regex(QUALITIES_RE, f4m_path, 'qualities').strip(',').split(',') + http_path = f4m_path[1:].split('/', 1)[1] + http_template = re.sub(QUALITIES_RE, r'%s', http_path) + http_template = http_template.replace('.csmil/manifest.f4m', '') + http_template = compat_urlparse.urljoin( + 'http://video.gamespotcdn.com/', http_template) + for q in qualities: + formats.append({ + 'url': http_template % q, + 'ext': 'mp4', + 'format_id': q, + }) + else: + for quality in ['sd', 'hd']: + # It's actually a link to a flv file + flv_url = streams.get('f4m_{0}'.format(quality)) + if flv_url is not None: + formats.append({ + 'url': flv_url, + 'ext': 'flv', + 'format_id': quality, + }) return { 'id': data_video['guid'], diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 3d756e8..96ca398 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -9,6 +9,8 @@ from .common import InfoExtractor from .youtube import YoutubeIE from ..compat import ( compat_urllib_parse, + compat_urllib_parse_unquote, + compat_urllib_request, compat_urlparse, compat_xml_parse_error, ) @@ -32,6 +34,7 @@ from .brightcove import BrightcoveIE from .nbc import NBCSportsVPlayerIE from .ooyala import OoyalaIE from .rutv import RUTVIE +from .sportbox import SportBoxEmbedIE from .smotri import SmotriIE from .condenast import CondeNastIE from .udn import UDNEmbedIE @@ -45,6 +48,97 @@ class GenericIE(InfoExtractor): _VALID_URL = r'.*' IE_NAME = 'generic' _TESTS = [ + # Direct link to a video + { + 'url': 'http://media.w3.org/2010/05/sintel/trailer.mp4', + 'md5': '67d406c2bcb6af27fa886f31aa934bbe', + 'info_dict': { + 'id': 'trailer', + 'ext': 'mp4', + 'title': 'trailer', + 'upload_date': '20100513', + } + }, + # Direct link to media delivered compressed (until Accept-Encoding is *) + { + 'url': 'http://calimero.tk/muzik/FictionJunction-Parallel_Hearts.flac', + 'md5': '128c42e68b13950268b648275386fc74', + 'info_dict': { + 'id': 'FictionJunction-Parallel_Hearts', + 'ext': 'flac', + 'title': 'FictionJunction-Parallel_Hearts', + 'upload_date': '20140522', + }, + 'expected_warnings': [ + 'URL could be a direct video link, returning it as such.' + ] + }, + # Direct download with broken HEAD + { + 'url': 'http://ai-radio.org:8000/radio.opus', + 'info_dict': { + 'id': 'radio', + 'ext': 'opus', + 'title': 'radio', + }, + 'params': { + 'skip_download': True, # infinite live stream + }, + 'expected_warnings': [ + r'501.*Not Implemented' + ], + }, + # Direct link with incorrect MIME type + { + 'url': 'http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm', + 'md5': '4ccbebe5f36706d85221f204d7eb5913', + 'info_dict': { + 'url': 'http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm', + 'id': '5_Lennart_Poettering_-_Systemd', + 'ext': 'webm', + 'title': '5_Lennart_Poettering_-_Systemd', + 'upload_date': '20141120', + }, + 'expected_warnings': [ + 'URL could be a direct video link, returning it as such.' + ] + }, + # RSS feed + { + 'url': 'http://phihag.de/2014/youtube-dl/rss2.xml', + 'info_dict': { + 'id': 'http://phihag.de/2014/youtube-dl/rss2.xml', + 'title': 'Zero Punctuation', + 'description': 're:.*groundbreaking video review series.*' + }, + 'playlist_mincount': 11, + }, + # RSS feed with enclosure + { + 'url': 'http://podcastfeeds.nbcnews.com/audio/podcast/MSNBC-MADDOW-NETCAST-M4V.xml', + 'info_dict': { + 'id': 'pdv_maddow_netcast_m4v-02-27-2015-201624', + 'ext': 'm4v', + 'upload_date': '20150228', + 'title': 'pdv_maddow_netcast_m4v-02-27-2015-201624', + } + }, + # google redirect + { + 'url': 'http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCUQtwIwAA&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcmQHVoWB5FY&ei=F-sNU-LLCaXk4QT52ICQBQ&usg=AFQjCNEw4hL29zgOohLXvpJ-Bdh2bils1Q&bvm=bv.61965928,d.bGE', + 'info_dict': { + 'id': 'cmQHVoWB5FY', + 'ext': 'mp4', + 'upload_date': '20130224', + 'uploader_id': 'TheVerge', + 'description': 're:^Chris Ziegler takes a look at the\.*', + 'uploader': 'The Verge', + 'title': 'First Firefox OS phones side-by-side', + }, + 'params': { + 'skip_download': False, + } + }, { 'url': 'http://www.hodiho.fr/2013/02/regis-plante-sa-jeep.html', 'md5': '85b90ccc9d73b4acd9138d3af4c27f89', @@ -124,17 +218,6 @@ class GenericIE(InfoExtractor): 'skip_download': True, # m3u8 download }, }, - # Direct link to a video - { - 'url': 'http://media.w3.org/2010/05/sintel/trailer.mp4', - 'md5': '67d406c2bcb6af27fa886f31aa934bbe', - 'info_dict': { - 'id': 'trailer', - 'ext': 'mp4', - 'title': 'trailer', - 'upload_date': '20100513', - } - }, # ooyala video { 'url': 'http://www.rollingstone.com/music/videos/norwegian-dj-cashmere-cat-goes-spartan-on-with-me-premiere-20131219', @@ -159,22 +242,6 @@ class GenericIE(InfoExtractor): }, 'add_ie': ['Ooyala'], }, - # google redirect - { - 'url': 'http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCUQtwIwAA&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcmQHVoWB5FY&ei=F-sNU-LLCaXk4QT52ICQBQ&usg=AFQjCNEw4hL29zgOohLXvpJ-Bdh2bils1Q&bvm=bv.61965928,d.bGE', - 'info_dict': { - 'id': 'cmQHVoWB5FY', - 'ext': 'mp4', - 'upload_date': '20130224', - 'uploader_id': 'TheVerge', - 'description': 're:^Chris Ziegler takes a look at the\.*', - 'uploader': 'The Verge', - 'title': 'First Firefox OS phones side-by-side', - }, - 'params': { - 'skip_download': False, - } - }, # embed.ly video { 'url': 'http://www.tested.com/science/weird/460206-tested-grinding-coffee-2000-frames-second/', @@ -224,6 +291,37 @@ class GenericIE(InfoExtractor): 'skip_download': True, }, }, + # SportBox embed + { + 'url': 'http://www.vestifinance.ru/articles/25753', + 'info_dict': { + 'id': '25753', + 'title': 'Вести Экономика ― Прямые трансляции с Форума-выставки "Госзаказ-2013"', + }, + 'playlist': [{ + 'info_dict': { + 'id': '370908', + 'title': 'Госзаказ. День 3', + 'ext': 'mp4', + } + }, { + 'info_dict': { + 'id': '370905', + 'title': 'Госзаказ. День 2', + 'ext': 'mp4', + } + }, { + 'info_dict': { + 'id': '370902', + 'title': 'Госзаказ. День 1', + 'ext': 'mp4', + } + }], + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, # Embedded TED video { 'url': 'http://en.support.wordpress.com/videos/ted-talks/', @@ -375,16 +473,6 @@ class GenericIE(InfoExtractor): 'title': 'Busty Blonde Siri Tit Fuck While Wank at HandjobHub.com', } }, - # RSS feed - { - 'url': 'http://phihag.de/2014/youtube-dl/rss2.xml', - 'info_dict': { - 'id': 'http://phihag.de/2014/youtube-dl/rss2.xml', - 'title': 'Zero Punctuation', - 'description': 're:.*groundbreaking video review series.*' - }, - 'playlist_mincount': 11, - }, # Multiple brightcove videos # https://github.com/rg3/youtube-dl/issues/2283 { @@ -438,21 +526,6 @@ class GenericIE(InfoExtractor): 'uploader': 'thoughtworks.wistia.com', }, }, - # Direct download with broken HEAD - { - 'url': 'http://ai-radio.org:8000/radio.opus', - 'info_dict': { - 'id': 'radio', - 'ext': 'opus', - 'title': 'radio', - }, - 'params': { - 'skip_download': True, # infinite live stream - }, - 'expected_warnings': [ - r'501.*Not Implemented' - ], - }, # Soundcloud embed { 'url': 'http://nakedsecurity.sophos.com/2014/10/29/sscc-171-are-you-sure-that-1234-is-a-bad-password-podcast/', @@ -484,21 +557,6 @@ class GenericIE(InfoExtractor): }, 'playlist_mincount': 2, }, - # Direct link with incorrect MIME type - { - 'url': 'http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm', - 'md5': '4ccbebe5f36706d85221f204d7eb5913', - 'info_dict': { - 'url': 'http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm', - 'id': '5_Lennart_Poettering_-_Systemd', - 'ext': 'webm', - 'title': '5_Lennart_Poettering_-_Systemd', - 'upload_date': '20141120', - }, - 'expected_warnings': [ - 'URL could be a direct video link, returning it as such.' - ] - }, # Cinchcast embed { 'url': 'http://undergroundwellness.com/podcasts/306-5-steps-to-permanent-gut-healing/', @@ -657,16 +715,6 @@ class GenericIE(InfoExtractor): 'age_limit': 0, }, }, - # RSS feed with enclosure - { - 'url': 'http://podcastfeeds.nbcnews.com/audio/podcast/MSNBC-MADDOW-NETCAST-M4V.xml', - 'info_dict': { - 'id': 'pdv_maddow_netcast_m4v-02-27-2015-201624', - 'ext': 'm4v', - 'upload_date': '20150228', - 'title': 'pdv_maddow_netcast_m4v-02-27-2015-201624', - } - }, # Crooks and Liars embed { 'url': 'http://crooksandliars.com/2015/04/fox-friends-says-protecting-atheists', @@ -862,7 +910,7 @@ class GenericIE(InfoExtractor): force_videoid = smuggled_data['force_videoid'] video_id = force_videoid else: - video_id = os.path.splitext(url.rstrip('/').split('/')[-1])[0] + video_id = compat_urllib_parse_unquote(os.path.splitext(url.rstrip('/').split('/')[-1])[0]) self.to_screen('%s: Requesting header' % video_id) @@ -884,7 +932,9 @@ class GenericIE(InfoExtractor): full_response = None if head_response is False: - full_response = self._request_webpage(url, video_id) + request = compat_urllib_request.Request(url) + request.add_header('Accept-Encoding', '*') + full_response = self._request_webpage(request, video_id) head_response = full_response # Check for direct link to a video @@ -895,7 +945,7 @@ class GenericIE(InfoExtractor): head_response.headers.get('Last-Modified')) return { 'id': video_id, - 'title': os.path.splitext(url_basename(url))[0], + 'title': compat_urllib_parse_unquote(os.path.splitext(url_basename(url))[0]), 'direct': True, 'formats': [{ 'format_id': m.group('format_id'), @@ -909,7 +959,17 @@ class GenericIE(InfoExtractor): self._downloader.report_warning('Falling back on generic information extractor.') if not full_response: - full_response = self._request_webpage(url, video_id) + request = compat_urllib_request.Request(url) + # Some webservers may serve compressed content of rather big size (e.g. gzipped flac) + # making it impossible to download only chunk of the file (yet we need only 512kB to + # test whether it's HTML or not). According to youtube-dl default Accept-Encoding + # that will always result in downloading the whole file that is not desirable. + # Therefore for extraction pass we have to override Accept-Encoding to any in order + # to accept raw bytes and being able to download only a chunk. + # It may probably better to solve this by checking Content-Type for application/octet-stream + # after HEAD request finishes, but not sure if we can rely on this. + request.add_header('Accept-Encoding', '*') + full_response = self._request_webpage(request, video_id) # Maybe it's a direct link to a video? # Be careful not to download the whole thing! @@ -921,7 +981,7 @@ class GenericIE(InfoExtractor): head_response.headers.get('Last-Modified')) return { 'id': video_id, - 'title': os.path.splitext(url_basename(url))[0], + 'title': compat_urllib_parse_unquote(os.path.splitext(url_basename(url))[0]), 'direct': True, 'url': url, 'upload_date': upload_date, @@ -1229,6 +1289,11 @@ class GenericIE(InfoExtractor): if rutv_url: return self.url_result(rutv_url, 'RUTV') + # Look for embedded SportBox player + sportbox_urls = SportBoxEmbedIE._extract_urls(webpage) + if sportbox_urls: + return _playlist_from_matches(sportbox_urls, ie='SportBoxEmbed') + # Look for embedded TED player mobj = re.search( r'<iframe[^>]+?src=(["\'])(?P<url>https?://embed(?:-ssl)?\.ted\.com/.+?)\1', webpage) @@ -1388,7 +1453,7 @@ class GenericIE(InfoExtractor): # Look for Senate ISVP iframe senate_isvp_url = SenateISVPIE._search_iframe_url(webpage) if senate_isvp_url: - return self.url_result(surl, 'SenateISVP') + return self.url_result(senate_isvp_url, 'SenateISVP') def check_video(vurl): if YoutubeIE.suitable(vurl): diff --git a/youtube_dl/extractor/imgur.py b/youtube_dl/extractor/imgur.py index fe5d95e..d692ea7 100644 --- a/youtube_dl/extractor/imgur.py +++ b/youtube_dl/extractor/imgur.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import re from .common import InfoExtractor +from ..compat import compat_urlparse from ..utils import ( int_or_none, js_to_json, @@ -12,7 +13,7 @@ from ..utils import ( class ImgurIE(InfoExtractor): - _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?P<id>[a-zA-Z0-9]+)(?:\.mp4|\.gifv)?' + _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?P<id>[a-zA-Z0-9]+)' _TESTS = [{ 'url': 'https://i.imgur.com/A61SaA1.gifv', @@ -34,7 +35,8 @@ class ImgurIE(InfoExtractor): def _real_extract(self, url): video_id = self._match_id(url) - webpage = self._download_webpage(url, video_id) + webpage = self._download_webpage( + compat_urlparse.urljoin(url, video_id), video_id) width = int_or_none(self._search_regex( r'<param name="width" value="([0-9]+)"', diff --git a/youtube_dl/extractor/instagram.py b/youtube_dl/extractor/instagram.py index 65f6ca1..b107557 100644 --- a/youtube_dl/extractor/instagram.py +++ b/youtube_dl/extractor/instagram.py @@ -7,9 +7,9 @@ from ..utils import int_or_none class InstagramIE(InfoExtractor): - _VALID_URL = r'https?://instagram\.com/p/(?P<id>[\da-zA-Z]+)' + _VALID_URL = r'https://instagram\.com/p/(?P<id>[\da-zA-Z]+)' _TEST = { - 'url': 'http://instagram.com/p/aye83DjauH/?foo=bar#abc', + 'url': 'https://instagram.com/p/aye83DjauH/?foo=bar#abc', 'md5': '0d2da106a9d2631273e192b372806516', 'info_dict': { 'id': 'aye83DjauH', @@ -41,11 +41,11 @@ class InstagramIE(InfoExtractor): class InstagramUserIE(InfoExtractor): - _VALID_URL = r'http://instagram\.com/(?P<username>[^/]{2,})/?(?:$|[?#])' + _VALID_URL = r'https://instagram\.com/(?P<username>[^/]{2,})/?(?:$|[?#])' IE_DESC = 'Instagram user profile' IE_NAME = 'instagram:user' _TEST = { - 'url': 'http://instagram.com/porsche', + 'url': 'https://instagram.com/porsche', 'info_dict': { 'id': 'porsche', 'title': 'porsche', diff --git a/youtube_dl/extractor/iprima.py b/youtube_dl/extractor/iprima.py index 8529bed..821c8ec 100644 --- a/youtube_dl/extractor/iprima.py +++ b/youtube_dl/extractor/iprima.py @@ -11,11 +11,12 @@ from ..compat import ( ) from ..utils import ( ExtractorError, + remove_end, ) class IPrimaIE(InfoExtractor): - _VALID_URL = r'https?://play\.iprima\.cz/[^?#]+/(?P<id>[^?#]+)' + _VALID_URL = r'https?://play\.iprima\.cz/(?:[^/]+/)*(?P<id>[^?#]+)' _TESTS = [{ 'url': 'http://play.iprima.cz/particka/particka-92', @@ -23,7 +24,7 @@ class IPrimaIE(InfoExtractor): 'id': '39152', 'ext': 'flv', 'title': 'Partička (92)', - 'description': 'md5:3740fda51464da35a2d4d0670b8e4fd6', + 'description': 'md5:74e9617e51bca67c3ecfb2c6f9766f45', 'thumbnail': 'http://play.iprima.cz/sites/default/files/image_crops/image_620x349/3/491483_particka-92_image_620x349.jpg', }, 'params': { @@ -35,13 +36,14 @@ class IPrimaIE(InfoExtractor): 'id': '9718337', 'ext': 'flv', 'title': 'Tchibo Partička - Jarní móda', - 'description': 'md5:589f8f59f414220621ff8882eb3ce7be', 'thumbnail': 're:^http:.*\.jpg$', }, 'params': { 'skip_download': True, # requires rtmpdump }, - 'skip': 'Do not have permission to access this page', + }, { + 'url': 'http://play.iprima.cz/zpravy-ftv-prima-2752015', + 'only_matching': True, }] def _real_extract(self, url): @@ -102,8 +104,10 @@ class IPrimaIE(InfoExtractor): return { 'id': real_id, - 'title': self._og_search_title(webpage), + 'title': remove_end(self._og_search_title(webpage), ' | Prima PLAY'), 'thumbnail': self._og_search_thumbnail(webpage), 'formats': formats, - 'description': self._og_search_description(webpage), + 'description': self._search_regex( + r'<p[^>]+itemprop="description"[^>]*>([^<]+)', + webpage, 'description', default=None), } diff --git a/youtube_dl/extractor/karrierevideos.py b/youtube_dl/extractor/karrierevideos.py new file mode 100644 index 0000000..bed94bc --- /dev/null +++ b/youtube_dl/extractor/karrierevideos.py @@ -0,0 +1,96 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..compat import compat_urlparse +from ..utils import ( + fix_xml_ampersands, + float_or_none, + xpath_with_ns, + xpath_text, +) + + +class KarriereVideosIE(InfoExtractor): + _VALID_URL = r'http://(?:www\.)?karrierevideos\.at(?:/[^/]+)+/(?P<id>[^/]+)' + _TESTS = [{ + 'url': 'http://www.karrierevideos.at/berufsvideos/mittlere-hoehere-schulen/altenpflegerin', + 'info_dict': { + 'id': '32c91', + 'ext': 'flv', + 'title': 'AltenpflegerIn', + 'description': 'md5:dbadd1259fde2159a9b28667cb664ae2', + 'thumbnail': 're:^http://.*\.png', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }, { + # broken ampersands + 'url': 'http://www.karrierevideos.at/orientierung/vaeterkarenz-und-neue-chancen-fuer-muetter-baby-was-nun', + 'info_dict': { + 'id': '5sniu', + 'ext': 'flv', + 'title': 'Väterkarenz und neue Chancen für Mütter - "Baby - was nun?"', + 'description': 'md5:97092c6ad1fd7d38e9d6a5fdeb2bcc33', + 'thumbnail': 're:^http://.*\.png', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + + webpage = self._download_webpage(url, video_id) + + title = (self._html_search_meta('title', webpage, default=None) or + self._search_regex(r'<h1 class="title">([^<]+)</h1>')) + + video_id = self._search_regex( + r'/config/video/(.+?)\.xml', webpage, 'video id') + playlist = self._download_xml( + 'http://www.karrierevideos.at/player-playlist.xml.php?p=%s' % video_id, + video_id, transform_source=fix_xml_ampersands) + + NS_MAP = { + 'jwplayer': 'http://developer.longtailvideo.com/trac/wiki/FlashFormats' + } + + def ns(path): + return xpath_with_ns(path, NS_MAP) + + item = playlist.find('./tracklist/item') + video_file = xpath_text( + item, ns('./jwplayer:file'), 'video url', fatal=True) + streamer = xpath_text( + item, ns('./jwplayer:streamer'), 'streamer', fatal=True) + + uploader = xpath_text( + item, ns('./jwplayer:author'), 'uploader') + duration = float_or_none( + xpath_text(item, ns('./jwplayer:duration'), 'duration')) + + description = self._html_search_regex( + r'(?s)<div class="leadtext">(.+?)</div>', + webpage, 'description') + + thumbnail = self._html_search_meta( + 'thumbnail', webpage, 'thumbnail') + if thumbnail: + thumbnail = compat_urlparse.urljoin(url, thumbnail) + + return { + 'id': video_id, + 'url': streamer.replace('rtmpt', 'rtmp'), + 'play_path': 'mp4:%s' % video_file, + 'ext': 'flv', + 'title': title, + 'description': description, + 'thumbnail': thumbnail, + 'uploader': uploader, + 'duration': duration, + } diff --git a/youtube_dl/extractor/letv.py b/youtube_dl/extractor/letv.py index 1484ac0..da896ca 100644 --- a/youtube_dl/extractor/letv.py +++ b/youtube_dl/extractor/letv.py @@ -50,9 +50,7 @@ class LetvIE(InfoExtractor): 'title': '与龙共舞 完整版', 'description': 'md5:7506a5eeb1722bb9d4068f85024e3986', }, - 'params': { - 'cn_verification_proxy': 'http://proxy.uku.im:8888' - }, + 'skip': 'Only available in China', }] @staticmethod diff --git a/youtube_dl/extractor/mitele.py b/youtube_dl/extractor/mitele.py index d8897eb..7091f33 100644 --- a/youtube_dl/extractor/mitele.py +++ b/youtube_dl/extractor/mitele.py @@ -20,7 +20,6 @@ class MiTeleIE(InfoExtractor): _TESTS = [{ 'url': 'http://www.mitele.es/programas-tv/diario-de/la-redaccion/programa-144/', - 'md5': '6a75fe9d0d3275bead0cb683c616fddb', 'info_dict': { 'id': '0fce117d', 'ext': 'mp4', @@ -29,6 +28,10 @@ class MiTeleIE(InfoExtractor): 'display_id': 'programa-144', 'duration': 2913, }, + 'params': { + # m3u8 download + 'skip_download': True, + }, }] def _real_extract(self, url): @@ -56,12 +59,14 @@ class MiTeleIE(InfoExtractor): episode, transform_source=strip_jsonp ) + formats = self._extract_m3u8_formats( + token_info['tokenizedUrl'], episode, ext='mp4') return { 'id': embed_data['videoId'], 'display_id': episode, 'title': info_el.find('title').text, - 'url': token_info['tokenizedUrl'], + 'formats': formats, 'description': get_element_by_attribute('class', 'text', webpage), 'thumbnail': info_el.find('thumb').text, 'duration': parse_duration(info_el.find('duration').text), diff --git a/youtube_dl/extractor/naver.py b/youtube_dl/extractor/naver.py index c10405f..9259677 100644 --- a/youtube_dl/extractor/naver.py +++ b/youtube_dl/extractor/naver.py @@ -6,6 +6,7 @@ import re from .common import InfoExtractor from ..compat import ( compat_urllib_parse, + compat_urlparse, ) from ..utils import ( ExtractorError, @@ -16,7 +17,7 @@ from ..utils import ( class NaverIE(InfoExtractor): _VALID_URL = r'https?://(?:m\.)?tvcast\.naver\.com/v/(?P<id>\d+)' - _TEST = { + _TESTS = [{ 'url': 'http://tvcast.naver.com/v/81652', 'info_dict': { 'id': '81652', @@ -25,7 +26,18 @@ class NaverIE(InfoExtractor): 'description': '합격불변의 법칙 메가스터디 | 메가스터디 수학 김상희 선생님이 9월 모의고사 수학A형 16번에서 20번까지 해설강의를 공개합니다.', 'upload_date': '20130903', }, - } + }, { + 'url': 'http://tvcast.naver.com/v/395837', + 'md5': '638ed4c12012c458fefcddfd01f173cd', + 'info_dict': { + 'id': '395837', + 'ext': 'mp4', + 'title': '9년이 지나도 아픈 기억, 전효성의 아버지', + 'description': 'md5:5bf200dcbf4b66eb1b350d1eb9c753f7', + 'upload_date': '20150519', + }, + 'skip': 'Georestricted', + }] def _real_extract(self, url): video_id = self._match_id(url) @@ -35,7 +47,7 @@ class NaverIE(InfoExtractor): webpage) if m_id is None: m_error = re.search( - r'(?s)<div class="nation_error">\s*(?:<!--.*?-->)?\s*<p class="[^"]+">(?P<msg>.+?)</p>\s*</div>', + r'(?s)<div class="(?:nation_error|nation_box)">\s*(?:<!--.*?-->)?\s*<p class="[^"]+">(?P<msg>.+?)</p>\s*</div>', webpage) if m_error: raise ExtractorError(clean_html(m_error.group('msg')), expected=True) @@ -58,14 +70,18 @@ class NaverIE(InfoExtractor): formats = [] for format_el in urls.findall('EncodingOptions/EncodingOption'): domain = format_el.find('Domain').text + uri = format_el.find('uri').text f = { - 'url': domain + format_el.find('uri').text, + 'url': compat_urlparse.urljoin(domain, uri), 'ext': 'mp4', 'width': int(format_el.find('width').text), 'height': int(format_el.find('height').text), } if domain.startswith('rtmp'): + # urlparse does not support custom schemes + # https://bugs.python.org/issue18828 f.update({ + 'url': domain + uri, 'ext': 'flv', 'rtmp_protocol': '1', # rtmpt }) diff --git a/youtube_dl/extractor/nba.py b/youtube_dl/extractor/nba.py index 862b706..944096e 100644 --- a/youtube_dl/extractor/nba.py +++ b/youtube_dl/extractor/nba.py @@ -22,6 +22,18 @@ class NBAIE(InfoExtractor): }, { 'url': 'http://www.nba.com/video/games/hornets/2014/12/05/0021400276-nyk-cha-play5.nba/', 'only_matching': True, + }, { + 'url': 'http://watch.nba.com/nba/video/channels/playoffs/2015/05/20/0041400301-cle-atl-recap.nba', + 'info_dict': { + 'id': '0041400301-cle-atl-recap.nba', + 'ext': 'mp4', + 'title': 'NBA GAME TIME | Video: Hawks vs. Cavaliers Game 1', + 'description': 'md5:8094c3498d35a9bd6b1a8c396a071b4d', + 'duration': 228, + }, + 'params': { + 'skip_download': True, + } }] def _real_extract(self, url): @@ -35,8 +47,12 @@ class NBAIE(InfoExtractor): self._og_search_title(webpage, default=shortened_video_id), ' : NBA.com') description = self._og_search_description(webpage) - duration = parse_duration( - self._html_search_meta('duration', webpage, 'duration')) + duration_str = self._html_search_meta( + 'duration', webpage, 'duration', default=None) + if not duration_str: + duration_str = self._html_search_regex( + r'Duration:</b>\s*(\d+:\d+)', webpage, 'duration', fatal=False) + duration = parse_duration(duration_str) return { 'id': shortened_video_id, diff --git a/youtube_dl/extractor/nextmedia.py b/youtube_dl/extractor/nextmedia.py index 02dba4e..d1b7cff 100644 --- a/youtube_dl/extractor/nextmedia.py +++ b/youtube_dl/extractor/nextmedia.py @@ -89,8 +89,8 @@ class NextMediaActionNewsIE(NextMediaIE): return self._extract_from_nextmedia_page(news_id, url, article_page) -class AppleDailyRealtimeNewsIE(NextMediaIE): - _VALID_URL = r'http://(www|ent).appledaily.com.tw/(realtimenews|enews)/[^/]+/[^/]+/(?P<date>\d+)/(?P<id>\d+)(/.*)?' +class AppleDailyIE(NextMediaIE): + _VALID_URL = r'http://(www|ent).appledaily.com.tw/(?:animation|appledaily|enews|realtimenews)/[^/]+/[^/]+/(?P<date>\d+)/(?P<id>\d+)(/.*)?' _TESTS = [{ 'url': 'http://ent.appledaily.com.tw/enews/article/entertainment/20150128/36354694', 'md5': 'a843ab23d150977cc55ef94f1e2c1e4d', @@ -99,7 +99,7 @@ class AppleDailyRealtimeNewsIE(NextMediaIE): 'ext': 'mp4', 'title': '周亭羽走過摩鐵陰霾2男陪吃 九把刀孤寒看醫生', 'thumbnail': 're:^https?://.*\.jpg$', - 'description': 'md5:b23787119933404ce515c6356a8c355c', + 'description': 'md5:2acd430e59956dc47cd7f67cb3c003f4', 'upload_date': '20150128', } }, { @@ -110,26 +110,10 @@ class AppleDailyRealtimeNewsIE(NextMediaIE): 'ext': 'mp4', 'title': '不滿被踩腳 山東兩大媽一路打下車', 'thumbnail': 're:^https?://.*\.jpg$', - 'description': 'md5:2648aaf6fc4f401f6de35a91d111aa1d', + 'description': 'md5:175b4260c1d7c085993474217e4ab1b4', 'upload_date': '20150128', } - }] - - _URL_PATTERN = r'\{url: \'(.+)\'\}' - - def _fetch_title(self, page): - return self._html_search_regex(r'<h1 id="h1">([^<>]+)</h1>', page, 'news title') - - def _fetch_thumbnail(self, page): - return self._html_search_regex(r"setInitialImage\(\'([^']+)'\)", page, 'video thumbnail', fatal=False) - - def _fetch_timestamp(self, page): - return None - - -class AppleDailyAnimationNewsIE(AppleDailyRealtimeNewsIE): - _VALID_URL = 'http://www.appledaily.com.tw/animation/[^/]+/[^/]+/(?P<date>\d+)/(?P<id>\d+)(/.*)?' - _TESTS = [{ + }, { 'url': 'http://www.appledaily.com.tw/animation/realtimenews/new/20150128/5003671', 'md5': '03df296d95dedc2d5886debbb80cb43f', 'info_dict': { @@ -154,10 +138,22 @@ class AppleDailyAnimationNewsIE(AppleDailyRealtimeNewsIE): 'expected_warnings': [ 'video thumbnail', ] + }, { + 'url': 'http://www.appledaily.com.tw/appledaily/article/supplement/20140417/35770334/', + 'only_matching': True, }] + _URL_PATTERN = r'\{url: \'(.+)\'\}' + def _fetch_title(self, page): - return self._html_search_meta('description', page, 'news title') + return (self._html_search_regex(r'<h1 id="h1">([^<>]+)</h1>', page, 'news title', default=None) or + self._html_search_meta('description', page, 'news title')) + + def _fetch_thumbnail(self, page): + return self._html_search_regex(r"setInitialImage\(\'([^']+)'\)", page, 'video thumbnail', fatal=False) + + def _fetch_timestamp(self, page): + return None def _fetch_description(self, page): return self._html_search_meta('description', page, 'news description') diff --git a/youtube_dl/extractor/nova.py b/youtube_dl/extractor/nova.py new file mode 100644 index 0000000..3f9c776 --- /dev/null +++ b/youtube_dl/extractor/nova.py @@ -0,0 +1,179 @@ +# encoding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..utils import ( + clean_html, + unified_strdate, +) + + +class NovaIE(InfoExtractor): + IE_DESC = 'TN.cz, Prásk.tv, Nova.cz, Novaplus.cz, FANDA.tv, Krásná.cz and Doma.cz' + _VALID_URL = 'http://(?:[^.]+\.)?(?P<site>tv(?:noviny)?|tn|novaplus|vymena|fanda|krasna|doma|prask)\.nova\.cz/(?:[^/]+/)+(?P<id>[^/]+?)(?:\.html|/|$)' + _TESTS = [{ + 'url': 'http://tvnoviny.nova.cz/clanek/novinky/co-na-sebe-sportaci-praskli-vime-jestli-pujde-hrdlicka-na-materskou.html?utm_source=tvnoviny&utm_medium=cpfooter&utm_campaign=novaplus', + 'info_dict': { + 'id': '1608920', + 'display_id': 'co-na-sebe-sportaci-praskli-vime-jestli-pujde-hrdlicka-na-materskou', + 'ext': 'flv', + 'title': 'Duel: Michal Hrdlička a Petr Suchoň', + 'description': 'md5:d0cc509858eee1b1374111c588c6f5d5', + 'thumbnail': 're:^https?://.*\.(?:jpg)', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }, { + 'url': 'http://tn.nova.cz/clanek/tajemstvi-ukryte-v-podzemi-specialni-nemocnice-v-prazske-krci.html#player_13260', + 'md5': '1dd7b9d5ea27bc361f110cd855a19bd3', + 'info_dict': { + 'id': '1757139', + 'display_id': 'tajemstvi-ukryte-v-podzemi-specialni-nemocnice-v-prazske-krci', + 'ext': 'mp4', + 'title': 'Podzemní nemocnice v pražské Krči', + 'description': 'md5:f0a42dd239c26f61c28f19e62d20ef53', + 'thumbnail': 're:^https?://.*\.(?:jpg)', + } + }, { + 'url': 'http://novaplus.nova.cz/porad/policie-modrava/video/5591-policie-modrava-15-dil-blondynka-na-hrbitove', + 'info_dict': { + 'id': '1756825', + 'display_id': '5591-policie-modrava-15-dil-blondynka-na-hrbitove', + 'ext': 'flv', + 'title': 'Policie Modrava - 15. díl - Blondýnka na hřbitově', + 'description': 'md5:dc24e50be5908df83348e50d1431295e', # Make sure this description is clean of html tags + 'thumbnail': 're:^https?://.*\.(?:jpg)', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }, { + 'url': 'http://novaplus.nova.cz/porad/televizni-noviny/video/5585-televizni-noviny-30-5-2015/', + 'info_dict': { + 'id': '1756858', + 'ext': 'flv', + 'title': 'Televizní noviny - 30. 5. 2015', + 'thumbnail': 're:^https?://.*\.(?:jpg)', + 'upload_date': '20150530', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }, { + 'url': 'http://fanda.nova.cz/clanek/fun-and-games/krvavy-epos-zaklinac-3-divoky-hon-vychazi-vyhrajte-ho-pro-sebe.html', + 'info_dict': { + 'id': '1753621', + 'ext': 'mp4', + 'title': 'Zaklínač 3: Divoký hon', + 'description': 're:.*Pokud se stejně jako my nemůžete.*', + 'thumbnail': 're:https?://.*\.jpg(\?.*)?', + 'upload_date': '20150521', + }, + 'params': { + # rtmp download + 'skip_download': True, + } + }, { + 'url': 'http://sport.tn.nova.cz/clanek/sport/hokej/nhl/zivot-jde-dal-hodnotil-po-vyrazeni-z-playoff-jiri-sekac.html', + 'only_matching': True, + }, { + 'url': 'http://fanda.nova.cz/clanek/fun-and-games/krvavy-epos-zaklinac-3-divoky-hon-vychazi-vyhrajte-ho-pro-sebe.html', + 'only_matching': True, + }, { + 'url': 'http://doma.nova.cz/clanek/zdravi/prijdte-se-zapsat-do-registru-kostni-drene-jiz-ve-stredu-3-cervna.html', + 'only_matching': True, + }, { + 'url': 'http://prask.nova.cz/clanek/novinky/co-si-na-sobe-nase-hvezdy-nechaly-pojistit.html', + 'only_matching': True, + }, { + 'url': 'http://tv.nova.cz/clanek/novinky/zivot-je-zivot-bondovsky-trailer.html', + 'only_matching': True, + }] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + display_id = mobj.group('id') + site = mobj.group('site') + + webpage = self._download_webpage(url, display_id) + + video_id = self._search_regex( + [r"(?:media|video_id)\s*:\s*'(\d+)'", + r'media=(\d+)', + r'id="article_video_(\d+)"', + r'id="player_(\d+)"'], + webpage, 'video id') + + config_url = self._search_regex( + r'src="(http://tn\.nova\.cz/bin/player/videojs/config\.php\?[^"]+)"', + webpage, 'config url', default=None) + + if not config_url: + DEFAULT_SITE_ID = '23000' + SITES = { + 'tvnoviny': DEFAULT_SITE_ID, + 'novaplus': DEFAULT_SITE_ID, + 'vymena': DEFAULT_SITE_ID, + 'krasna': DEFAULT_SITE_ID, + 'fanda': '30', + 'tn': '30', + 'doma': '30', + } + + site_id = self._search_regex( + r'site=(\d+)', webpage, 'site id', default=None) or SITES.get(site, DEFAULT_SITE_ID) + + config_url = ('http://tn.nova.cz/bin/player/videojs/config.php?site=%s&media=%s&jsVar=vjsconfig' + % (site_id, video_id)) + + config = self._download_json( + config_url, display_id, + 'Downloading config JSON', + transform_source=lambda s: s[s.index('{'):s.rindex('}') + 1]) + + mediafile = config['mediafile'] + video_url = mediafile['src'] + + m = re.search(r'^(?P<url>rtmpe?://[^/]+/(?P<app>[^/]+?))/&*(?P<playpath>.+)$', video_url) + if m: + formats = [{ + 'url': m.group('url'), + 'app': m.group('app'), + 'play_path': m.group('playpath'), + 'player_path': 'http://tvnoviny.nova.cz/static/shared/app/videojs/video-js.swf', + 'ext': 'flv', + }] + else: + formats = [{ + 'url': video_url, + }] + self._sort_formats(formats) + + title = mediafile.get('meta', {}).get('title') or self._og_search_title(webpage) + description = clean_html(self._og_search_description(webpage, default=None)) + thumbnail = config.get('poster') + + if site == 'novaplus': + upload_date = unified_strdate(self._search_regex( + r'(\d{1,2}-\d{1,2}-\d{4})$', display_id, 'upload date', default=None)) + elif site == 'fanda': + upload_date = unified_strdate(self._search_regex( + r'<span class="date_time">(\d{1,2}\.\d{1,2}\.\d{4})', webpage, 'upload date', default=None)) + else: + upload_date = None + + return { + 'id': video_id, + 'display_id': display_id, + 'title': title, + 'description': description, + 'upload_date': upload_date, + 'thumbnail': thumbnail, + 'formats': formats, + } diff --git a/youtube_dl/extractor/nowtv.py b/youtube_dl/extractor/nowtv.py new file mode 100644 index 0000000..173e46c --- /dev/null +++ b/youtube_dl/extractor/nowtv.py @@ -0,0 +1,192 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..compat import compat_str +from ..utils import ( + ExtractorError, + int_or_none, + parse_iso8601, + parse_duration, + remove_start, +) + + +class NowTVIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?nowtv\.de/(?P<station>rtl|rtl2|rtlnitro|superrtl|ntv|vox)/(?P<id>.+?)/player' + + _TESTS = [{ + # rtl + 'url': 'http://www.nowtv.de/rtl/bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit/player', + 'info_dict': { + 'id': '203519', + 'display_id': 'bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit', + 'ext': 'mp4', + 'title': 'Die neuen Bauern und eine Hochzeit', + 'description': 'md5:e234e1ed6d63cf06be5c070442612e7e', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1432580700, + 'upload_date': '20150525', + 'duration': 2786, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + # rtl2 + 'url': 'http://www.nowtv.de/rtl2/berlin-tag-nacht/berlin-tag-nacht-folge-934/player', + 'info_dict': { + 'id': '203481', + 'display_id': 'berlin-tag-nacht/berlin-tag-nacht-folge-934', + 'ext': 'mp4', + 'title': 'Berlin - Tag & Nacht (Folge 934)', + 'description': 'md5:c85e88c2e36c552dfe63433bc9506dd0', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1432666800, + 'upload_date': '20150526', + 'duration': 2641, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + # rtlnitro + 'url': 'http://www.nowtv.de/rtlnitro/alarm-fuer-cobra-11-die-autobahnpolizei/hals-und-beinbruch-2014-08-23-21-10-00/player', + 'info_dict': { + 'id': '165780', + 'display_id': 'alarm-fuer-cobra-11-die-autobahnpolizei/hals-und-beinbruch-2014-08-23-21-10-00', + 'ext': 'mp4', + 'title': 'Hals- und Beinbruch', + 'description': 'md5:b50d248efffe244e6f56737f0911ca57', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1432415400, + 'upload_date': '20150523', + 'duration': 2742, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + # superrtl + 'url': 'http://www.nowtv.de/superrtl/medicopter-117/angst/player', + 'info_dict': { + 'id': '99205', + 'display_id': 'medicopter-117/angst', + 'ext': 'mp4', + 'title': 'Angst!', + 'description': 'md5:30cbc4c0b73ec98bcd73c9f2a8c17c4e', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1222632900, + 'upload_date': '20080928', + 'duration': 3025, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + # ntv + 'url': 'http://www.nowtv.de/ntv/ratgeber-geld/thema-ua-der-erste-blick-die-apple-watch/player', + 'info_dict': { + 'id': '203521', + 'display_id': 'ratgeber-geld/thema-ua-der-erste-blick-die-apple-watch', + 'ext': 'mp4', + 'title': 'Thema u.a.: Der erste Blick: Die Apple Watch', + 'description': 'md5:4312b6c9d839ffe7d8caf03865a531af', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1432751700, + 'upload_date': '20150527', + 'duration': 1083, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + # vox + 'url': 'http://www.nowtv.de/vox/der-hundeprofi/buero-fall-chihuahua-joel/player', + 'info_dict': { + 'id': '128953', + 'display_id': 'der-hundeprofi/buero-fall-chihuahua-joel', + 'ext': 'mp4', + 'title': "Büro-Fall / Chihuahua 'Joel'", + 'description': 'md5:e62cb6bf7c3cc669179d4f1eb279ad8d', + 'thumbnail': 're:^https?://.*\.jpg$', + 'timestamp': 1432408200, + 'upload_date': '20150523', + 'duration': 3092, + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + display_id = mobj.group('id') + station = mobj.group('station') + + info = self._download_json( + 'https://api.nowtv.de/v3/movies/%s?fields=*,format,files' % display_id, + display_id) + + video_id = compat_str(info['id']) + + files = info['files'] + if not files: + if info.get('geoblocked', False): + raise ExtractorError( + 'Video %s is not available from your location due to geo restriction' % video_id, + expected=True) + if not info.get('free', True): + raise ExtractorError( + 'Video %s is not available for free' % video_id, expected=True) + + f = info.get('format', {}) + station = f.get('station') or station + + STATIONS = { + 'rtl': 'rtlnow', + 'rtl2': 'rtl2now', + 'vox': 'voxnow', + 'nitro': 'rtlnitronow', + 'ntv': 'n-tvnow', + 'superrtl': 'superrtlnow' + } + + formats = [] + for item in files['items']: + item_path = remove_start(item['path'], '/') + tbr = int_or_none(item['bitrate']) + m3u8_url = 'http://hls.fra.%s.de/hls-vod-enc/%s.m3u8' % (STATIONS[station], item_path) + m3u8_url = m3u8_url.replace('now/', 'now/videos/') + formats.append({ + 'url': m3u8_url, + 'format_id': '%s-%sk' % (item['id'], tbr), + 'ext': 'mp4', + 'tbr': tbr, + }) + self._sort_formats(formats) + + title = info['title'] + description = info.get('articleLong') or info.get('articleShort') + timestamp = parse_iso8601(info.get('broadcastStartDate'), ' ') + duration = parse_duration(info.get('duration')) + thumbnail = f.get('defaultImage169Format') or f.get('defaultImage169Logo') + + return { + 'id': video_id, + 'display_id': display_id, + 'title': title, + 'description': description, + 'thumbnail': thumbnail, + 'timestamp': timestamp, + 'duration': duration, + 'formats': formats, + } diff --git a/youtube_dl/extractor/odnoklassniki.py b/youtube_dl/extractor/odnoklassniki.py index fbc521d..6c7149f 100644 --- a/youtube_dl/extractor/odnoklassniki.py +++ b/youtube_dl/extractor/odnoklassniki.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from .common import InfoExtractor +from ..compat import compat_urllib_parse from ..utils import ( unified_strdate, int_or_none, @@ -11,8 +12,9 @@ from ..utils import ( class OdnoklassnikiIE(InfoExtractor): - _VALID_URL = r'https?://(?:odnoklassniki|ok)\.ru/(?:video|web-api/video/moviePlayer)/(?P<id>\d+)' + _VALID_URL = r'https?://(?:odnoklassniki|ok)\.ru/(?:video|web-api/video/moviePlayer)/(?P<id>[\d-]+)' _TESTS = [{ + # metadata in JSON 'url': 'http://ok.ru/video/20079905452', 'md5': '8e24ad2da6f387948e7a7d44eb8668fe', 'info_dict': { @@ -20,11 +22,22 @@ class OdnoklassnikiIE(InfoExtractor): 'ext': 'mp4', 'title': 'Культура меняет нас (прекрасный ролик!))', 'duration': 100, - 'upload_date': '20141207', 'uploader_id': '330537914540', 'uploader': 'Виталий Добровольский', 'like_count': int, - 'age_limit': 0, + }, + }, { + # metadataUrl + 'url': 'http://ok.ru/video/63567059965189-0', + 'md5': '9676cf86eff5391d35dea675d224e131', + 'info_dict': { + 'id': '63567059965189-0', + 'ext': 'mp4', + 'title': 'Девушка без комплексов ...', + 'duration': 191, + 'uploader_id': '534380003155', + 'uploader': 'Андрей Мещанинов', + 'like_count': int, }, }, { 'url': 'http://ok.ru/web-api/video/moviePlayer/20079905452', @@ -34,14 +47,23 @@ class OdnoklassnikiIE(InfoExtractor): def _real_extract(self, url): video_id = self._match_id(url) - webpage = self._download_webpage(url, video_id) + webpage = self._download_webpage( + 'http://ok.ru/video/%s' % video_id, video_id) player = self._parse_json( unescapeHTML(self._search_regex( r'data-attributes="([^"]+)"', webpage, 'player')), video_id) - metadata = self._parse_json(player['flashvars']['metadata'], video_id) + flashvars = player['flashvars'] + + metadata = flashvars.get('metadata') + if metadata: + metadata = self._parse_json(metadata, video_id) + else: + metadata = self._download_json( + compat_urllib_parse.unquote(flashvars['metadataUrl']), + video_id, 'Downloading metadata JSON') movie = metadata['movie'] title = movie['title'] @@ -53,11 +75,11 @@ class OdnoklassnikiIE(InfoExtractor): uploader = author.get('name') upload_date = unified_strdate(self._html_search_meta( - 'ya:ovs:upload_date', webpage, 'upload date')) + 'ya:ovs:upload_date', webpage, 'upload date', default=None)) age_limit = None adult = self._html_search_meta( - 'ya:ovs:adult', webpage, 'age limit') + 'ya:ovs:adult', webpage, 'age limit', default=None) if adult: age_limit = 18 if adult == 'true' else 0 diff --git a/youtube_dl/extractor/ooyala.py b/youtube_dl/extractor/ooyala.py index c0e6d64..a262a9f 100644 --- a/youtube_dl/extractor/ooyala.py +++ b/youtube_dl/extractor/ooyala.py @@ -12,50 +12,7 @@ from ..utils import ( ) -class OoyalaIE(InfoExtractor): - _VALID_URL = r'(?:ooyala:|https?://.+?\.ooyala\.com/.*?(?:embedCode|ec)=)(?P<id>.+?)(&|$)' - - _TESTS = [ - { - # From http://it.slashdot.org/story/13/04/25/178216/recovering-data-from-broken-hard-drives-and-ssds-video - 'url': 'http://player.ooyala.com/player.js?embedCode=pxczE2YjpfHfn1f3M-ykG_AmJRRn0PD8', - 'info_dict': { - 'id': 'pxczE2YjpfHfn1f3M-ykG_AmJRRn0PD8', - 'ext': 'mp4', - 'title': 'Explaining Data Recovery from Hard Drives and SSDs', - 'description': 'How badly damaged does a drive have to be to defeat Russell and his crew? Apparently, smashed to bits.', - }, - }, { - # Only available for ipad - 'url': 'http://player.ooyala.com/player.js?embedCode=x1b3lqZDq9y_7kMyC2Op5qo-p077tXD0', - 'info_dict': { - 'id': 'x1b3lqZDq9y_7kMyC2Op5qo-p077tXD0', - 'ext': 'mp4', - 'title': 'Simulation Overview - Levels of Simulation', - 'description': '', - }, - }, - { - # Information available only through SAS api - # From http://community.plm.automation.siemens.com/t5/News-NX-Manufacturing/Tool-Path-Divide/ba-p/4187 - 'url': 'http://player.ooyala.com/player.js?embedCode=FiOG81ZTrvckcchQxmalf4aQj590qTEx', - 'md5': 'a84001441b35ea492bc03736e59e7935', - 'info_dict': { - 'id': 'FiOG81ZTrvckcchQxmalf4aQj590qTEx', - 'ext': 'mp4', - 'title': 'Ooyala video', - } - } - ] - - @staticmethod - def _url_for_embed_code(embed_code): - return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code - - @classmethod - def _build_url_result(cls, embed_code): - return cls.url_result(cls._url_for_embed_code(embed_code), - ie=cls.ie_key()) +class OoyalaBaseIE(InfoExtractor): def _extract_result(self, info, more_info): embedCode = info['embedCode'] @@ -77,11 +34,8 @@ class OoyalaIE(InfoExtractor): 'thumbnail': more_info['promo'], } - def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - embedCode = mobj.group('id') - player_url = 'http://player.ooyala.com/player.js?embedCode=%s' % embedCode - player = self._download_webpage(player_url, embedCode) + def _extract(self, player_url, video_id): + player = self._download_webpage(player_url, video_id) mobile_url = self._search_regex(r'mobile_player_url="(.+?)&device="', player, 'mobile player url') # Looks like some videos are only available for particular devices @@ -94,7 +48,7 @@ class OoyalaIE(InfoExtractor): devices.insert(0, 'unknown') for device in devices: mobile_player = self._download_webpage( - '%s&device=%s' % (mobile_url, device), embedCode, + '%s&device=%s' % (mobile_url, device), video_id, 'Downloading mobile player JS for %s device' % device) videos_info = self._search_regex( r'var streams=window.oo_testEnv\?\[\]:eval\("\((\[{.*?}\])\)"\);', @@ -105,10 +59,10 @@ class OoyalaIE(InfoExtractor): if not videos_info: formats = [] auth_data = self._download_json( - 'http://player.ooyala.com/sas/player_api/v1/authorization/embed_code/%s/%s?domain=www.example.org&supportedFormats=mp4,webm' % (embedCode, embedCode), - embedCode) + 'http://player.ooyala.com/sas/player_api/v1/authorization/embed_code/%s/%s?domain=www.example.org&supportedFormats=mp4,webm' % (video_id, video_id), + video_id) - cur_auth_data = auth_data['authorization_data'][embedCode] + cur_auth_data = auth_data['authorization_data'][video_id] for stream in cur_auth_data['streams']: formats.append({ @@ -123,7 +77,7 @@ class OoyalaIE(InfoExtractor): }) if formats: return { - 'id': embedCode, + 'id': video_id, 'formats': formats, 'title': 'Ooyala video', } @@ -143,9 +97,100 @@ class OoyalaIE(InfoExtractor): videos = [self._extract_result(info, more_info) for (info, more_info) in zip(videos_info, videos_more_info['lineup'])] return { '_type': 'playlist', - 'id': embedCode, + 'id': video_id, 'title': unescapeHTML(videos_more_info['title']), 'entries': videos, } else: return self._extract_result(videos_info[0], videos_more_info) + + +class OoyalaIE(OoyalaBaseIE): + _VALID_URL = r'(?:ooyala:|https?://.+?\.ooyala\.com/.*?(?:embedCode|ec)=)(?P<id>.+?)(&|$)' + + _TESTS = [ + { + # From http://it.slashdot.org/story/13/04/25/178216/recovering-data-from-broken-hard-drives-and-ssds-video + 'url': 'http://player.ooyala.com/player.js?embedCode=pxczE2YjpfHfn1f3M-ykG_AmJRRn0PD8', + 'info_dict': { + 'id': 'pxczE2YjpfHfn1f3M-ykG_AmJRRn0PD8', + 'ext': 'mp4', + 'title': 'Explaining Data Recovery from Hard Drives and SSDs', + 'description': 'How badly damaged does a drive have to be to defeat Russell and his crew? Apparently, smashed to bits.', + }, + }, { + # Only available for ipad + 'url': 'http://player.ooyala.com/player.js?embedCode=x1b3lqZDq9y_7kMyC2Op5qo-p077tXD0', + 'info_dict': { + 'id': 'x1b3lqZDq9y_7kMyC2Op5qo-p077tXD0', + 'ext': 'mp4', + 'title': 'Simulation Overview - Levels of Simulation', + 'description': '', + }, + }, + { + # Information available only through SAS api + # From http://community.plm.automation.siemens.com/t5/News-NX-Manufacturing/Tool-Path-Divide/ba-p/4187 + 'url': 'http://player.ooyala.com/player.js?embedCode=FiOG81ZTrvckcchQxmalf4aQj590qTEx', + 'md5': 'a84001441b35ea492bc03736e59e7935', + 'info_dict': { + 'id': 'FiOG81ZTrvckcchQxmalf4aQj590qTEx', + 'ext': 'mp4', + 'title': 'Ooyala video', + } + } + ] + + @staticmethod + def _url_for_embed_code(embed_code): + return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code + + @classmethod + def _build_url_result(cls, embed_code): + return cls.url_result(cls._url_for_embed_code(embed_code), + ie=cls.ie_key()) + + def _real_extract(self, url): + embed_code = self._match_id(url) + player_url = 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code + return self._extract(player_url, embed_code) + + +class OoyalaExternalIE(OoyalaBaseIE): + _VALID_URL = r'''(?x) + (?: + ooyalaexternal:| + https?://.+?\.ooyala\.com/.*?\bexternalId= + ) + (?P<partner_id>[^:]+) + : + (?P<id>.+) + (?: + :| + .*?&pcode= + ) + (?P<pcode>.+?) + (&|$) + ''' + + _TEST = { + 'url': 'https://player.ooyala.com/player.js?externalId=espn:10365079&pcode=1kNG061cgaoolOncv54OAO1ceO-I&adSetCode=91cDU6NuXTGKz3OdjOxFdAgJVtQcKJnI&callback=handleEvents&hasModuleParams=1&height=968&playerBrandingId=7af3bd04449c444c964f347f11873075&targetReplaceId=videoPlayer&width=1656&wmode=opaque&allowScriptAccess=always', + 'info_dict': { + 'id': 'FkYWtmazr6Ed8xmvILvKLWjd4QvYZpzG', + 'ext': 'mp4', + 'title': 'dm_140128_30for30Shorts___JudgingJewellv2', + 'description': '', + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + partner_id = mobj.group('partner_id') + video_id = mobj.group('id') + pcode = mobj.group('pcode') + player_url = 'http://player.ooyala.com/player.js?externalId=%s:%s&pcode=%s' % (partner_id, video_id, pcode) + return self._extract(player_url, video_id) diff --git a/youtube_dl/extractor/patreon.py b/youtube_dl/extractor/patreon.py index f179ea2..6cdc263 100644 --- a/youtube_dl/extractor/patreon.py +++ b/youtube_dl/extractor/patreon.py @@ -87,7 +87,7 @@ class PatreonIE(InfoExtractor): r'<div class="attach"><a target="_blank" href="([^"]+)">', webpage, 'attachment URL', default=None) embed = self._html_search_regex( - r'<div id="watchCreation">\s*<iframe class="embedly-embed" src="([^"]+)"', + r'<div[^>]+id="watchCreation"[^>]*>\s*<iframe[^>]+src="([^"]+)"', webpage, 'embedded URL', default=None) if attach_fn is not None: diff --git a/youtube_dl/extractor/porn91.py b/youtube_dl/extractor/porn91.py new file mode 100644 index 0000000..72d1b27 --- /dev/null +++ b/youtube_dl/extractor/porn91.py @@ -0,0 +1,71 @@ +# encoding: utf-8 +from __future__ import unicode_literals + +from ..compat import compat_urllib_parse +from .common import InfoExtractor +from ..utils import ( + parse_duration, + int_or_none, + ExtractorError, +) + + +class Porn91IE(InfoExtractor): + IE_NAME = '91porn' + _VALID_URL = r'(?:https?://)(?:www\.|)91porn\.com/.+?\?viewkey=(?P<id>[\w\d]+)' + + _TEST = { + 'url': 'http://91porn.com/view_video.php?viewkey=7e42283b4f5ab36da134', + 'md5': '6df8f6d028bc8b14f5dbd73af742fb20', + 'info_dict': { + 'id': '7e42283b4f5ab36da134', + 'title': '18岁大一漂亮学妹,水嫩性感,再爽一次!', + 'ext': 'mp4', + 'duration': 431, + } + } + + def _real_extract(self, url): + video_id = self._match_id(url) + url = 'http://91porn.com/view_video.php?viewkey=%s' % video_id + self._set_cookie('91porn.com', 'language', 'cn_CN') + webpage = self._download_webpage(url, video_id, 'get HTML content') + + if '作为游客,你每天只可观看10个视频' in webpage: + raise ExtractorError('91 Porn says: Daily limit 10 videos exceeded', expected=True) + + title = self._search_regex( + r'<div id="viewvideo-title">([^<]+)</div>', webpage, 'title') + title = title.replace('\n', '') + + # get real url + file_id = self._search_regex( + r'so.addVariable\(\'file\',\'(\d+)\'', webpage, 'file id') + sec_code = self._search_regex( + r'so.addVariable\(\'seccode\',\'([^\']+)\'', webpage, 'sec code') + max_vid = self._search_regex( + r'so.addVariable\(\'max_vid\',\'(\d+)\'', webpage, 'max vid') + url_params = compat_urllib_parse.urlencode({ + 'VID': file_id, + 'mp4': '1', + 'seccode': sec_code, + 'max_vid': max_vid, + }) + info_cn = self._download_webpage( + 'http://91porn.com/getfile.php?' + url_params, video_id, + 'get real video url') + video_url = self._search_regex(r'file=([^&]+)&', info_cn, 'url') + + duration = parse_duration(self._search_regex( + r'时长:\s*</span>\s*(\d+:\d+)', webpage, 'duration', fatal=False)) + + comment_count = int_or_none(self._search_regex( + r'留言:\s*</span>\s*(\d+)', webpage, 'comment count', fatal=False)) + + return { + 'id': video_id, + 'title': title, + 'url': video_url, + 'duration': duration, + 'comment_count': comment_count, + } diff --git a/youtube_dl/extractor/pornhub.py b/youtube_dl/extractor/pornhub.py index 0c8b731..daa284e 100644 --- a/youtube_dl/extractor/pornhub.py +++ b/youtube_dl/extractor/pornhub.py @@ -71,7 +71,8 @@ class PornHubIE(InfoExtractor): video_urls = list(map(compat_urllib_parse.unquote, re.findall(r'"quality_[0-9]{3}p":"([^"]+)', webpage))) if webpage.find('"encrypted":true') != -1: - password = compat_urllib_parse.unquote_plus(self._html_search_regex(r'"video_title":"([^"]+)', webpage, 'password')) + password = compat_urllib_parse.unquote_plus( + self._search_regex(r'"video_title":"([^"]+)', webpage, 'password')) video_urls = list(map(lambda s: aes_decrypt_text(s, password, 32).decode('utf-8'), video_urls)) formats = [] diff --git a/youtube_dl/extractor/prosiebensat1.py b/youtube_dl/extractor/prosiebensat1.py index 7cc7996..255d4ab 100644 --- a/youtube_dl/extractor/prosiebensat1.py +++ b/youtube_dl/extractor/prosiebensat1.py @@ -17,7 +17,7 @@ from ..utils import ( class ProSiebenSat1IE(InfoExtractor): IE_NAME = 'prosiebensat1' IE_DESC = 'ProSiebenSat.1 Digital' - _VALID_URL = r'https?://(?:www\.)?(?:(?:prosieben|prosiebenmaxx|sixx|sat1|kabeleins|ran|the-voice-of-germany)\.de|fem\.com)/(?P<id>.+)' + _VALID_URL = r'https?://(?:www\.)?(?:(?:prosieben|prosiebenmaxx|sixx|sat1|kabeleins|the-voice-of-germany)\.(?:de|at)|ran\.de|fem\.com)/(?P<id>.+)' _TESTS = [ { diff --git a/youtube_dl/extractor/qqmusic.py b/youtube_dl/extractor/qqmusic.py index 1311382..f773332 100644 --- a/youtube_dl/extractor/qqmusic.py +++ b/youtube_dl/extractor/qqmusic.py @@ -9,7 +9,6 @@ from .common import InfoExtractor from ..utils import ( strip_jsonp, unescapeHTML, - js_to_json, ) from ..compat import compat_urllib_request @@ -26,7 +25,7 @@ class QQMusicIE(InfoExtractor): 'title': '可惜没如果', 'upload_date': '20141227', 'creator': '林俊杰', - 'description': 'md5:4348ff1dd24036906baa7b6f973f8d30', + 'description': 'md5:d327722d0361576fde558f1ac68a7065', } }] @@ -60,6 +59,8 @@ class QQMusicIE(InfoExtractor): lrc_content = self._html_search_regex( r'<div class="content" id="lrc_content"[^<>]*>([^<>]+)</div>', detail_info_page, 'LRC lyrics', default=None) + if lrc_content: + lrc_content = lrc_content.replace('\\n', '\n') guid = self.m_r_get_ruin() @@ -179,60 +180,49 @@ class QQMusicToplistIE(QQPlaylistBaseIE): _VALID_URL = r'http://y\.qq\.com/#type=toplist&p=(?P<id>(top|global)_[0-9]+)' _TESTS = [{ - 'url': 'http://y.qq.com/#type=toplist&p=global_12', + 'url': 'http://y.qq.com/#type=toplist&p=global_123', 'info_dict': { - 'id': 'global_12', - 'title': 'itunes榜', + 'id': 'global_123', + 'title': '美国iTunes榜', }, 'playlist_count': 10, }, { - 'url': 'http://y.qq.com/#type=toplist&p=top_6', + 'url': 'http://y.qq.com/#type=toplist&p=top_3', 'info_dict': { - 'id': 'top_6', + 'id': 'top_3', 'title': 'QQ音乐巅峰榜·欧美', + 'description': 'QQ音乐巅峰榜·欧美根据用户收听行为自动生成,集结当下最流行的欧美新歌!:更新时间:每周四22点|统' + '计周期:一周(上周四至本周三)|统计对象:三个月内发行的欧美歌曲|统计数量:100首|统计算法:根据' + '歌曲在一周内的有效播放次数,由高到低取前100名(同一歌手最多允许5首歌曲同时上榜)|有效播放次数:' + '登录用户完整播放一首歌曲,记为一次有效播放;同一用户收听同一首歌曲,每天记录为1次有效播放' }, 'playlist_count': 100, }, { - 'url': 'http://y.qq.com/#type=toplist&p=global_5', + 'url': 'http://y.qq.com/#type=toplist&p=global_106', 'info_dict': { - 'id': 'global_5', - 'title': '韩国mnet排行榜', + 'id': 'global_106', + 'title': '韩国Mnet榜', }, 'playlist_count': 50, }] - @staticmethod - def strip_qq_jsonp(code): - return js_to_json(re.sub(r'^MusicJsonCallback\((.*?)\)/\*.+?\*/$', r'\1', code)) - def _real_extract(self, url): list_id = self._match_id(url) list_type, num_id = list_id.split("_") - list_page = self._download_webpage( - "http://y.qq.com/y/static/toplist/index/%s.html" % list_id, - list_id, 'Download toplist page') - - entries = [] - if list_type == 'top': - jsonp_url = "http://y.qq.com/y/static/toplist/json/top/%s/1.js" % num_id - else: - jsonp_url = "http://y.qq.com/y/static/toplist/json/global/%s/1_1.js" % num_id - toplist_json = self._download_json( - jsonp_url, list_id, note='Retrieve toplist json', - errnote='Unable to get toplist json', transform_source=self.strip_qq_jsonp) - - for song in toplist_json['l']: - s = song['s'] - song_mid = s.split("|")[20] - entries.append(self.url_result( - 'http://y.qq.com/#type=song&mid=' + song_mid, 'QQMusic', - song_mid)) + 'http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?type=%s&topid=%s&format=json' + % (list_type, num_id), + list_id, 'Download toplist page') - list_name = self._html_search_regex( - r'<h2 id="top_name">([^\']+)</h2>', list_page, 'top list name', - default=None) + entries = [ + self.url_result( + 'http://y.qq.com/#type=song&mid=' + song['data']['songmid'], 'QQMusic', song['data']['songmid'] + ) for song in toplist_json['songlist'] + ] - return self.playlist_result(entries, list_id, list_name) + topinfo = toplist_json.get('topinfo', {}) + list_name = topinfo.get('ListName') + list_description = topinfo.get('info') + return self.playlist_result(entries, list_id, list_name, list_description) diff --git a/youtube_dl/extractor/rtbf.py b/youtube_dl/extractor/rtbf.py index dce64e1..5a381d9 100644 --- a/youtube_dl/extractor/rtbf.py +++ b/youtube_dl/extractor/rtbf.py @@ -1,10 +1,11 @@ # coding: utf-8 from __future__ import unicode_literals -import re -import json - from .common import InfoExtractor +from ..utils import ( + int_or_none, + unescapeHTML, +) class RTBFIE(InfoExtractor): @@ -16,25 +17,24 @@ class RTBFIE(InfoExtractor): 'id': '1921274', 'ext': 'mp4', 'title': 'Les Diables au coeur (épisode 2)', - 'description': 'Football - Diables Rouges', 'duration': 3099, - 'timestamp': 1398456336, - 'upload_date': '20140425', } } def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('id') + video_id = self._match_id(url) - page = self._download_webpage('https://www.rtbf.be/video/embed?id=%s' % video_id, video_id) + webpage = self._download_webpage( + 'http://www.rtbf.be/video/embed?id=%s' % video_id, video_id) - data = json.loads(self._html_search_regex( - r'<div class="js-player-embed(?: player-embed)?" data-video="([^"]+)"', page, 'data video'))['data'] + data = self._parse_json( + unescapeHTML(self._search_regex( + r'data-video="([^"]+)"', webpage, 'data video')), + video_id) video_url = data.get('downloadUrl') or data.get('url') - if data['provider'].lower() == 'youtube': + if data.get('provider').lower() == 'youtube': return self.url_result(video_url, 'Youtube') return { @@ -42,8 +42,8 @@ class RTBFIE(InfoExtractor): 'url': video_url, 'title': data['title'], 'description': data.get('description') or data.get('subtitle'), - 'thumbnail': data['thumbnail']['large'], + 'thumbnail': data.get('thumbnail'), 'duration': data.get('duration') or data.get('realDuration'), - 'timestamp': data['created'], - 'view_count': data['viewCount'], + 'timestamp': int_or_none(data.get('created')), + 'view_count': int_or_none(data.get('viewCount')), } diff --git a/youtube_dl/extractor/rtlnow.py b/youtube_dl/extractor/rtlnow.py deleted file mode 100644 index 785a804..0000000 --- a/youtube_dl/extractor/rtlnow.py +++ /dev/null @@ -1,174 +0,0 @@ -# encoding: utf-8 -from __future__ import unicode_literals - -import re - -from .common import InfoExtractor -from ..utils import ( - ExtractorError, - clean_html, - unified_strdate, - int_or_none, -) - - -class RTLnowIE(InfoExtractor): - """Information Extractor for RTL NOW, RTL2 NOW, RTL NITRO, SUPER RTL NOW, VOX NOW and n-tv NOW""" - _VALID_URL = r'''(?x) - (?:https?://)? - (?P<url> - (?P<domain> - rtl-now\.rtl\.de| - rtl2now\.rtl2\.de| - (?:www\.)?voxnow\.de| - (?:www\.)?rtlnitronow\.de| - (?:www\.)?superrtlnow\.de| - (?:www\.)?n-tvnow\.de) - /+[a-zA-Z0-9-]+/[a-zA-Z0-9-]+\.php\? - (?:container_id|film_id)=(?P<video_id>[0-9]+)& - player=1(?:&season=[0-9]+)?(?:&.*)? - )''' - - _TESTS = [ - { - 'url': 'http://rtl-now.rtl.de/ahornallee/folge-1.php?film_id=90419&player=1&season=1', - 'info_dict': { - 'id': '90419', - 'ext': 'flv', - 'title': 'Ahornallee - Folge 1 - Der Einzug', - 'description': 'md5:ce843b6b5901d9a7f7d04d1bbcdb12de', - 'upload_date': '20070416', - 'duration': 1685, - }, - 'params': { - 'skip_download': True, - }, - 'skip': 'Only works from Germany', - }, - { - 'url': 'http://rtl2now.rtl2.de/aerger-im-revier/episode-15-teil-1.php?film_id=69756&player=1&season=2&index=5', - 'info_dict': { - 'id': '69756', - 'ext': 'flv', - 'title': 'Ärger im Revier - Ein junger Ladendieb, ein handfester Streit u.a.', - 'description': 'md5:3fb247005ed21a935ffc82b7dfa70cf0', - 'thumbnail': 'http://autoimg.static-fra.de/rtl2now/219850/1500x1500/image2.jpg', - 'upload_date': '20120519', - 'duration': 1245, - }, - 'params': { - 'skip_download': True, - }, - 'skip': 'Only works from Germany', - }, - { - 'url': 'http://www.voxnow.de/voxtours/suedafrika-reporter-ii.php?film_id=13883&player=1&season=17', - 'info_dict': { - 'id': '13883', - 'ext': 'flv', - 'title': 'Voxtours - Südafrika-Reporter II', - 'description': 'md5:de7f8d56be6fd4fed10f10f57786db00', - 'upload_date': '20090627', - 'duration': 1800, - }, - 'params': { - 'skip_download': True, - }, - }, - { - 'url': 'http://superrtlnow.de/medicopter-117/angst.php?film_id=99205&player=1', - 'info_dict': { - 'id': '99205', - 'ext': 'flv', - 'title': 'Medicopter 117 - Angst!', - 'description': 're:^Im Therapiezentrum \'Sonnalm\' kommen durch eine Unachtsamkeit die für die B.handlung mit Phobikern gehaltenen Voglespinnen frei\. Eine Ausreißerin', - 'thumbnail': 'http://autoimg.static-fra.de/superrtlnow/287529/1500x1500/image2.jpg', - 'upload_date': '20080928', - 'duration': 2691, - }, - 'params': { - 'skip_download': True, - }, - }, - { - 'url': 'http://rtl-now.rtl.de/der-bachelor/folge-4.php?film_id=188729&player=1&season=5', - 'info_dict': { - 'id': '188729', - 'ext': 'flv', - 'upload_date': '20150204', - 'description': 'md5:5e1ce23095e61a79c166d134b683cecc', - 'title': 'Der Bachelor - Folge 4', - } - }, { - 'url': 'http://www.n-tvnow.de/deluxe-alles-was-spass-macht/thema-ua-luxushotel-fuer-vierbeiner.php?container_id=153819&player=1&season=0', - 'only_matching': True, - }, - ] - - def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_page_url = 'http://%s/' % mobj.group('domain') - video_id = mobj.group('video_id') - - webpage = self._download_webpage('http://' + mobj.group('url'), video_id) - - mobj = re.search(r'(?s)<div style="margin-left: 20px; font-size: 13px;">(.*?)<div id="playerteaser">', webpage) - if mobj: - raise ExtractorError(clean_html(mobj.group(1)), expected=True) - - title = self._og_search_title(webpage) - description = self._og_search_description(webpage) - thumbnail = self._og_search_thumbnail(webpage, default=None) - - upload_date = unified_strdate(self._html_search_meta('uploadDate', webpage, 'upload date')) - - mobj = re.search(r'<meta itemprop="duration" content="PT(?P<seconds>\d+)S" />', webpage) - duration = int(mobj.group('seconds')) if mobj else None - - playerdata_url = self._html_search_regex( - r"'playerdata': '(?P<playerdata_url>[^']+)'", webpage, 'playerdata_url') - - playerdata = self._download_xml(playerdata_url, video_id, 'Downloading player data XML') - - videoinfo = playerdata.find('./playlist/videoinfo') - - formats = [] - for filename in videoinfo.findall('filename'): - mobj = re.search(r'(?P<url>rtmpe://(?:[^/]+/){2})(?P<play_path>.+)', filename.text) - if mobj: - fmt = { - 'url': mobj.group('url'), - 'play_path': 'mp4:' + mobj.group('play_path'), - 'page_url': video_page_url, - 'player_url': video_page_url + 'includes/vodplayer.swf', - } - else: - mobj = re.search(r'.*/(?P<hoster>[^/]+)/videos/(?P<play_path>.+)\.f4m', filename.text) - if mobj: - fmt = { - 'url': 'rtmpe://fms.rtl.de/' + mobj.group('hoster'), - 'play_path': 'mp4:' + mobj.group('play_path'), - 'page_url': url, - 'player_url': video_page_url + 'includes/vodplayer.swf', - } - else: - fmt = { - 'url': filename.text, - } - fmt.update({ - 'width': int_or_none(filename.get('width')), - 'height': int_or_none(filename.get('height')), - 'vbr': int_or_none(filename.get('bitrate')), - 'ext': 'flv', - }) - formats.append(fmt) - - return { - 'id': video_id, - 'title': title, - 'description': description, - 'thumbnail': thumbnail, - 'upload_date': upload_date, - 'duration': duration, - 'formats': formats, - } diff --git a/youtube_dl/extractor/rts.py b/youtube_dl/extractor/rts.py index d098111..9fbe239 100644 --- a/youtube_dl/extractor/rts.py +++ b/youtube_dl/extractor/rts.py @@ -190,6 +190,7 @@ class RTSIE(InfoExtractor): 'tbr': media['rate'] or extract_bitrate(media['url']), } for media in info['media'] if media.get('rate')]) + self._check_formats(formats, video_id) self._sort_formats(formats) return { diff --git a/youtube_dl/extractor/rtve.py b/youtube_dl/extractor/rtve.py index 8493001..82cd98a 100644 --- a/youtube_dl/extractor/rtve.py +++ b/youtube_dl/extractor/rtve.py @@ -17,7 +17,7 @@ from ..utils import ( def _decrypt_url(png): - encrypted_data = base64.b64decode(png) + encrypted_data = base64.b64decode(png.encode('utf-8')) text_index = encrypted_data.find(b'tEXt') text_chunk = encrypted_data[text_index - 4:] length = struct_unpack('!I', text_chunk[:4])[0] diff --git a/youtube_dl/extractor/rutv.py b/youtube_dl/extractor/rutv.py index 5560463..d9df068 100644 --- a/youtube_dl/extractor/rutv.py +++ b/youtube_dl/extractor/rutv.py @@ -104,7 +104,7 @@ class RUTVIE(InfoExtractor): @classmethod def _extract_url(cls, webpage): mobj = re.search( - r'<iframe[^>]+?src=(["\'])(?P<url>https?://player\.rutv\.ru/(?:iframe/(?:swf|video|live)/id|index/iframe/cast_id)/.+?)\1', webpage) + r'<iframe[^>]+?src=(["\'])(?P<url>https?://player\.(?:rutv\.ru|vgtrk\.com)/(?:iframe/(?:swf|video|live)/id|index/iframe/cast_id)/.+?)\1', webpage) if mobj: return mobj.group('url') diff --git a/youtube_dl/extractor/sbs.py b/youtube_dl/extractor/sbs.py index b8775c2..d4bd1a0 100644 --- a/youtube_dl/extractor/sbs.py +++ b/youtube_dl/extractor/sbs.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -import json import re from .common import InfoExtractor from ..utils import ( @@ -33,16 +32,18 @@ class SBSIE(InfoExtractor): }] def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('id') + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) - release_urls_json = js_to_json(self._search_regex( + player = self._search_regex( r'(?s)playerParams\.releaseUrls\s*=\s*(\{.*?\n\});\n', - webpage, '')) - release_urls = json.loads(release_urls_json) - theplatform_url = ( - release_urls.get('progressive') or release_urls.get('standard')) + webpage, 'player') + player = re.sub(r"'\s*\+\s*[\da-zA-Z_]+\s*\+\s*'", '', player) + + release_urls = self._parse_json(js_to_json(player), video_id) + + theplatform_url = release_urls.get('progressive') or release_urls['standard'] title = remove_end(self._og_search_title(webpage), ' (The Feed)') description = self._html_search_meta('description', webpage) @@ -52,7 +53,6 @@ class SBSIE(InfoExtractor): '_type': 'url_transparent', 'id': video_id, 'url': theplatform_url, - 'title': title, 'description': description, 'thumbnail': thumbnail, diff --git a/youtube_dl/extractor/senateisvp.py b/youtube_dl/extractor/senateisvp.py index d3b8a1b..9c53704 100644 --- a/youtube_dl/extractor/senateisvp.py +++ b/youtube_dl/extractor/senateisvp.py @@ -48,7 +48,7 @@ class SenateISVPIE(InfoExtractor): ["arch", "", "http://ussenate-f.akamaihd.net/"] ] _IE_NAME = 'senate.gov' - _VALID_URL = r'http://www\.senate\.gov/isvp/\?(?P<qs>.+)' + _VALID_URL = r'http://www\.senate\.gov/isvp/?\?(?P<qs>.+)' _TESTS = [{ 'url': 'http://www.senate.gov/isvp/?comm=judiciary&type=live&stt=&filename=judiciary031715&auto_play=false&wmode=transparent&poster=http%3A%2F%2Fwww.judiciary.senate.gov%2Fthemes%2Fjudiciary%2Fimages%2Fvideo-poster-flash-fit.png', 'info_dict': { @@ -72,12 +72,16 @@ class SenateISVPIE(InfoExtractor): 'ext': 'mp4', 'title': 'Integrated Senate Video Player' } + }, { + # From http://www.c-span.org/video/?96791-1 + 'url': 'http://www.senate.gov/isvp?type=live&comm=banking&filename=banking012715', + 'only_matching': True, }] @staticmethod def _search_iframe_url(webpage): mobj = re.search( - r"<iframe[^>]+src=['\"](?P<url>http://www\.senate\.gov/isvp/\?[^'\"]+)['\"]", + r"<iframe[^>]+src=['\"](?P<url>http://www\.senate\.gov/isvp/?\?[^'\"]+)['\"]", webpage) if mobj: return mobj.group('url') diff --git a/youtube_dl/extractor/shared.py b/youtube_dl/extractor/shared.py index 26ced71..9f3e944 100644 --- a/youtube_dl/extractor/shared.py +++ b/youtube_dl/extractor/shared.py @@ -47,7 +47,7 @@ class SharedIE(InfoExtractor): video_url = self._html_search_regex( r'data-url="([^"]+)"', video_page, 'video URL') title = base64.b64decode(self._html_search_meta( - 'full:title', webpage, 'title')).decode('utf-8') + 'full:title', webpage, 'title').encode('utf-8')).decode('utf-8') filesize = int_or_none(self._html_search_meta( 'full:size', webpage, 'file size', fatal=False)) thumbnail = self._html_search_regex( diff --git a/youtube_dl/extractor/sockshare.py b/youtube_dl/extractor/sockshare.py deleted file mode 100644 index b5fa6f1..0000000 --- a/youtube_dl/extractor/sockshare.py +++ /dev/null @@ -1,83 +0,0 @@ -# coding: utf-8 -from __future__ import unicode_literals - -import re - -from ..compat import ( - compat_urllib_parse, - compat_urllib_request, -) -from ..utils import ( - determine_ext, - ExtractorError, -) - -from .common import InfoExtractor - - -class SockshareIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?sockshare\.com/file/(?P<id>[0-9A-Za-z]+)' - _FILE_DELETED_REGEX = r'This file doesn\'t exist, or has been removed\.</div>' - _TEST = { - 'url': 'http://www.sockshare.com/file/437BE28B89D799D7', - 'md5': '9d0bf1cfb6dbeaa8d562f6c97506c5bd', - 'info_dict': { - 'id': '437BE28B89D799D7', - 'title': 'big_buck_bunny_720p_surround.avi', - 'ext': 'avi', - } - } - - def _real_extract(self, url): - video_id = self._match_id(url) - url = 'http://sockshare.com/file/%s' % video_id - webpage = self._download_webpage(url, video_id) - - if re.search(self._FILE_DELETED_REGEX, webpage) is not None: - raise ExtractorError('Video %s does not exist' % video_id, - expected=True) - - confirm_hash = self._html_search_regex(r'''(?x)<input\s+ - type="hidden"\s+ - value="([^"]*)"\s+ - name="hash" - ''', webpage, 'hash') - - fields = { - "hash": confirm_hash.encode('utf-8'), - "confirm": "Continue as Free User" - } - - post = compat_urllib_parse.urlencode(fields) - req = compat_urllib_request.Request(url, post) - # Apparently, this header is required for confirmation to work. - req.add_header('Host', 'www.sockshare.com') - req.add_header('Content-type', 'application/x-www-form-urlencoded') - - webpage = self._download_webpage( - req, video_id, 'Downloading video page') - - video_url = self._html_search_regex( - r'<a href="([^"]*)".+class="download_file_link"', - webpage, 'file url') - video_url = "http://www.sockshare.com" + video_url - title = self._html_search_regex(( - r'<h1>(.+)<strong>', - r'var name = "([^"]+)";'), - webpage, 'title', default=None) - thumbnail = self._html_search_regex( - r'<img\s+src="([^"]*)".+?name="bg"', - webpage, 'thumbnail', default=None) - - formats = [{ - 'format_id': 'sd', - 'url': video_url, - 'ext': determine_ext(title), - }] - - return { - 'id': video_id, - 'title': title, - 'thumbnail': thumbnail, - 'formats': formats, - } diff --git a/youtube_dl/extractor/sohu.py b/youtube_dl/extractor/sohu.py index eab4adf..29bd9ce 100644 --- a/youtube_dl/extractor/sohu.py +++ b/youtube_dl/extractor/sohu.py @@ -23,9 +23,7 @@ class SohuIE(InfoExtractor): 'ext': 'mp4', 'title': 'MV:Far East Movement《The Illest》', }, - 'params': { - 'cn_verification_proxy': 'proxy.uku.im:8888' - } + 'skip': 'On available in China', }, { 'url': 'http://tv.sohu.com/20150305/n409385080.shtml', 'md5': 'ac9a5d322b4bf9ae184d53e4711e4f1a', diff --git a/youtube_dl/extractor/soompi.py b/youtube_dl/extractor/soompi.py new file mode 100644 index 0000000..5da66ca --- /dev/null +++ b/youtube_dl/extractor/soompi.py @@ -0,0 +1,146 @@ +# encoding: utf-8 +from __future__ import unicode_literals + +import re + +from .crunchyroll import CrunchyrollIE + +from .common import InfoExtractor +from ..compat import compat_HTTPError +from ..utils import ( + ExtractorError, + int_or_none, + remove_start, + xpath_text, +) + + +class SoompiBaseIE(InfoExtractor): + def _get_episodes(self, webpage, episode_filter=None): + episodes = self._parse_json( + self._search_regex( + r'VIDEOS\s*=\s*(\[.+?\]);', webpage, 'episodes JSON'), + None) + return list(filter(episode_filter, episodes)) + + +class SoompiIE(SoompiBaseIE, CrunchyrollIE): + IE_NAME = 'soompi' + _VALID_URL = r'https?://tv\.soompi\.com/(?:en/)?watch/(?P<id>[0-9]+)' + _TESTS = [{ + 'url': 'http://tv.soompi.com/en/watch/29235', + 'info_dict': { + 'id': '29235', + 'ext': 'mp4', + 'title': 'Episode 1096', + 'description': '2015-05-20' + }, + 'params': { + 'skip_download': True, + }, + }] + + def _get_episode(self, webpage, video_id): + return self._get_episodes(webpage, lambda x: x['id'] == video_id)[0] + + def _get_subtitles(self, config, video_id): + sub_langs = {} + for subtitle in config.findall('./{default}preload/subtitles/subtitle'): + sub_langs[subtitle.attrib['id']] = subtitle.attrib['title'] + + subtitles = {} + for s in config.findall('./{default}preload/subtitle'): + lang_code = sub_langs.get(s.attrib['id']) + if not lang_code: + continue + sub_id = s.get('id') + data = xpath_text(s, './data', 'data') + iv = xpath_text(s, './iv', 'iv') + if not id or not iv or not data: + continue + subtitle = self._decrypt_subtitles(data, iv, sub_id).decode('utf-8') + subtitles[lang_code] = self._extract_subtitles(subtitle) + return subtitles + + def _real_extract(self, url): + video_id = self._match_id(url) + + try: + webpage = self._download_webpage( + url, video_id, 'Downloading episode page') + except ExtractorError as ee: + if isinstance(ee.cause, compat_HTTPError) and ee.cause.code == 403: + webpage = ee.cause.read() + block_message = self._html_search_regex( + r'(?s)<div class="block-message">(.+?)</div>', webpage, + 'block message', default=None) + if block_message: + raise ExtractorError(block_message, expected=True) + raise + + formats = [] + config = None + for format_id in re.findall(r'\?quality=([0-9a-zA-Z]+)', webpage): + config = self._download_xml( + 'http://tv.soompi.com/en/show/_/%s-config.xml?mode=hls&quality=%s' % (video_id, format_id), + video_id, 'Downloading %s XML' % format_id) + m3u8_url = xpath_text( + config, './{default}preload/stream_info/file', + '%s m3u8 URL' % format_id) + if not m3u8_url: + continue + formats.extend(self._extract_m3u8_formats( + m3u8_url, video_id, 'mp4', m3u8_id=format_id)) + self._sort_formats(formats) + + episode = self._get_episode(webpage, video_id) + + title = episode['name'] + description = episode.get('description') + duration = int_or_none(episode.get('duration')) + + thumbnails = [{ + 'id': thumbnail_id, + 'url': thumbnail_url, + } for thumbnail_id, thumbnail_url in episode.get('img_url', {}).items()] + + subtitles = self.extract_subtitles(config, video_id) + + return { + 'id': video_id, + 'title': title, + 'description': description, + 'thumbnails': thumbnails, + 'duration': duration, + 'formats': formats, + 'subtitles': subtitles + } + + +class SoompiShowIE(SoompiBaseIE): + IE_NAME = 'soompi:show' + _VALID_URL = r'https?://tv\.soompi\.com/en/shows/(?P<id>[0-9a-zA-Z\-_]+)' + _TESTS = [{ + 'url': 'http://tv.soompi.com/en/shows/liar-game', + 'info_dict': { + 'id': 'liar-game', + 'title': 'Liar Game', + 'description': 'md5:52c02bce0c1a622a95823591d0589b66', + }, + 'playlist_count': 14, + }] + + def _real_extract(self, url): + show_id = self._match_id(url) + + webpage = self._download_webpage( + url, show_id, 'Downloading show page') + + title = remove_start(self._og_search_title(webpage), 'SoompiTV | ') + description = self._og_search_description(webpage) + + entries = [ + self.url_result('http://tv.soompi.com/en/watch/%s' % episode['id'], 'Soompi') + for episode in self._get_episodes(webpage)] + + return self.playlist_result(entries, show_id, title, description) diff --git a/youtube_dl/extractor/spankwire.py b/youtube_dl/extractor/spankwire.py index b936202..06d6e66 100644 --- a/youtube_dl/extractor/spankwire.py +++ b/youtube_dl/extractor/spankwire.py @@ -71,7 +71,7 @@ class SpankwireIE(InfoExtractor): compat_urllib_parse.unquote, re.findall(r'playerData\.cdnPath[0-9]{3,}\s*=\s*["\']([^"\']+)["\']', webpage))) if webpage.find('flashvars\.encrypted = "true"') != -1: - password = self._html_search_regex( + password = self._search_regex( r'flashvars\.video_title = "([^"]+)', webpage, 'password').replace('+', ' ') video_urls = list(map( diff --git a/youtube_dl/extractor/spiegeltv.py b/youtube_dl/extractor/spiegeltv.py index 98cf92d..359722a 100644 --- a/youtube_dl/extractor/spiegeltv.py +++ b/youtube_dl/extractor/spiegeltv.py @@ -51,9 +51,9 @@ class SpiegeltvIE(InfoExtractor): is_wide = media_json['is_wide'] server_json = self._download_json( - 'http://www.spiegel.tv/streaming_servers/', video_id, - note='Downloading server information') - server = server_json[0]['endpoint'] + 'http://spiegeltv-prod-static.s3.amazonaws.com/projectConfigs/projectConfig.json', + video_id, note='Downloading server information') + server = server_json['streamingserver'][0]['endpoint'] thumbnails = [] for image in media_json['images']: @@ -76,5 +76,6 @@ class SpiegeltvIE(InfoExtractor): 'ext': 'm4v', 'description': description, 'duration': duration, - 'thumbnails': thumbnails + 'thumbnails': thumbnails, + 'rtmp_live': True, } diff --git a/youtube_dl/extractor/sportbox.py b/youtube_dl/extractor/sportbox.py index becdf65..86d509a 100644 --- a/youtube_dl/extractor/sportbox.py +++ b/youtube_dl/extractor/sportbox.py @@ -4,37 +4,36 @@ from __future__ import unicode_literals import re from .common import InfoExtractor +from ..compat import compat_urlparse from ..utils import ( - parse_duration, - parse_iso8601, + unified_strdate, ) class SportBoxIE(InfoExtractor): - _VALID_URL = r'https?://news\.sportbox\.ru/Vidy_sporta/(?:[^/]+/)+spbvideo_NI\d+_(?P<display_id>.+)' - _TESTS = [ - { - 'url': 'http://news.sportbox.ru/Vidy_sporta/Avtosport/Rossijskij/spbvideo_NI483529_Gonka-2-zaezd-Obyedinenniy-2000-klassi-Turing-i-S', - 'md5': 'ff56a598c2cf411a9a38a69709e97079', - 'info_dict': { - 'id': '80822', - 'ext': 'mp4', - 'title': 'Гонка 2 заезд ««Объединенный 2000»: классы Туринг и Супер-продакшн', - 'description': 'md5:81715fa9c4ea3d9e7915dc8180c778ed', - 'thumbnail': 're:^https?://.*\.jpg$', - 'timestamp': 1411896237, - 'upload_date': '20140928', - 'duration': 4846, - }, - 'params': { - # m3u8 download - 'skip_download': True, - }, - }, { - 'url': 'http://news.sportbox.ru/Vidy_sporta/billiard/spbvideo_NI486287_CHempionat-mira-po-dinamichnoy-piramide-4', - 'only_matching': True, - } - ] + _VALID_URL = r'https?://news\.sportbox\.ru/(?:[^/]+/)+spbvideo_NI\d+_(?P<display_id>.+)' + _TESTS = [{ + 'url': 'http://news.sportbox.ru/Vidy_sporta/Avtosport/Rossijskij/spbvideo_NI483529_Gonka-2-zaezd-Obyedinenniy-2000-klassi-Turing-i-S', + 'md5': 'ff56a598c2cf411a9a38a69709e97079', + 'info_dict': { + 'id': '80822', + 'ext': 'mp4', + 'title': 'Гонка 2 заезд ««Объединенный 2000»: классы Туринг и Супер-продакшн', + 'description': 'md5:3d72dc4a006ab6805d82f037fdc637ad', + 'thumbnail': 're:^https?://.*\.jpg$', + 'upload_date': '20140928', + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + 'url': 'http://news.sportbox.ru/Vidy_sporta/billiard/spbvideo_NI486287_CHempionat-mira-po-dinamichnoy-piramide-4', + 'only_matching': True, + }, { + 'url': 'http://news.sportbox.ru/video/no_ads/spbvideo_NI536574_V_Novorossijske_proshel_detskij_turnir_Pole_slavy_bojevoj?ci=211355', + 'only_matching': True, + }] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) @@ -42,35 +41,75 @@ class SportBoxIE(InfoExtractor): webpage = self._download_webpage(url, display_id) - video_id = self._search_regex( - r'src="/vdl/player/media/(\d+)"', webpage, 'video id') + player = self._search_regex( + r'src="/?(vdl/player/[^"]+)"', webpage, 'player') + + title = self._html_search_regex( + [r'"nodetitle"\s*:\s*"([^"]+)"', r'class="node-header_{1,2}title">([^<]+)'], + webpage, 'title') + description = self._og_search_description(webpage) or self._html_search_meta( + 'description', webpage, 'description') + thumbnail = self._og_search_thumbnail(webpage) + upload_date = unified_strdate(self._html_search_meta( + 'dateCreated', webpage, 'upload date')) + + return { + '_type': 'url_transparent', + 'url': compat_urlparse.urljoin(url, '/%s' % player), + 'display_id': display_id, + 'title': title, + 'description': description, + 'thumbnail': thumbnail, + 'upload_date': upload_date, + } - player = self._download_webpage( - 'http://news.sportbox.ru/vdl/player/media/%s' % video_id, - display_id, 'Downloading player webpage') + +class SportBoxEmbedIE(InfoExtractor): + _VALID_URL = r'https?://news\.sportbox\.ru/vdl/player(?:/[^/]+/|\?.*?\bn?id=)(?P<id>\d+)' + _TESTS = [{ + 'url': 'http://news.sportbox.ru/vdl/player/ci/211355', + 'info_dict': { + 'id': '211355', + 'ext': 'mp4', + 'title': 'В Новороссийске прошел детский турнир «Поле славы боевой»', + 'thumbnail': 're:^https?://.*\.jpg$', + }, + 'params': { + # m3u8 download + 'skip_download': True, + }, + }, { + 'url': 'http://news.sportbox.ru/vdl/player?nid=370908&only_player=1&autostart=false&playeri=2&height=340&width=580', + 'only_matching': True, + }] + + @staticmethod + def _extract_urls(webpage): + return re.findall( + r'<iframe[^>]+src="(https?://news\.sportbox\.ru/vdl/player[^"]+)"', + webpage) + + def _real_extract(self, url): + video_id = self._match_id(url) + + webpage = self._download_webpage(url, video_id) hls = self._search_regex( - r"var\s+original_hls_file\s*=\s*'([^']+)'", player, 'hls file') + r"sportboxPlayer\.jwplayer_common_params\.file\s*=\s*['\"]([^'\"]+)['\"]", + webpage, 'hls file') - formats = self._extract_m3u8_formats(hls, display_id, 'mp4') + formats = self._extract_m3u8_formats(hls, video_id, 'mp4') - title = self._html_search_regex( - r'<h1 itemprop="name">([^<]+)</h1>', webpage, 'title') - description = self._html_search_regex( - r'(?s)<div itemprop="description">(.+?)</div>', webpage, 'description', fatal=False) - thumbnail = self._og_search_thumbnail(webpage) - timestamp = parse_iso8601(self._search_regex( - r'<span itemprop="uploadDate">([^<]+)</span>', webpage, 'timestamp', fatal=False)) - duration = parse_duration(self._html_search_regex( - r'<meta itemprop="duration" content="PT([^"]+)">', webpage, 'duration', fatal=False)) + title = self._search_regex( + r'sportboxPlayer\.node_title\s*=\s*"([^"]+)"', webpage, 'title') + + thumbnail = self._search_regex( + r'sportboxPlayer\.jwplayer_common_params\.image\s*=\s*"([^"]+)"', + webpage, 'thumbnail', default=None) return { 'id': video_id, - 'display_id': display_id, 'title': title, - 'description': description, 'thumbnail': thumbnail, - 'timestamp': timestamp, - 'duration': duration, 'formats': formats, } diff --git a/youtube_dl/extractor/teamcoco.py b/youtube_dl/extractor/teamcoco.py index 56be526..b2a4b1f 100644 --- a/youtube_dl/extractor/teamcoco.py +++ b/youtube_dl/extractor/teamcoco.py @@ -10,6 +10,7 @@ from .common import InfoExtractor from ..utils import ( ExtractorError, qualities, + determine_ext, ) from ..compat import compat_ord @@ -108,7 +109,7 @@ class TeamcocoIE(InfoExtractor): formats = [] get_quality = qualities(['500k', '480p', '1000k', '720p', '1080p']) for filed in data['files']: - if filed['type'] == 'hls': + if determine_ext(filed['url']) == 'm3u8': formats.extend(self._extract_m3u8_formats( filed['url'], video_id, ext='mp4')) else: diff --git a/youtube_dl/extractor/telecinco.py b/youtube_dl/extractor/telecinco.py index 251a686..a0c744f 100644 --- a/youtube_dl/extractor/telecinco.py +++ b/youtube_dl/extractor/telecinco.py @@ -16,6 +16,10 @@ class TelecincoIE(MiTeleIE): 'title': 'Con Martín Berasategui, hacer un bacalao al ...', 'duration': 662, }, + 'params': { + # m3u8 download + 'skip_download': True, + }, }, { 'url': 'http://www.telecinco.es/informativos/nacional/Pablo_Iglesias-Informativos_Telecinco-entrevista-Pedro_Piqueras_2_1945155182.html', 'only_matching': True, diff --git a/youtube_dl/extractor/tenplay.py b/youtube_dl/extractor/tenplay.py index 466155e..f669414 100644 --- a/youtube_dl/extractor/tenplay.py +++ b/youtube_dl/extractor/tenplay.py @@ -2,6 +2,10 @@ from __future__ import unicode_literals from .common import InfoExtractor +from ..utils import ( + int_or_none, + float_or_none, +) class TenPlayIE(InfoExtractor): @@ -49,18 +53,23 @@ class TenPlayIE(InfoExtractor): if protocol == 'rtmp': url = url.replace('&mp4:', '') + tbr = int_or_none(rendition.get('encodingRate'), 1000) + formats.append({ - 'format_id': '_'.join(['rtmp', rendition['videoContainer'].lower(), rendition['videoCodec'].lower()]), - 'width': rendition['frameWidth'], - 'height': rendition['frameHeight'], - 'tbr': rendition['encodingRate'] / 1024, - 'filesize': rendition['size'], + 'format_id': '_'.join( + ['rtmp', rendition['videoContainer'].lower(), + rendition['videoCodec'].lower(), '%sk' % tbr]), + 'width': int_or_none(rendition['frameWidth']), + 'height': int_or_none(rendition['frameHeight']), + 'tbr': tbr, + 'filesize': int_or_none(rendition['size']), 'protocol': protocol, 'ext': ext, 'vcodec': rendition['videoCodec'].lower(), 'container': rendition['videoContainer'].lower(), 'url': url, }) + self._sort_formats(formats) return { 'id': video_id, @@ -74,8 +83,8 @@ class TenPlayIE(InfoExtractor): 'url': json['thumbnailURL'] }], 'thumbnail': json['videoStillURL'], - 'duration': json['length'] / 1000, - 'timestamp': float(json['creationDate']) / 1000, - 'uploader': json['customFields']['production_company_distributor'] if 'production_company_distributor' in json['customFields'] else 'TENplay', - 'view_count': json['playsTotal'] + 'duration': float_or_none(json.get('length'), 1000), + 'timestamp': float_or_none(json.get('creationDate'), 1000), + 'uploader': json.get('customFields', {}).get('production_company_distributor') or 'TENplay', + 'view_count': int_or_none(json.get('playsTotal')), } diff --git a/youtube_dl/extractor/tf1.py b/youtube_dl/extractor/tf1.py index 025d087..3a68eaa 100644 --- a/youtube_dl/extractor/tf1.py +++ b/youtube_dl/extractor/tf1.py @@ -6,8 +6,8 @@ from .common import InfoExtractor class TF1IE(InfoExtractor): """TF1 uses the wat.tv player.""" - _VALID_URL = r'http://(?:videos\.tf1|www\.tfou)\.fr/.*?-(?P<id>\d+)(?:-\d+)?\.html' - _TESTS = { + _VALID_URL = r'http://(?:(?:videos|www|lci)\.tf1|www\.tfou)\.fr/.*?-(?P<id>\d+)(?:-\d+)?\.html' + _TESTS = [{ 'url': 'http://videos.tf1.fr/auto-moto/citroen-grand-c4-picasso-2013-presentation-officielle-8062060.html', 'info_dict': { 'id': '10635995', @@ -32,7 +32,13 @@ class TF1IE(InfoExtractor): # Sometimes wat serves the whole file with the --test option 'skip_download': True, }, - } + }, { + 'url': 'http://www.tf1.fr/tf1/koh-lanta/videos/replay-koh-lanta-22-mai-2015.html', + 'only_matching': True, + }, { + 'url': 'http://lci.tf1.fr/sept-a-huit/videos/sept-a-huit-du-24-mai-2015-8611550.html', + 'only_matching': True, + }] def _real_extract(self, url): video_id = self._match_id(url) diff --git a/youtube_dl/extractor/tnaflix.py b/youtube_dl/extractor/tnaflix.py index d48cbbf..c282865 100644 --- a/youtube_dl/extractor/tnaflix.py +++ b/youtube_dl/extractor/tnaflix.py @@ -10,26 +10,32 @@ from ..utils import ( class TNAFlixIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?tnaflix\.com/(?P<cat_id>[\w-]+)/(?P<display_id>[\w-]+)/video(?P<id>\d+)' + _VALID_URL = r'https?://(?:www\.)?tnaflix\.com/[^/]+/(?P<display_id>[^/]+)/video(?P<id>\d+)' _TITLE_REGEX = r'<title>(.+?) - TNAFlix Porn Videos' _DESCRIPTION_REGEX = r'

([^<]+)

' _CONFIG_REGEX = r'flashvars\.config\s*=\s*escape\("([^"]+)"' - _TEST = { - 'url': 'http://www.tnaflix.com/porn-stars/Carmella-Decesare-striptease/video553878', - 'md5': 'ecf3498417d09216374fc5907f9c6ec0', - 'info_dict': { - 'id': '553878', - 'display_id': 'Carmella-Decesare-striptease', - 'ext': 'mp4', - 'title': 'Carmella Decesare - striptease', - 'description': '', - 'thumbnail': 're:https?://.*\.jpg$', - 'duration': 91, - 'age_limit': 18, + _TESTS = [ + { + 'url': 'http://www.tnaflix.com/porn-stars/Carmella-Decesare-striptease/video553878', + 'md5': 'ecf3498417d09216374fc5907f9c6ec0', + 'info_dict': { + 'id': '553878', + 'display_id': 'Carmella-Decesare-striptease', + 'ext': 'mp4', + 'title': 'Carmella Decesare - striptease', + 'description': '', + 'thumbnail': 're:https?://.*\.jpg$', + 'duration': 91, + 'age_limit': 18, + } + }, + { + 'url': 'https://www.tnaflix.com/amateur-porn/bunzHD-Ms.Donk/video358632', + 'only_matching': True, } - } + ] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) @@ -45,9 +51,8 @@ class TNAFlixIE(InfoExtractor): age_limit = self._rta_search(webpage) - duration = self._html_search_meta('duration', webpage, 'duration', default=None) - if duration: - duration = parse_duration(duration[1:]) + duration = parse_duration(self._html_search_meta( + 'duration', webpage, 'duration', default=None)) cfg_url = self._proto_relative_url(self._html_search_regex( self._CONFIG_REGEX, webpage, 'flashvars.config'), 'http:') @@ -56,14 +61,15 @@ class TNAFlixIE(InfoExtractor): cfg_url, display_id, note='Downloading metadata', transform_source=fix_xml_ampersands) - thumbnail = cfg_xml.find('./startThumb').text + thumbnail = self._proto_relative_url( + cfg_xml.find('./startThumb').text, 'http:') formats = [] for item in cfg_xml.findall('./quality/item'): video_url = re.sub('speed=\d+', 'speed=', item.find('videoLink').text) format_id = item.find('res').text fmt = { - 'url': video_url, + 'url': self._proto_relative_url(video_url, 'http:'), 'format_id': format_id, } m = re.search(r'^(\d+)', format_id) diff --git a/youtube_dl/extractor/tube8.py b/youtube_dl/extractor/tube8.py index d73ad37..6ca8840 100644 --- a/youtube_dl/extractor/tube8.py +++ b/youtube_dl/extractor/tube8.py @@ -47,7 +47,7 @@ class Tube8IE(InfoExtractor): webpage = self._download_webpage(req, display_id) flashvars = json.loads(self._html_search_regex( - r'var flashvars\s*=\s*({.+?})', webpage, 'flashvars')) + r'flashvars\s*=\s*({.+?})', webpage, 'flashvars')) video_url = flashvars['video_url'] if flashvars.get('encrypted') is True: @@ -58,19 +58,19 @@ class Tube8IE(InfoExtractor): thumbnail = flashvars.get('image_url') title = self._html_search_regex( - r'videotitle\s*=\s*"([^"]+)', webpage, 'title') + r'videoTitle\s*=\s*"([^"]+)', webpage, 'title') description = self._html_search_regex( - r'>Description:(.+?)<', webpage, 'description', fatal=False) + r'>Description:\s*(.+?)\s*<', webpage, 'description', fatal=False) uploader = self._html_search_regex( - r'(?:)?([^<]+)(?:)?', + r'\s*(.+?)\s*<', webpage, 'uploader', fatal=False) like_count = int_or_none(self._html_search_regex( - r"rupVar\s*=\s*'(\d+)'", webpage, 'like count', fatal=False)) + r'rupVar\s*=\s*"(\d+)"', webpage, 'like count', fatal=False)) dislike_count = int_or_none(self._html_search_regex( - r"rdownVar\s*=\s*'(\d+)'", webpage, 'dislike count', fatal=False)) + r'rdownVar\s*=\s*"(\d+)"', webpage, 'dislike count', fatal=False)) view_count = self._html_search_regex( - r'Views: ([\d,\.]+)', webpage, 'view count', fatal=False) + r'Views: ([\d,\.]+)\s*', webpage, 'view count', fatal=False) if view_count: view_count = str_to_int(view_count) comment_count = self._html_search_regex( diff --git a/youtube_dl/extractor/tubitv.py b/youtube_dl/extractor/tubitv.py new file mode 100644 index 0000000..2c4b218 --- /dev/null +++ b/youtube_dl/extractor/tubitv.py @@ -0,0 +1,84 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import codecs +import re + +from .common import InfoExtractor +from ..compat import ( + compat_urllib_parse, + compat_urllib_request +) +from ..utils import ( + ExtractorError, + int_or_none, +) + + +class TubiTvIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?tubitv\.com/video\?id=(?P[0-9]+)' + _LOGIN_URL = 'http://tubitv.com/login' + _NETRC_MACHINE = 'tubitv' + _TEST = { + 'url': 'http://tubitv.com/video?id=54411&title=The_Kitchen_Musical_-_EP01', + 'info_dict': { + 'id': '54411', + 'ext': 'mp4', + 'title': 'The Kitchen Musical - EP01', + 'thumbnail': 're:^https?://.*\.png$', + 'description': 'md5:37532716166069b353e8866e71fefae7', + 'duration': 2407, + }, + 'params': { + 'skip_download': 'HLS download', + }, + } + + def _login(self): + (username, password) = self._get_login_info() + if username is None: + return + self.report_login() + form_data = { + 'username': username, + 'password': password, + } + payload = compat_urllib_parse.urlencode(form_data).encode('utf-8') + request = compat_urllib_request.Request(self._LOGIN_URL, payload) + request.add_header('Content-Type', 'application/x-www-form-urlencoded') + login_page = self._download_webpage( + request, None, False, 'Wrong login info') + if not re.search(r'id="tubi-logout"', login_page): + raise ExtractorError( + 'Login failed (invalid username/password)', expected=True) + + def _real_initialize(self): + self._login() + + def _real_extract(self, url): + video_id = self._match_id(url) + + webpage = self._download_webpage(url, video_id) + if re.search(r"<(?:DIV|div) class='login-required-screen'>", webpage): + raise ExtractorError( + 'This video requires login, use --username and --password ' + 'options to provide account credentials.', expected=True) + + title = self._og_search_title(webpage) + description = self._og_search_description(webpage) + thumbnail = self._og_search_thumbnail(webpage) + duration = int_or_none(self._html_search_meta( + 'video:duration', webpage, 'duration')) + + apu = self._search_regex(r"apu='([^']+)'", webpage, 'apu') + m3u8_url = codecs.decode(apu, 'rot_13')[::-1] + formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4') + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + 'thumbnail': thumbnail, + 'description': description, + 'duration': duration, + } diff --git a/youtube_dl/extractor/tumblr.py b/youtube_dl/extractor/tumblr.py index 828c808..e621880 100644 --- a/youtube_dl/extractor/tumblr.py +++ b/youtube_dl/extractor/tumblr.py @@ -28,6 +28,17 @@ class TumblrIE(InfoExtractor): 'description': 'md5:dba62ac8639482759c8eb10ce474586a', 'thumbnail': 're:http://.*\.jpg', } + }, { + 'url': 'http://naked-yogi.tumblr.com/post/118312946248/naked-smoking-stretching', + 'md5': 'de07e5211d60d4f3a2c3df757ea9f6ab', + 'info_dict': { + 'id': 'Wmur', + 'ext': 'mp4', + 'title': 'naked smoking & stretching', + 'upload_date': '20150506', + 'timestamp': 1430931613, + }, + 'add_ie': ['Vidme'], }] def _real_extract(self, url): @@ -38,6 +49,12 @@ class TumblrIE(InfoExtractor): url = 'http://%s.tumblr.com/post/%s/' % (blog, video_id) webpage = self._download_webpage(url, video_id) + vid_me_embed_url = self._search_regex( + r'src=[\'"](https?://vid\.me/[^\'"]+)[\'"]', + webpage, 'vid.me embed', default=None) + if vid_me_embed_url is not None: + return self.url_result(vid_me_embed_url, 'Vidme') + iframe_url = self._search_regex( r'src=\'(https?://www\.tumblr\.com/video/[^\']+)\'', webpage, 'iframe url') diff --git a/youtube_dl/extractor/tutv.py b/youtube_dl/extractor/tutv.py index 4de0aac..fad720b 100644 --- a/youtube_dl/extractor/tutv.py +++ b/youtube_dl/extractor/tutv.py @@ -26,7 +26,7 @@ class TutvIE(InfoExtractor): data_content = self._download_webpage( 'http://tu.tv/flvurl.php?codVideo=%s' % internal_id, video_id, 'Downloading video info') - video_url = base64.b64decode(compat_parse_qs(data_content)['kpt'][0]).decode('utf-8') + video_url = base64.b64decode(compat_parse_qs(data_content)['kpt'][0].encode('utf-8')).decode('utf-8') return { 'id': internal_id, diff --git a/youtube_dl/extractor/tv2.py b/youtube_dl/extractor/tv2.py new file mode 100644 index 0000000..fa338b9 --- /dev/null +++ b/youtube_dl/extractor/tv2.py @@ -0,0 +1,126 @@ +# encoding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..utils import ( + determine_ext, + int_or_none, + float_or_none, + parse_iso8601, + remove_end, +) + + +class TV2IE(InfoExtractor): + _VALID_URL = 'http://(?:www\.)?tv2\.no/v/(?P\d+)' + _TEST = { + 'url': 'http://www.tv2.no/v/916509/', + 'md5': '9cb9e3410b18b515d71892f27856e9b1', + 'info_dict': { + 'id': '916509', + 'ext': 'flv', + 'title': 'Se Gryttens hyllest av Steven Gerrard', + 'description': 'TV 2 Sportens huspoet tar avskjed med Liverpools kaptein Steven Gerrard.', + 'timestamp': 1431715610, + 'upload_date': '20150515', + 'duration': 156.967, + 'view_count': int, + 'categories': list, + } + } + + def _real_extract(self, url): + video_id = self._match_id(url) + + formats = [] + format_urls = [] + for protocol in ('HDS', 'HLS'): + data = self._download_json( + 'http://sumo.tv2.no/api/web/asset/%s/play.json?protocol=%s&videoFormat=SMIL+ISMUSP' % (video_id, protocol), + video_id, 'Downloading play JSON')['playback'] + for item in data['items']['item']: + video_url = item.get('url') + if not video_url or video_url in format_urls: + continue + format_id = '%s-%s' % (protocol.lower(), item.get('mediaFormat')) + if not self._is_valid_url(video_url, video_id, format_id): + continue + format_urls.append(video_url) + ext = determine_ext(video_url) + if ext == 'f4m': + formats.extend(self._extract_f4m_formats( + video_url, video_id, f4m_id=format_id)) + elif ext == 'm3u8': + formats.extend(self._extract_m3u8_formats( + video_url, video_id, 'mp4', m3u8_id=format_id)) + elif ext == 'ism' or video_url.endswith('.ism/Manifest'): + pass + else: + formats.append({ + 'url': video_url, + 'format_id': format_id, + 'tbr': int_or_none(item.get('bitrate')), + 'filesize': int_or_none(item.get('fileSize')), + }) + self._sort_formats(formats) + + asset = self._download_json( + 'http://sumo.tv2.no/api/web/asset/%s.json' % video_id, + video_id, 'Downloading metadata JSON')['asset'] + + title = asset['title'] + description = asset.get('description') + timestamp = parse_iso8601(asset.get('createTime')) + duration = float_or_none(asset.get('accurateDuration') or asset.get('duration')) + view_count = int_or_none(asset.get('views')) + categories = asset.get('keywords', '').split(',') + + thumbnails = [{ + 'id': thumbnail.get('@type'), + 'url': thumbnail.get('url'), + } for _, thumbnail in asset.get('imageVersions', {}).items()] + + return { + 'id': video_id, + 'url': video_url, + 'title': title, + 'description': description, + 'thumbnails': thumbnails, + 'timestamp': timestamp, + 'duration': duration, + 'view_count': view_count, + 'categories': categories, + 'formats': formats, + } + + +class TV2ArticleIE(InfoExtractor): + _VALID_URL = 'http://(?:www\.)?tv2\.no/(?:a|\d{4}/\d{2}/\d{2}(/[^/]+)+)/(?P\d+)' + _TESTS = [{ + 'url': 'http://www.tv2.no/2015/05/16/nyheter/alesund/krim/pingvin/6930542', + 'info_dict': { + 'id': '6930542', + 'title': 'Russen hetses etter pingvintyveri – innrømmer å ha åpnet luken på buret', + 'description': 'md5:339573779d3eea3542ffe12006190954', + }, + 'playlist_count': 2, + }, { + 'url': 'http://www.tv2.no/a/6930542', + 'only_matching': True, + }] + + def _real_extract(self, url): + playlist_id = self._match_id(url) + + webpage = self._download_webpage(url, playlist_id) + + entries = [ + self.url_result('http://www.tv2.no/v/%s' % video_id, 'TV2') + for video_id in re.findall(r'data-assetid="(\d+)"', webpage)] + + title = remove_end(self._og_search_title(webpage), ' - TV2.no') + description = remove_end(self._og_search_description(webpage), ' - TV2.no') + + return self.playlist_result(entries, playlist_id, title, description) diff --git a/youtube_dl/extractor/tvigle.py b/youtube_dl/extractor/tvigle.py index 102362b..dc3a833 100644 --- a/youtube_dl/extractor/tvigle.py +++ b/youtube_dl/extractor/tvigle.py @@ -5,7 +5,9 @@ import re from .common import InfoExtractor from ..utils import ( + ExtractorError, float_or_none, + int_or_none, parse_age_limit, ) @@ -24,22 +26,24 @@ class TvigleIE(InfoExtractor): 'display_id': 'sokrat', 'ext': 'flv', 'title': 'Сократ', - 'description': 'md5:a05bd01be310074d5833efc6743be95e', + 'description': 'md5:d6b92ffb7217b4b8ebad2e7665253c17', 'duration': 6586, - 'age_limit': 0, + 'age_limit': 12, }, + 'skip': 'georestricted', }, { 'url': 'http://www.tvigle.ru/video/vladimir-vysotskii/vedushchii-teleprogrammy-60-minut-ssha-o-vladimire-vysotskom/', - 'md5': 'd9012d7c7c598fe7a11d7fb46dc1f574', + 'md5': 'e7efe5350dd5011d0de6550b53c3ba7b', 'info_dict': { 'id': '5142516', - 'ext': 'mp4', + 'ext': 'flv', 'title': 'Ведущий телепрограммы «60 минут» (США) о Владимире Высоцком', 'description': 'md5:027f7dc872948f14c96d19b4178428a4', 'duration': 186.080, 'age_limit': 0, }, + 'skip': 'georestricted', }, { 'url': 'https://cloud.tvigle.ru/video/5267604/', 'only_matching': True, @@ -54,7 +58,7 @@ class TvigleIE(InfoExtractor): if not video_id: webpage = self._download_webpage(url, display_id) video_id = self._html_search_regex( - r'
  • ', + r'class="video-preview current_playing" id="(\d+)">', webpage, 'video id') video_data = self._download_json( @@ -62,21 +66,34 @@ class TvigleIE(InfoExtractor): item = video_data['playlist']['items'][0] + videos = item.get('videos') + + error_message = item.get('errorMessage') + if not videos and error_message: + raise ExtractorError( + '%s returned error: %s' % (self.IE_NAME, error_message), expected=True) + title = item['title'] - description = item['description'] - thumbnail = item['thumbnail'] + description = item.get('description') + thumbnail = item.get('thumbnail') duration = float_or_none(item.get('durationMilliseconds'), 1000) age_limit = parse_age_limit(item.get('ageRestrictions')) formats = [] for vcodec, fmts in item['videos'].items(): - for quality, video_url in fmts.items(): + for format_id, video_url in fmts.items(): + if format_id == 'm3u8': + formats.extend(self._extract_m3u8_formats( + video_url, video_id, 'mp4', m3u8_id=vcodec)) + continue + height = self._search_regex( + r'^(\d+)[pP]$', format_id, 'height', default=None) formats.append({ 'url': video_url, - 'format_id': '%s-%s' % (vcodec, quality), + 'format_id': '%s-%s' % (vcodec, format_id), 'vcodec': vcodec, - 'height': int(quality[:-1]), - 'filesize': item['video_files_size'][vcodec][quality], + 'height': int_or_none(height), + 'filesize': int_or_none(item.get('video_files_size', {}).get(vcodec, {}).get(format_id)), }) self._sort_formats(formats) diff --git a/youtube_dl/extractor/twentyfourvideo.py b/youtube_dl/extractor/twentyfourvideo.py index 67e8bfe..c1ee1de 100644 --- a/youtube_dl/extractor/twentyfourvideo.py +++ b/youtube_dl/extractor/twentyfourvideo.py @@ -15,7 +15,7 @@ class TwentyFourVideoIE(InfoExtractor): _TESTS = [ { 'url': 'http://www.24video.net/video/view/1044982', - 'md5': '48dd7646775690a80447a8dca6a2df76', + 'md5': 'd041af8b5b4246ea466226a0d6693345', 'info_dict': { 'id': '1044982', 'ext': 'mp4', @@ -54,7 +54,7 @@ class TwentyFourVideoIE(InfoExtractor): webpage, 'upload date')) uploader = self._html_search_regex( - r'Загрузил\s*([^<]+)', + r'class="video-uploaded"[^>]*>\s*]*>([^<]+)', webpage, 'uploader', fatal=False) view_count = int_or_none(self._html_search_regex( diff --git a/youtube_dl/extractor/ultimedia.py b/youtube_dl/extractor/ultimedia.py index 96c809e..c475105 100644 --- a/youtube_dl/extractor/ultimedia.py +++ b/youtube_dl/extractor/ultimedia.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import re from .common import InfoExtractor +from ..compat import compat_urllib_parse_urlparse from ..utils import ( ExtractorError, qualities, @@ -44,9 +45,9 @@ class UltimediaIE(InfoExtractor): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - deliver_url = self._search_regex( - r']+src="(https?://(?:www\.)?ultimedia\.com/deliver/[^"]+)"', - webpage, 'deliver URL') + deliver_url = self._proto_relative_url(self._search_regex( + r']+src="((?:https?:)?//(?:www\.)?ultimedia\.com/deliver/[^"]+)"', + webpage, 'deliver URL'), compat_urllib_parse_urlparse(url).scheme + ':') deliver_page = self._download_webpage( deliver_url, video_id, 'Downloading iframe page') @@ -57,7 +58,8 @@ class UltimediaIE(InfoExtractor): player = self._parse_json( self._search_regex( - r"jwplayer\('player(?:_temp)?'\)\.setup\(({.+?})\)\.on", deliver_page, 'player'), + r"jwplayer\('player(?:_temp)?'\)\.setup\(({.+?})\)\.on", + deliver_page, 'player'), video_id) quality = qualities(['flash', 'html5']) diff --git a/youtube_dl/extractor/vgtv.py b/youtube_dl/extractor/vgtv.py index e6ee1e4..f38a72f 100644 --- a/youtube_dl/extractor/vgtv.py +++ b/youtube_dl/extractor/vgtv.py @@ -4,7 +4,10 @@ from __future__ import unicode_literals import re from .common import InfoExtractor -from ..utils import float_or_none +from ..utils import ( + ExtractorError, + float_or_none, +) class VGTVIE(InfoExtractor): @@ -59,16 +62,16 @@ class VGTVIE(InfoExtractor): }, { # streamType: live - 'url': 'http://www.vgtv.no/#!/live/100015/direkte-her-kan-du-se-laksen-live-fra-suldalslaagen', + 'url': 'http://www.vgtv.no/#!/live/113063/direkte-v75-fra-solvalla', 'info_dict': { - 'id': '100015', + 'id': '113063', 'ext': 'flv', - 'title': 'DIREKTE: Her kan du se laksen live fra SuldalslÃ¥gen!', - 'description': 'md5:9a60cc23fa349f761628924e56eeec2d', + 'title': 're:^DIREKTE: V75 fra Solvalla [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$', + 'description': 'md5:b3743425765355855f88e096acc93231', 'thumbnail': 're:^https?://.*\.jpg', 'duration': 0, - 'timestamp': 1407423348, - 'upload_date': '20140807', + 'timestamp': 1432975582, + 'upload_date': '20150530', 'view_count': int, }, 'params': { @@ -97,7 +100,12 @@ class VGTVIE(InfoExtractor): % (host, video_id, HOST_WEBSITES[host]), video_id, 'Downloading media JSON') + if data.get('status') == 'inactive': + raise ExtractorError( + 'Video %s is no longer available' % video_id, expected=True) + streams = data['streamUrls'] + stream_type = data.get('streamType') formats = [] @@ -107,7 +115,8 @@ class VGTVIE(InfoExtractor): hls_url, video_id, 'mp4', m3u8_id='hls')) hds_url = streams.get('hds') - if hds_url: + # wasLive hds are always 404 + if hds_url and stream_type != 'wasLive': formats.extend(self._extract_f4m_formats( hds_url + '?hdcore=3.2.0&plugin=aasp-3.2.0.77.18', video_id, f4m_id='hds')) @@ -135,13 +144,14 @@ class VGTVIE(InfoExtractor): return { 'id': video_id, - 'title': data['title'], + 'title': self._live_title(data['title']), 'description': data['description'], 'thumbnail': data['images']['main'] + '?t[]=900x506q80', 'timestamp': data['published'], 'duration': float_or_none(data['duration'], 1000), 'view_count': data['displays'], 'formats': formats, + 'is_live': True if stream_type == 'live' else False, } diff --git a/youtube_dl/extractor/videott.py b/youtube_dl/extractor/videott.py index ececc7e..591024e 100644 --- a/youtube_dl/extractor/videott.py +++ b/youtube_dl/extractor/videott.py @@ -43,7 +43,7 @@ class VideoTtIE(InfoExtractor): formats = [ { - 'url': base64.b64decode(res['u']).decode('utf-8'), + 'url': base64.b64decode(res['u'].encode('utf-8')).decode('utf-8'), 'ext': 'flv', 'format_id': res['l'], } for res in settings['res'] if res['u'] diff --git a/youtube_dl/extractor/vidme.py b/youtube_dl/extractor/vidme.py index bd953fb..e0b5507 100644 --- a/youtube_dl/extractor/vidme.py +++ b/youtube_dl/extractor/vidme.py @@ -10,7 +10,7 @@ from ..utils import ( class VidmeIE(InfoExtractor): _VALID_URL = r'https?://vid\.me/(?:e/)?(?P[\da-zA-Z]+)' - _TEST = { + _TESTS = [{ 'url': 'https://vid.me/QNB', 'md5': 'f42d05e7149aeaec5c037b17e5d3dc82', 'info_dict': { @@ -23,9 +23,14 @@ class VidmeIE(InfoExtractor): 'upload_date': '20140725', 'thumbnail': 're:^https?://.*\.jpg', }, - } + }, { + # From http://naked-yogi.tumblr.com/post/118312946248/naked-smoking-stretching + 'url': 'https://vid.me/e/Wmur', + 'only_matching': True, + }] def _real_extract(self, url): + url = url.replace('vid.me/e/', 'vid.me/') video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) diff --git a/youtube_dl/extractor/vier.py b/youtube_dl/extractor/vier.py index 619039e..1537709 100644 --- a/youtube_dl/extractor/vier.py +++ b/youtube_dl/extractor/vier.py @@ -38,11 +38,14 @@ class VierIE(InfoExtractor): webpage = self._download_webpage(url, display_id) video_id = self._search_regex( - r'"nid"\s*:\s*"(\d+)"', webpage, 'video id') + [r'data-nid="(\d+)"', r'"nid"\s*:\s*"(\d+)"'], + webpage, 'video id') application = self._search_regex( - r'"application"\s*:\s*"([^"]+)"', webpage, 'application', default='vier_vod') + [r'data-application="([^"]+)"', r'"application"\s*:\s*"([^"]+)"'], + webpage, 'application', default='vier_vod') filename = self._search_regex( - r'"filename"\s*:\s*"([^"]+)"', webpage, 'filename') + [r'data-filename="([^"]+)"', r'"filename"\s*:\s*"([^"]+)"'], + webpage, 'filename') playlist_url = 'http://vod.streamcloud.be/%s/mp4:_definst_/%s.mp4/playlist.m3u8' % (application, filename) formats = self._extract_m3u8_formats(playlist_url, display_id, 'mp4') diff --git a/youtube_dl/extractor/viki.py b/youtube_dl/extractor/viki.py index cf6af1e..7f2fb1c 100644 --- a/youtube_dl/extractor/viki.py +++ b/youtube_dl/extractor/viki.py @@ -1,29 +1,65 @@ from __future__ import unicode_literals -import re +import time +import hmac +import hashlib +import itertools -from ..compat import ( - compat_urlparse, - compat_urllib_request, -) from ..utils import ( ExtractorError, - unescapeHTML, - unified_strdate, - US_RATINGS, - determine_ext, - mimetype2ext, + int_or_none, + parse_age_limit, + parse_iso8601, ) from .common import InfoExtractor -class VikiIE(InfoExtractor): - IE_NAME = 'viki' +class VikiBaseIE(InfoExtractor): + _VALID_URL_BASE = r'https?://(?:www\.)?viki\.(?:com|net|mx|jp|fr)/' + _API_QUERY_TEMPLATE = '/v4/%sapp=%s&t=%s&site=www.viki.com' + _API_URL_TEMPLATE = 'http://api.viki.io%s&sig=%s' + + _APP = '65535a' + _APP_VERSION = '2.2.5.1428709186' + _APP_SECRET = '-$iJ}@p7!G@SyU/je1bEyWg}upLu-6V6-Lg9VD(]siH,r.,m-r|ulZ,U4LC/SeR)' + + def _prepare_call(self, path, timestamp=None): + path += '?' if '?' not in path else '&' + if not timestamp: + timestamp = int(time.time()) + query = self._API_QUERY_TEMPLATE % (path, self._APP, timestamp) + sig = hmac.new( + self._APP_SECRET.encode('ascii'), + query.encode('ascii'), + hashlib.sha1 + ).hexdigest() + return self._API_URL_TEMPLATE % (query, sig) + + def _call_api(self, path, video_id, note, timestamp=None): + resp = self._download_json( + self._prepare_call(path, timestamp), video_id, note) + + error = resp.get('error') + if error: + if error == 'invalid timestamp': + resp = self._download_json( + self._prepare_call(path, int(resp['current_timestamp'])), + video_id, '%s (retry)' % note) + error = resp.get('error') + if error: + self._raise_error(resp['error']) + + return resp - # iPad2 - _USER_AGENT = 'Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5' + def _raise_error(self, error): + raise ExtractorError( + '%s returned error: %s' % (self.IE_NAME, error), + expected=True) - _VALID_URL = r'^https?://(?:www\.)?viki\.com/videos/(?P[0-9]+v)' + +class VikiIE(VikiBaseIE): + IE_NAME = 'viki' + _VALID_URL = r'%s(?:videos|player)/(?P[0-9]+v)' % VikiBaseIE._VALID_URL_BASE _TESTS = [{ 'url': 'http://www.viki.com/videos/1023585v-heirs-episode-14', 'info_dict': { @@ -37,111 +73,218 @@ class VikiIE(InfoExtractor): }, 'skip': 'Blocked in the US', }, { + # clip 'url': 'http://www.viki.com/videos/1067139v-the-avengers-age-of-ultron-press-conference', - 'md5': 'ca6493e6f0a6ec07da9aa8d6304b4b2c', + 'md5': '86c0b5dbd4d83a6611a79987cc7a1989', 'info_dict': { 'id': '1067139v', 'ext': 'mp4', + 'title': "'The Avengers: Age of Ultron' Press Conference", 'description': 'md5:d70b2f9428f5488321bfe1db10d612ea', + 'duration': 352, + 'timestamp': 1430380829, 'upload_date': '20150430', - 'title': '\'The Avengers: Age of Ultron\' Press Conference', + 'uploader': 'Arirang TV', + 'like_count': int, + 'age_limit': 0, } }, { 'url': 'http://www.viki.com/videos/1048879v-ankhon-dekhi', 'info_dict': { 'id': '1048879v', 'ext': 'mp4', - 'upload_date': '20140820', - 'description': 'md5:54ff56d51bdfc7a30441ec967394e91c', 'title': 'Ankhon Dekhi', + 'duration': 6512, + 'timestamp': 1408532356, + 'upload_date': '20140820', + 'uploader': 'Spuul', + 'like_count': int, + 'age_limit': 13, }, 'params': { - # requires ffmpeg + # m3u8 download 'skip_download': True, } + }, { + # episode + 'url': 'http://www.viki.com/videos/44699v-boys-over-flowers-episode-1', + 'md5': '190f3ef426005ba3a080a63325955bc3', + 'info_dict': { + 'id': '44699v', + 'ext': 'mp4', + 'title': 'Boys Over Flowers - Episode 1', + 'description': 'md5:52617e4f729c7d03bfd4bcbbb6e946f2', + 'duration': 4155, + 'timestamp': 1270496524, + 'upload_date': '20100405', + 'uploader': 'group8', + 'like_count': int, + 'age_limit': 13, + } + }, { + # youtube external + 'url': 'http://www.viki.com/videos/50562v-poor-nastya-complete-episode-1', + 'md5': '216d1afdc0c64d1febc1e9f2bd4b864b', + 'info_dict': { + 'id': '50562v', + 'ext': 'mp4', + 'title': 'Poor Nastya [COMPLETE] - Episode 1', + 'description': '', + 'duration': 607, + 'timestamp': 1274949505, + 'upload_date': '20101213', + 'uploader': 'ad14065n', + 'uploader_id': 'ad14065n', + 'like_count': int, + 'age_limit': 13, + } + }, { + 'url': 'http://www.viki.com/player/44699v', + 'only_matching': True, }] def _real_extract(self, url): video_id = self._match_id(url) - webpage = self._download_webpage(url, video_id) - title = self._og_search_title(webpage) - description = self._og_search_description(webpage) - thumbnail = self._og_search_thumbnail(webpage) - - uploader_m = re.search( - r'Broadcast Network: \s*([^<]*)<', webpage) - if uploader_m is None: - uploader = None - else: - uploader = uploader_m.group(1).strip() - - rating_str = self._html_search_regex( - r'Rating: \s*([^<]*)<', webpage, - 'rating information', default='').strip() - age_limit = US_RATINGS.get(rating_str) - - req = compat_urllib_request.Request( - 'http://www.viki.com/player5_fragment/%s?action=show&controller=videos' % video_id) - req.add_header('User-Agent', self._USER_AGENT) - info_webpage = self._download_webpage( - req, video_id, note='Downloading info page') - err_msg = self._html_search_regex(r']+class="video-error[^>]+>(.+)', info_webpage, 'error message', default=None) - if err_msg: - if 'not available in your region' in err_msg: - raise ExtractorError( - 'Video %s is blocked from your location.' % video_id, - expected=True) - else: - raise ExtractorError('Viki said: ' + err_msg) - mobj = re.search( - r']+type="(?P[^"]+)"[^>]+src="(?P[^"]+)"', info_webpage) - if not mobj: - raise ExtractorError('Unable to find video URL') - video_url = unescapeHTML(mobj.group('url')) - video_ext = mimetype2ext(mobj.group('mime_type')) - - if determine_ext(video_url) == 'm3u8': - formats = self._extract_m3u8_formats( - video_url, video_id, ext=video_ext) - else: - formats = [{ - 'url': video_url, - 'ext': video_ext, - }] - - upload_date_str = self._html_search_regex( - r'"created_at":"([^"]+)"', info_webpage, 'upload date') - upload_date = ( - unified_strdate(upload_date_str) - if upload_date_str is not None - else None - ) - - # subtitles - video_subtitles = self.extract_subtitles(video_id, info_webpage) - - return { + video = self._call_api( + 'videos/%s.json' % video_id, video_id, 'Downloading video JSON') + + title = None + titles = video.get('titles') + if titles: + title = titles.get('en') or titles[titles.keys()[0]] + if not title: + title = 'Episode %d' % video.get('number') if video.get('type') == 'episode' else video.get('id') or video_id + container_titles = video.get('container', {}).get('titles') + if container_titles: + container_title = container_titles.get('en') or container_titles[container_titles.keys()[0]] + title = '%s - %s' % (container_title, title) + + descriptions = video.get('descriptions') + description = descriptions.get('en') or descriptions[titles.keys()[0]] if descriptions else None + + duration = int_or_none(video.get('duration')) + timestamp = parse_iso8601(video.get('created_at')) + uploader = video.get('author') + like_count = int_or_none(video.get('likes', {}).get('count')) + age_limit = parse_age_limit(video.get('rating')) + + thumbnails = [] + for thumbnail_id, thumbnail in video.get('images', {}).items(): + thumbnails.append({ + 'id': thumbnail_id, + 'url': thumbnail.get('url'), + }) + + subtitles = {} + for subtitle_lang, _ in video.get('subtitle_completions', {}).items(): + subtitles[subtitle_lang] = [{ + 'ext': subtitles_format, + 'url': self._prepare_call( + 'videos/%s/subtitles/%s.%s' % (video_id, subtitle_lang, subtitles_format)), + } for subtitles_format in ('srt', 'vtt')] + + result = { 'id': video_id, 'title': title, - 'formats': formats, 'description': description, - 'thumbnail': thumbnail, - 'age_limit': age_limit, + 'duration': duration, + 'timestamp': timestamp, 'uploader': uploader, - 'subtitles': video_subtitles, - 'upload_date': upload_date, + 'like_count': like_count, + 'age_limit': age_limit, + 'thumbnails': thumbnails, + 'subtitles': subtitles, } - def _get_subtitles(self, video_id, info_webpage): - res = {} - for sturl_html in re.findall(r'[a-z]+)\.vtt', sturl) - if not m: - continue - res[m.group('lang')] = [{ - 'url': compat_urlparse.urljoin('http://www.viki.com', sturl), - 'ext': 'vtt', - }] - return res + streams = self._call_api( + 'videos/%s/streams.json' % video_id, video_id, + 'Downloading video streams JSON') + + if 'external' in streams: + result.update({ + '_type': 'url_transparent', + 'url': streams['external']['url'], + }) + return result + + formats = [] + for format_id, stream_dict in streams.items(): + height = self._search_regex( + r'^(\d+)[pP]$', format_id, 'height', default=None) + for protocol, format_dict in stream_dict.items(): + if format_id == 'm3u8': + formats = self._extract_m3u8_formats( + format_dict['url'], video_id, 'mp4', m3u8_id='m3u8-%s' % protocol) + else: + formats.append({ + 'url': format_dict['url'], + 'format_id': '%s-%s' % (format_id, protocol), + 'height': height, + }) + self._sort_formats(formats) + + result['formats'] = formats + return result + + +class VikiChannelIE(VikiBaseIE): + IE_NAME = 'viki:channel' + _VALID_URL = r'%s(?:tv|news|movies|artists)/(?P[0-9]+c)' % VikiBaseIE._VALID_URL_BASE + _TESTS = [{ + 'url': 'http://www.viki.com/tv/50c-boys-over-flowers', + 'info_dict': { + 'id': '50c', + 'title': 'Boys Over Flowers', + 'description': 'md5:ecd3cff47967fe193cff37c0bec52790', + }, + 'playlist_count': 70, + }, { + 'url': 'http://www.viki.com/tv/1354c-poor-nastya-complete', + 'info_dict': { + 'id': '1354c', + 'title': 'Poor Nastya [COMPLETE]', + 'description': 'md5:05bf5471385aa8b21c18ad450e350525', + }, + 'playlist_count': 127, + }, { + 'url': 'http://www.viki.com/news/24569c-showbiz-korea', + 'only_matching': True, + }, { + 'url': 'http://www.viki.com/movies/22047c-pride-and-prejudice-2005', + 'only_matching': True, + }, { + 'url': 'http://www.viki.com/artists/2141c-shinee', + 'only_matching': True, + }] + + _PER_PAGE = 25 + + def _real_extract(self, url): + channel_id = self._match_id(url) + + channel = self._call_api( + 'containers/%s.json' % channel_id, channel_id, + 'Downloading channel JSON') + + titles = channel['titles'] + title = titles.get('en') or titles[titles.keys()[0]] + + descriptions = channel['descriptions'] + description = descriptions.get('en') or descriptions[descriptions.keys()[0]] + + entries = [] + for video_type in ('episodes', 'clips', 'movies'): + for page_num in itertools.count(1): + page = self._call_api( + 'containers/%s/%s.json?per_page=%d&sort=number&direction=asc&with_paging=true&page=%d' + % (channel_id, video_type, self._PER_PAGE, page_num), channel_id, + 'Downloading %s JSON page #%d' % (video_type, page_num)) + for video in page['response']: + video_id = video['id'] + entries.append(self.url_result( + 'http://www.viki.com/videos/%s' % video_id, 'Viki')) + if not page['pagination']['next']: + break + + return self.playlist_result(entries, channel_id, title, description) diff --git a/youtube_dl/extractor/vuclip.py b/youtube_dl/extractor/vuclip.py index c3fde53..a6d9b5f 100644 --- a/youtube_dl/extractor/vuclip.py +++ b/youtube_dl/extractor/vuclip.py @@ -49,7 +49,7 @@ class VuClipIE(InfoExtractor): links_code = self._search_regex( r'''(?xs) (?: - | + | \s* ) (.*?) diff --git a/youtube_dl/extractor/vulture.py b/youtube_dl/extractor/vulture.py index 1eb24a3..faa167e 100644 --- a/youtube_dl/extractor/vulture.py +++ b/youtube_dl/extractor/vulture.py @@ -44,7 +44,7 @@ class VultureIE(InfoExtractor): query_webpage = self._download_webpage( query_url, display_id, note='Downloading query page') params_json = self._search_regex( - r'(?sm)new MagnifyEmbeddablePlayer\({.*?contentItem:\s*(\{.*?\})\n,\n', + r'(?sm)new MagnifyEmbeddablePlayer\({.*?contentItem:\s*(\{.*?\})\n?,\n', query_webpage, 'player params') params = json.loads(params_json) diff --git a/youtube_dl/extractor/wimp.py b/youtube_dl/extractor/wimp.py index d6dec25..f69d46a 100644 --- a/youtube_dl/extractor/wimp.py +++ b/youtube_dl/extractor/wimp.py @@ -37,7 +37,8 @@ class WimpIE(InfoExtractor): video_id = mobj.group(1) webpage = self._download_webpage(url, video_id) video_url = self._search_regex( - r"[\"']file[\"']\s*[:,]\s*[\"'](.+?)[\"']", webpage, 'video URL') + [r"[\"']file[\"']\s*[:,]\s*[\"'](.+?)[\"']", r"videoId\s*:\s*[\"']([^\"']+)[\"']"], + webpage, 'video URL') if YoutubeIE.suitable(video_url): self.to_screen('Found YouTube video') return { diff --git a/youtube_dl/extractor/xminus.py b/youtube_dl/extractor/xminus.py index 8c6241a..7c9d8af 100644 --- a/youtube_dl/extractor/xminus.py +++ b/youtube_dl/extractor/xminus.py @@ -43,7 +43,7 @@ class XMinusIE(InfoExtractor): r'minus_track\.dur_sec=\'([0-9]*?)\'', webpage, 'duration', fatal=False)) filesize_approx = parse_filesize(self._html_search_regex( - r'
    \s*([0-9.]+\s*[a-zA-Z][bB])', + r'
    ]*>\s*↓\s*([0-9.]+\s*[a-zA-Z][bB])', webpage, 'approximate filesize', fatal=False)) tbr = int_or_none(self._html_search_regex( r'
    \s*([0-9]+)\s*kbps', @@ -58,7 +58,7 @@ class XMinusIE(InfoExtractor): description = re.sub(' *\r *', '\n', description) enc_token = self._html_search_regex( - r'minus_track\.tkn="(.+?)"', webpage, 'enc_token') + r'minus_track\.s?tkn="(.+?)"', webpage, 'enc_token') token = ''.join( c if pos == 3 else compat_chr(compat_ord(c) - 1) for pos, c in enumerate(reversed(enc_token))) diff --git a/youtube_dl/extractor/yahoo.py b/youtube_dl/extractor/yahoo.py index bf4e659..f9afbdb 100644 --- a/youtube_dl/extractor/yahoo.py +++ b/youtube_dl/extractor/yahoo.py @@ -15,6 +15,7 @@ from ..utils import ( unescapeHTML, ExtractorError, int_or_none, + mimetype2ext, ) from .nbc import NBCSportsVPlayerIE @@ -236,6 +237,22 @@ class YahooIE(InfoExtractor): self._sort_formats(formats) + closed_captions = self._html_search_regex( + r'"closedcaptions":(\[[^\]]+\])', webpage, 'closed captions', + default='[]') + + cc_json = self._parse_json(closed_captions, video_id, fatal=False) + subtitles = {} + if cc_json: + for closed_caption in cc_json: + lang = closed_caption['lang'] + if lang not in subtitles: + subtitles[lang] = [] + subtitles[lang].append({ + 'url': closed_caption['url'], + 'ext': mimetype2ext(closed_caption['content_type']), + }) + return { 'id': video_id, 'display_id': display_id, @@ -244,6 +261,7 @@ class YahooIE(InfoExtractor): 'description': clean_html(meta['description']), 'thumbnail': meta['thumbnail'] if meta.get('thumbnail') else self._og_search_thumbnail(webpage), 'duration': int_or_none(meta.get('duration')), + 'subtitles': subtitles, } diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index e58184a..aacb999 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -49,6 +49,11 @@ class YoutubeBaseInfoExtractor(InfoExtractor): # YouTube sets the expire time to about two months expire_time=time.time() + 2 * 30 * 24 * 3600) + def _ids_to_results(self, ids): + return [ + self.url_result(vid_id, 'Youtube', video_id=vid_id) + for vid_id in ids] + def _login(self): """ Attempt to log in to YouTube. @@ -1121,12 +1126,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self.report_warning( 'Skipping DASH manifest: %r' % e, video_id) else: - # Hide the formats we found through non-DASH + # Remove the formats we found through non-DASH, they + # contain less info and it can be wrong, because we use + # fixed values (for example the resolution). See + # https://github.com/rg3/youtube-dl/issues/5774 for an + # example. dash_keys = set(df['format_id'] for df in dash_formats) - for f in formats: - if f['format_id'] in dash_keys: - f['format_id'] = 'nondash-%s' % f['format_id'] - f['preference'] = f.get('preference', 0) - 10000 + formats = [f for f in formats if f['format_id'] not in dash_keys] formats.extend(dash_formats) # Check for malformed aspect ratio @@ -1261,11 +1267,6 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): def _real_initialize(self): self._login() - def _ids_to_results(self, ids): - return [ - self.url_result(vid_id, 'Youtube', video_id=vid_id) - for vid_id in ids] - def _extract_mix(self, playlist_id): # The mixes are generated from a single video # the id of the playlist is just 'RD' + video_id @@ -1398,6 +1399,22 @@ class YoutubeChannelIE(InfoExtractor): channel_id = self._match_id(url) url = self._TEMPLATE_URL % channel_id + + # Channel by page listing is restricted to 35 pages of 30 items, i.e. 1050 videos total (see #5778) + # Workaround by extracting as a playlist if managed to obtain channel playlist URL + # otherwise fallback on channel by page extraction + channel_page = self._download_webpage( + url + '?view=57', channel_id, + 'Downloading channel page', fatal=False) + channel_playlist_id = self._search_regex( + [r'', + r'data-channel-external-id="([^"]+)"'], + channel_page, 'channel id', default=None) + if channel_playlist_id and channel_playlist_id.startswith('UC'): + playlist_id = 'UU' + channel_playlist_id[2:] + return self.url_result( + compat_urlparse.urljoin(url, '/playlist?list=%s' % playlist_id), 'YoutubePlaylist') + channel_page = self._download_webpage(url, channel_id, 'Downloading page #1') autogenerated = re.search(r'''(?x) class="[^"]*?(?: @@ -1601,20 +1618,10 @@ class YoutubeShowIE(InfoExtractor): class YoutubeFeedsInfoExtractor(YoutubeBaseInfoExtractor): """ - Base class for extractors that fetch info from - http://www.youtube.com/feed_ajax + Base class for feed extractors Subclasses must define the _FEED_NAME and _PLAYLIST_TITLE properties. """ _LOGIN_REQUIRED = True - # use action_load_personal_feed instead of action_load_system_feed - _PERSONAL_FEED = False - - @property - def _FEED_TEMPLATE(self): - action = 'action_load_system_feed' - if self._PERSONAL_FEED: - action = 'action_load_personal_feed' - return 'https://www.youtube.com/feed_ajax?%s=1&feed_name=%s&paging=%%s' % (action, self._FEED_NAME) @property def IE_NAME(self): @@ -1624,67 +1631,23 @@ class YoutubeFeedsInfoExtractor(YoutubeBaseInfoExtractor): self._login() def _real_extract(self, url): - feed_entries = [] - paging = 0 - for i in itertools.count(1): - info = self._download_json( - self._FEED_TEMPLATE % paging, - '%s feed' % self._FEED_NAME, - 'Downloading page %s' % i, - transform_source=uppercase_escape) - feed_html = info.get('feed_html') or info.get('content_html') - load_more_widget_html = info.get('load_more_widget_html') or feed_html - m_ids = re.finditer(r'"/watch\?v=(.*?)["&]', feed_html) - ids = orderedSet(m.group(1) for m in m_ids) - feed_entries.extend( - self.url_result(video_id, 'Youtube', video_id=video_id) - for video_id in ids) - mobj = re.search( - r'data-uix-load-more-href="/?[^"]+paging=(?P\d+)', - load_more_widget_html) - if mobj is None: - break - paging = mobj.group('paging') - return self.playlist_result(feed_entries, playlist_title=self._PLAYLIST_TITLE) - - -class YoutubeRecommendedIE(YoutubeFeedsInfoExtractor): - IE_NAME = 'youtube:recommended' - IE_DESC = 'YouTube.com recommended videos, ":ytrec" for short (requires authentication)' - _VALID_URL = r'https?://www\.youtube\.com/feed/recommended|:ytrec(?:ommended)?' - _FEED_NAME = 'recommended' - _PLAYLIST_TITLE = 'Youtube Recommended videos' - - -class YoutubeWatchLaterIE(YoutubePlaylistIE): - IE_NAME = 'youtube:watchlater' - IE_DESC = 'Youtube watch later list, ":ytwatchlater" for short (requires authentication)' - _VALID_URL = r'https?://www\.youtube\.com/(?:feed/watch_later|playlist\?list=WL)|:ytwatchlater' - - _TESTS = [] # override PlaylistIE tests - - def _real_extract(self, url): - return self._extract_playlist('WL') - - -class YoutubeHistoryIE(YoutubePlaylistIE): - IE_NAME = 'youtube:history' - IE_DESC = 'Youtube watch history, ":ythistory" for short (requires authentication)' - _VALID_URL = 'https?://www\.youtube\.com/feed/history|:ythistory' - _TESTS = [] - - def _real_extract(self, url): - title = 'Youtube History' - page = self._download_webpage('https://www.youtube.com/feed/history', title) + page = self._download_webpage( + 'https://www.youtube.com/feed/%s' % self._FEED_NAME, self._PLAYLIST_TITLE) # The extraction process is the same as for playlists, but the regex # for the video ids doesn't contain an index ids = [] more_widget_html = content_html = page - for page_num in itertools.count(1): matches = re.findall(r'href="\s*/watch\?v=([0-9A-Za-z_-]{11})', content_html) - new_ids = orderedSet(matches) + + # 'recommended' feed has infinite 'load more' and each new portion spins + # the same videos in (sometimes) slightly different order, so we'll check + # for unicity and break when portion has no new videos + new_ids = filter(lambda video_id: video_id not in ids, orderedSet(matches)) + if not new_ids: + break + ids.extend(new_ids) mobj = re.search(r'data-uix-load-more-href="/?(?P[^"]+)"', more_widget_html) @@ -1692,17 +1655,25 @@ class YoutubeHistoryIE(YoutubePlaylistIE): break more = self._download_json( - 'https://youtube.com/%s' % mobj.group('more'), title, + 'https://youtube.com/%s' % mobj.group('more'), self._PLAYLIST_TITLE, 'Downloading page #%s' % page_num, transform_source=uppercase_escape) content_html = more['content_html'] more_widget_html = more['load_more_widget_html'] - return { - '_type': 'playlist', - 'title': title, - 'entries': self._ids_to_results(ids), - } + return self.playlist_result( + self._ids_to_results(ids), playlist_title=self._PLAYLIST_TITLE) + + +class YoutubeWatchLaterIE(YoutubePlaylistIE): + IE_NAME = 'youtube:watchlater' + IE_DESC = 'Youtube watch later list, ":ytwatchlater" for short (requires authentication)' + _VALID_URL = r'https?://www\.youtube\.com/(?:feed/watch_later|playlist\?list=WL)|:ytwatchlater' + + _TESTS = [] # override PlaylistIE tests + + def _real_extract(self, url): + return self._extract_playlist('WL') class YoutubeFavouritesIE(YoutubeBaseInfoExtractor): @@ -1717,42 +1688,25 @@ class YoutubeFavouritesIE(YoutubeBaseInfoExtractor): return self.url_result(playlist_id, 'YoutubePlaylist') -class YoutubeSubscriptionsIE(YoutubePlaylistIE): - IE_NAME = 'youtube:subscriptions' - IE_DESC = 'YouTube.com subscriptions feed, "ytsubs" keyword (requires authentication)' - _VALID_URL = r'https?://www\.youtube\.com/feed/subscriptions|:ytsubs(?:criptions)?' - _TESTS = [] - - def _real_extract(self, url): - title = 'Youtube Subscriptions' - page = self._download_webpage('https://www.youtube.com/feed/subscriptions', title) - - # The extraction process is the same as for playlists, but the regex - # for the video ids doesn't contain an index - ids = [] - more_widget_html = content_html = page +class YoutubeRecommendedIE(YoutubeFeedsInfoExtractor): + IE_DESC = 'YouTube.com recommended videos, ":ytrec" for short (requires authentication)' + _VALID_URL = r'https?://www\.youtube\.com/feed/recommended|:ytrec(?:ommended)?' + _FEED_NAME = 'recommended' + _PLAYLIST_TITLE = 'Youtube Recommended videos' - for page_num in itertools.count(1): - matches = re.findall(r'href="\s*/watch\?v=([0-9A-Za-z_-]{11})', content_html) - new_ids = orderedSet(matches) - ids.extend(new_ids) - mobj = re.search(r'data-uix-load-more-href="/?(?P[^"]+)"', more_widget_html) - if not mobj: - break +class YoutubeSubscriptionsIE(YoutubeFeedsInfoExtractor): + IE_DESC = 'YouTube.com subscriptions feed, "ytsubs" keyword (requires authentication)' + _VALID_URL = r'https?://www\.youtube\.com/feed/subscriptions|:ytsubs(?:criptions)?' + _FEED_NAME = 'subscriptions' + _PLAYLIST_TITLE = 'Youtube Subscriptions' - more = self._download_json( - 'https://youtube.com/%s' % mobj.group('more'), title, - 'Downloading page #%s' % page_num, - transform_source=uppercase_escape) - content_html = more['content_html'] - more_widget_html = more['load_more_widget_html'] - return { - '_type': 'playlist', - 'title': title, - 'entries': self._ids_to_results(ids), - } +class YoutubeHistoryIE(YoutubeFeedsInfoExtractor): + IE_DESC = 'Youtube watch history, ":ythistory" for short (requires authentication)' + _VALID_URL = 'https?://www\.youtube\.com/feed/history|:ythistory' + _FEED_NAME = 'history' + _PLAYLIST_TITLE = 'Youtube History' class YoutubeTruncatedURLIE(InfoExtractor): diff --git a/youtube_dl/options.py b/youtube_dl/options.py index 22dbc3a..5a2315b 100644 --- a/youtube_dl/options.py +++ b/youtube_dl/options.py @@ -537,7 +537,7 @@ def parseOpts(overrideArguments=None): verbosity.add_option( '--dump-pages', '--dump-intermediate-pages', action='store_true', dest='dump_intermediate_pages', default=False, - help='Print downloaded pages to debug problems (very verbose)') + help='Print downloaded pages encoded using base64 to debug problems (very verbose)') verbosity.add_option( '--write-pages', action='store_true', dest='write_pages', default=False, @@ -713,7 +713,7 @@ def parseOpts(overrideArguments=None): help='Parse additional metadata like song title / artist from the video title. ' 'The format syntax is the same as --output, ' 'the parsed parameters replace existing values. ' - 'Additional templates: %(album), %(artist). ' + 'Additional templates: %(album)s, %(artist)s. ' 'Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like ' '"Coldplay - Paradise"') postproc.add_option( diff --git a/youtube_dl/postprocessor/embedthumbnail.py b/youtube_dl/postprocessor/embedthumbnail.py index 8f825f7..774494e 100644 --- a/youtube_dl/postprocessor/embedthumbnail.py +++ b/youtube_dl/postprocessor/embedthumbnail.py @@ -49,7 +49,7 @@ class EmbedThumbnailPP(FFmpegPostProcessor): os.remove(encodeFilename(filename)) os.rename(encodeFilename(temp_filename), encodeFilename(filename)) - elif info['ext'] == 'm4a': + elif info['ext'] in ['m4a', 'mp4']: if not check_executable('AtomicParsley', ['-v']): raise EmbedThumbnailPPError('AtomicParsley was not found. Please install.') @@ -82,6 +82,6 @@ class EmbedThumbnailPP(FFmpegPostProcessor): os.remove(encodeFilename(filename)) os.rename(encodeFilename(temp_filename), encodeFilename(filename)) else: - raise EmbedThumbnailPPError('Only mp3 and m4a are supported for thumbnail embedding for now.') + raise EmbedThumbnailPPError('Only mp3 and m4a/mp4 are supported for thumbnail embedding for now.') return [], info diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index ed9ed9e..52d198f 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1665,6 +1665,7 @@ def mimetype2ext(mt): return { 'x-ms-wmv': 'wmv', 'x-mp4-fragmented': 'mp4', + 'ttml+xml': 'ttml', }.get(res, res) @@ -1848,9 +1849,9 @@ def dfxp2srt(dfxp_data): out = str_or_empty(node.text) for child in node: - if child.tag == _x('ttml:br'): + if child.tag in (_x('ttml:br'), 'br'): out += '\n' + str_or_empty(child.tail) - elif child.tag == _x('ttml:span'): + elif child.tag in (_x('ttml:span'), 'span'): out += str_or_empty(parse_node(child)) else: out += str_or_empty(xml.etree.ElementTree.tostring(child)) @@ -1859,7 +1860,10 @@ def dfxp2srt(dfxp_data): dfxp = xml.etree.ElementTree.fromstring(dfxp_data.encode('utf-8')) out = [] - paras = dfxp.findall(_x('.//ttml:p')) + paras = dfxp.findall(_x('.//ttml:p')) or dfxp.findall('.//p') + + if not paras: + raise ValueError('Invalid dfxp/TTML subtitle') for para, index in zip(paras, itertools.count(1)): begin_time = parse_dfxp_time_expr(para.attrib['begin']) diff --git a/youtube_dl/version.py b/youtube_dl/version.py index 38f00bc..9cf84ff 100644 --- a/youtube_dl/version.py +++ b/youtube_dl/version.py @@ -1,3 +1,3 @@ from __future__ import unicode_literals -__version__ = '2015.05.15' +__version__ = '2015.06.04.1' -- 2.41.1