[libwww-youtube-download-perl] 01/05: Imported Upstream version 0.56

Angel Abad angel at alioth.debian.org
Sun Aug 11 10:17:57 UTC 2013


This is an automated email from the git hooks/post-receive script.

angel pushed a commit to branch master
in repository libwww-youtube-download-perl.

commit d21e09f95cc9fd75eb9a27e5c79a2743a971f8f8
Author: Angel Abad <angelabad at gmail.com>
Date:   Sun Aug 11 12:08:14 2013 +0200

    Imported Upstream version 0.56
---
 Changes                     |  228 +++++++++++++++++++++++--------------------
 MANIFEST                    |    1 +
 META.json                   |   12 ++-
 META.yml                    |   12 ++-
 lib/WWW/YouTube/Download.pm |   71 +++++++++-----
 t/playlist_id.t             |   10 ++
 t/signatures.t              |   78 +++++++++++++++
 7 files changed, 275 insertions(+), 137 deletions(-)

diff --git a/Changes b/Changes
index fb75b80..adfb0d3 100644
--- a/Changes
+++ b/Changes
@@ -1,159 +1,177 @@
-Revision history for Perl extension WWW::YouTube::Download
+Revision history for Perl module WWW::YouTube::Download
+
+0.56 2013-07-30T07:14:40Z
+    - Fixed typo: $Carp::Intrenal -> $Carp::Internal (Syaltut++)
+    - Changes file reformatted as per CPAN::Changes::Spec (neilbowers++)
+
+0.55 2013-07-27T09:21:38Z
+    - Changed signature encoding (kucharskim++)
 
 0.54 2013-07-05T18:29:31Z
-        - If unavailable video, croak with an appropriate error message. (kucharskim++)
-        - Support encrypted signature video. (kucharskim++)
+    - If unavailable video, croak with an appropriate error message.
+      (kucharskim++)
+    - Support encrypted signature video. (kucharskim++)
 
 0.53 2013-06-05T16:05:56Z
-        - Various improvements to youtube-playlists (kucharskim++)
+    - Various improvements to youtube-playlists (kucharskim++)
 
 0.52 2013-05-05T16:18:54Z
-        - Added playlist_id() and video_id() method (kucharskim++)
+    - Added playlist_id() and video_id() method (kucharskim++)
 
 0.51 2013-05-03T07:49:29Z
-        - Support new url (mikolaj++)
+    - Support new url (mikolaj++)
 
 0.50 2013-04-19T17:50:39Z
-        - repackaging
+    - repackaging
 
 0.49 2013-04-09T21:13:56Z
-        - repacking
+    - repacking
 
 0.48 2013-04-09T21:09:55Z
-        - Fixed parsing problem on youtube-playlists (mikolaj++)
+    - Fixed parsing problem on youtube-playlists (mikolaj++)
+
+0.47 2013-04-02 02:06:07
+    - Added some documentation and added eg/menu.pl (polettix++)
+
+0.46 2013-03-24 15:34:27
+    - YouTube's design was changed (vjp++, yusukebe++)
 
-0.47    Tue Apr  2 02:06:07 2013
-        - Added some documentation and added eg/menu.pl (polettix++)
+0.45 2013-02-10 02:14:09
+    - New substitution variable {user} (isync++)
 
-0.46    Sun Mar 24 15:34:27 2013
-        - YouTube's design was changed (vjp++, yusukebe++)
+0.44 2013-01-19 18:29:58
+    - added proxy support (isync++)
 
-0.45    Sun Feb 10 02:14:09 2013
-        - New substitution variable {user} (isync++)
+0.43 2013-01-05 01:43:17
+    - fixed grammar (mokko++)
+    - using Module::Build
 
-0.44    Sat Jan 19 18:29:58 2013
-        - added proxy support (isync++)
+0.42 2012-11-16 21:35:31
+    - fixed "failed to extract JSON data" (ks0608++)
+    - fixed RT: 81068 (panic83++)
 
-0.43    Sat Jan  5 01:43:17 2013
-        - fixed grammar (mokko++)
-        - using Module::Build
+0.41 2012-10-04 00:44:13
+    - follow the change of site (mikolaj++, yusukebe++)
+    - fixed color problems on scripts (mikolaj++)
+    - fixed RT 79931 (HMBRAND++)
 
-0.42    Fri Nov 16 21:35:31 2012
-        - fixed "failed to extract JSON data" (ks0608++)
-        - fixed RT: 81068 (panic83++)
+0.40 2012-01-22 16:54:53
+    - Fixed a problem that did not works, because YouTube's design was changed.
+      (ks0608++, zentooo++)
 
-0.41    Thu Oct  4 00:44:13 2012
-        - follow the change of site (mikolaj++, yusukebe++)
-        - fixed color problems on scripts (mikolaj++)
-        - fixed RT 79931 (HMBRAND++)
+0.39 2012-01-18 01:28:00
+    - remove suffix from youtube-download.pl and youtube-playlists.pl
+      (mikolaj++)
 
-0.40    Sun Jan 22 16:54:53 2012
-        - Fixed a problem that did not works, because YouTube's design was changed.
-          (ks0608++, zentooo++)
+0.38 2011-12-08 00:44:52
+    - fix typo (mikolaj++)
+    - remove wrong code (mikolaj++)
 
-0.39    Wed Jan 18 01:28:00 2012
-        - remove suffix from youtube-download.pl and youtube-playlists.pl (mikolaj++)
+0.37 2011-12-07 02:33:23
+    - fix wrong characters in filename in youtube-download.pl (mikolaj++)
+    - fix doc in youtube-download.pl (mikolaj++)
+    - file_name option is DEPRECATED
 
-0.38    Thu Dec  8 00:44:52 2011
-        - fix typo (mikolaj++)
-        - remove wrong code (mikolaj++)
+0.36 2011-10-31 02:45:48
+    - fix default filename problem in youtube-download.pl
 
-0.37    Wed Dec  7 02:33:23 2011
-        - fix wrong characters in filename in youtube-download.pl (mikolaj++)
-        - fix doc in youtube-download.pl (mikolaj++)
-        - file_name option is DEPRECATED
+0.35 2011-10-18 00:28:58
+    - fix typo in youtube-playlists.pl (rt:71721)
 
-0.36    Mon Oct 31 02:45:48 2011
-        - fix default filename problem in youtube-download.pl
+0.34 2011-10-15 16:14:57
+    - workaround for win32
+    - fix suffix problem
 
-0.35    Tue Oct 18 00:28:58 2011
-        - fix typo in youtube-playlists.pl (rt:71721)
+0.33 2011-10-12 01:17:34
+    - added youtube-download.pl and youtube-playlist.pl (request by st3vil++)
+    - fix doc
 
-0.34    Sat Oct 15 16:14:57 2011
-        - workaround for win32
-        - fix suffix problem
+0.32 2011-08-23 01:52:20
+    - added LICENSE file (no code change)
 
-0.33    Wed Oct 12 01:17:34 2011
-        - added youtube-download.pl and youtube-playlist.pl (request by st3vil++)
-        - fix doc
+0.31 2011-08-23 00:25:02
+    - added fmt 38 to .mp4 (mikolaj++)
 
-0.32    Tue Aug 23 01:52:20 2011
-        - added LICENSE file (no code change)
+0.30 2011-08-07 15:25:11
+    - cleanup (mikolaj++)
 
-0.31    Tue Aug 23 00:25:02 2011
-        - added fmt 38 to .mp4 (mikolaj++)
+0.29 2011-08-05 01:29:27
+    - fixed a problem that did not works, becouse changed YouTube's design.
+      (katsuhito konishi++)
 
-0.30    Sun Aug  7 15:25:11 2011
-        - cleanup (mikolaj++)
+0.28 2011-08-04 00:03:58
+    - fixed a problem that did not works, becouse changed YouTube's design.
+      (mikolaj++)
 
-0.29    Fri Aug  5 01:29:27 2011
-        - fixed a problem that did not works, becouse changed YouTube's design. (katsuhito konishi++)
+0.27 2011-05-29 23:32:31
+    - fixed garbled (akiym++)
+    - fixed typo (akiym++)
 
-0.28    Thu Aug  4 00:03:58 2011
-        - fixed a problem that did not works, becouse changed YouTube's design. (mikolaj++)
+0.26 2011-04-20 01:34:55
+    - fixed scrape problem (reported by Octavian++)
 
-0.27    Sun May 29 23:32:31 2011
-        - fixed garbled (akiym++)
-        - fixed typo (akiym++)
+0.25 2011-03-19 00:39:41
+    - added few more match URLs (mikolaj++)
 
-0.26    Wed Apr 20 01:34:55 2011
-        - fixed scrape problem (reported by Octavian++)
+0.24 2011-03-04 01:45:20
+    - fixed could not fetch json data problem (akiym++)
 
-0.25    Sat Mar 19 00:39:41 2011
-        - added few more match URLs (mikolaj++)
+0.23 2011-02-22 00:00:22
+    - supported any video urls (mikolaj++)
 
-0.24    Fri Mar  4 01:45:20 2011
-        - fixed could not fetch json data problem (akiym++)
+0.22 2011-01-05 00:17:54
+    - Fixed a problem that can not download videos there.
+      (reported by Octavian)
 
-0.23    Tue Feb 22 00:00:22 2011
-        - supported any video urls (mikolaj++)
+0.21 2010-12-30 15:28:51
+    - fixed bug for _video_id(). If already had $1 is defined,
+      was returned $1 without matches. (woremacx++)
 
-0.22    Wed Jan  5 00:17:54 2011
-        - Fixed a problem that can not download videos there. (reported by Octavian)
+0.20 2010-12-15 00:57:43
+    - YouTube's API had change, maybe fixed it.
 
-0.21    Thu Dec 30 15:28:51 2010
-        - fixed bug for _video_id(). If already had $1 is defined, was returned $1 without matches. (woremacx++)
+0.16 2010-10-17 18:17:57
+    - Required Text::More 0.96 later
+    - fixed POD spell miss
 
-0.20    Wed Dec 15 00:57:43 2010
-        - YouTube's API had change, maybe fixed it.
+0.15 2010-08-11 00:14:53
+    - YouTube's API has changed so I fixed it. (reported by Bruce David)
 
-0.16    Sun Oct 17 18:17:57 2010
-        - Required Text::More 0.96 later
-        - fixed POD spell miss
+0.14 2010-05-07 02:50:42
+    - typo fix
+    - wrote pod
 
-0.15    Wed Aug 11 00:14:53 2010
-        - YouTube's API has changed so I fixed it. (reported by Bruce David)
+0.13 2010-04-10 18:20:05
+    - Each instance to create a LWP::UserAgent. # thx kuniyoshi
 
-0.14    Fri May  7 02:50:42 2010
-        - typo fix
-        - wrote pod
+0.12 2010-04-03 16:06:33
+    - upload miss X(
 
-0.13    Sat Apr 10 18:20:05 2010
-        - Each instance to create a LWP::UserAgent. # thx kuniyoshi
+0.11 2010-04-03 15:02:25
+    - added ua setter/getter.
+      using CGI.
 
-0.12    Sat Apr  3 16:06:33 2010
-        - upload miss X(
+0.10 2010-04-03 02:56:18
+    - rewrite all
 
-0.11    Sat Apr  3 15:02:25 2010
-        - added ua setter/getter.
-          using CGI.
+0.07 2010-03-01 00:11:55
+    - supported FULL HD quality
 
-0.10    Sat Apr  3 02:56:18 2010
-        - rewrite all
+0.06 2009-11-08 00:46:55
+    - Youtube respond to changes in
+    
+0.05 2009-10-12 14:58:23
+    - Youtube respond to changes in
 
-0.07    Mon Mar  1 00:11:55 2010
-        - supported FULL HD quality
+0.04 2011-08-14
+    - Changes unknown
 
-0.06    Sun Nov  8 00:46:55 2009
-        - Youtube respond to changes in
-        
-0.05    Mon Oct 12 14:58:23 2009
-        - Youtube respond to changes in
+0.03 2011-08-12
+    - Changes unknown
 
-0.03 ~ 0.04 lost X(
+0.02 2009-06-06 21:04:17
+    - added 'fmt' field
 
-0.02    Sat Jun  6 21:04:17 2009
-        - added 'fmt' field
+0.01 2009-04-04 16:26:29
+    - original version
 
-0.01    Sat Apr  4 16:26:29 2009
-        - original version
diff --git a/MANIFEST b/MANIFEST
index a5de1b5..9c3dad8 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -13,6 +13,7 @@ lib/WWW/YouTube/Download.pm
 minil.toml
 t/00_compile.t
 t/playlist_id.t
+t/signatures.t
 t/user_id.t
 t/video_id.t
 t/video_user.t
diff --git a/META.json b/META.json
index 1123fd6..068604c 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
       "xaicron <xaicron {@} cpan.org>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Minilla/v0.5.5",
+   "generated_by" : "Minilla/v0.5.6",
    "license" : "perl_5",
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
@@ -59,7 +59,7 @@
    "provides" : {
       "WWW::YouTube::Download" : {
          "file" : "lib/WWW/YouTube/Download.pm",
-         "version" : "0.54"
+         "version" : "0.56"
       }
    },
    "release_status" : "stable",
@@ -69,11 +69,11 @@
       },
       "homepage" : "https://github.com/xaicron/p5-www-youtube-download",
       "repository" : {
-         "url" : "git://github.com/xaicron/p5-www-youtube-download",
+         "url" : "git://github.com/xaicron/p5-www-youtube-download.git",
          "web" : "https://github.com/xaicron/p5-www-youtube-download"
       }
    },
-   "version" : "0.54",
+   "version" : "0.56",
    "x_contributors" : [
       "akiym <akiyama at 8ant.org>",
       "Maurice <mauricemengel at gmail.com>",
@@ -83,6 +83,8 @@
       "Flavio Poletti <flavio at polettix.it>",
       "TANIGUCHI Takaki <takaki at asis.media-as.org>",
       "Mikolaj Kucharski <mikolaj at kucharski.name>",
-      "xaicron <xaicron at gmail.com>"
+      "Neil Bowers <neil at bowers.com>",
+      "Ahmad Syaltut <Isyaltut at gmail.com>",
+      "Yuji Shimada <xaicron at gmail.com>"
    ]
 }
diff --git a/META.yml b/META.yml
index 070b99d..0d99b94 100644
--- a/META.yml
+++ b/META.yml
@@ -9,7 +9,7 @@ configure_requires:
   CPAN::Meta::Prereqs: 0
   Module::Build: 0.38
 dynamic_config: 0
-generated_by: 'Minilla/v0.5.5, CPAN::Meta::Converter version 2.130880'
+generated_by: 'Minilla/v0.5.6, CPAN::Meta::Converter version 2.131560'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,7 +27,7 @@ no_index:
 provides:
   WWW::YouTube::Download:
     file: lib/WWW/YouTube/Download.pm
-    version: 0.54
+    version: 0.56
 requires:
   HTML::Entities: 0
   JSON: 0
@@ -40,8 +40,8 @@ requires:
 resources:
   bugtracker: https://github.com/xaicron/p5-www-youtube-download/issues
   homepage: https://github.com/xaicron/p5-www-youtube-download
-  repository: git://github.com/xaicron/p5-www-youtube-download
-version: 0.54
+  repository: git://github.com/xaicron/p5-www-youtube-download.git
+version: 0.56
 x_contributors:
   - 'akiym <akiyama at 8ant.org>'
   - 'Maurice <mauricemengel at gmail.com>'
@@ -51,4 +51,6 @@ x_contributors:
   - 'Flavio Poletti <flavio at polettix.it>'
   - 'TANIGUCHI Takaki <takaki at asis.media-as.org>'
   - 'Mikolaj Kucharski <mikolaj at kucharski.name>'
-  - 'xaicron <xaicron at gmail.com>'
+  - 'Neil Bowers <neil at bowers.com>'
+  - 'Ahmad Syaltut <Isyaltut at gmail.com>'
+  - 'Yuji Shimada <xaicron at gmail.com>'
diff --git a/lib/WWW/YouTube/Download.pm b/lib/WWW/YouTube/Download.pm
index f1fd23e..8f77594 100644
--- a/lib/WWW/YouTube/Download.pm
+++ b/lib/WWW/YouTube/Download.pm
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use 5.008001;
 
-our $VERSION = '0.54';
+our $VERSION = '0.56';
 
 use Carp qw(croak);
 use URI ();
@@ -13,7 +13,7 @@ use JSON;
 use HTML::Entities qw/decode_entities/;
 use HTTP::Request;
 
-$Carp::Intrenal{ (__PACKAGE__) }++;
+$Carp::Internal{ (__PACKAGE__) }++;
 
 use constant DEFAULT_FMT => 18;
 
@@ -220,7 +220,7 @@ sub _get_args {
     for my $line (split "\n", $content) {
         next unless $line;
         if ($line =~ /the uploader has not made this video available in your country/i) {
-            Carp::croak 'Video not available in your country.';
+            croak 'Video not available in your country';
         }
         elsif ($line =~ /^.+ytplayer\.config\s*=\s*({.*})/) {
             $data = JSON->new->utf8(1)->decode($1);
@@ -228,7 +228,7 @@ sub _get_args {
         }
     }
 
-    croak 'failed to extract JSON data.' unless $data->{args};
+    croak 'failed to extract JSON data' unless $data->{args};
 
     return $data->{args};
 }
@@ -244,25 +244,52 @@ sub _parse_fmt_map {
     return $fmt_map;
 }
 
-sub _swapelement {
-    my ($pos, @list) = @_;
-    my $first = $list[0];
-    my $other = $list[$pos % scalar(@list)];
-    $list[0] = $other;
-    $list[$pos] = $first;
-    return @list;
+sub _sigdecode {
+    my @s = @_;
+
+    # based on youtube_dl/extractor/youtube.py from yt-dl.org
+    if (@s == 92) {
+	return ($s[25], @s[3..24], $s[0], @s[26..41], $s[79], @s[43..78], $s[91], @s[80..82]);
+    } elsif (@s == 90) {
+	return ($s[25], @s[3..24], $s[2], @s[26..39], $s[77], @s[41..76], $s[89], @s[78..80]);
+    } elsif (@s == 88) {
+        return ($s[48], reverse(@s[68..81]), $s[82], reverse(@s[63..66]), $s[85],
+                reverse(@s[49..61]), $s[67], reverse(@s[13..47]), $s[3],
+                reverse(@s[4..11]), $s[2], $s[12]);
+    } elsif (@s == 87) {
+        return (@s[4..22], $s[86], @s[24..84]);
+    } elsif (@s == 86) {
+        return (@s[2..62], $s[82], @s[64..81], $s[63]);
+    } elsif (@s == 85) {
+       return (@s[2..7], $s[0], @s[9..20], $s[65], @s[22..64], $s[84], @s[66..81], $s[21]);
+    } elsif (@s == 84) {
+        return (reverse(@s[37..83]), $s[2], reverse(@s[27..35]), $s[3],
+                reverse(@s[4..25]), $s[26]);
+    } elsif (@s == 83) {
+        return ($s[6], @s[3..5], $s[33], @s[7..23], $s[0], @s[25..32], $s[53], @s[34..52], $s[24], @s[54..82]);
+    } elsif (@s == 82) {
+        return ($s[36], reverse(@s[68..79]), $s[81], reverse(@s[41..66]), $s[33],
+                reverse(@s[37..39]), $s[40], $s[35], $s[0], $s[67],
+                reverse(@s[1..32]), $s[34]);
+    } elsif (@s == 81) {
+        return ($s[56], reverse(@s[57..79]), $s[41], reverse(@s[42..55]), $s[80],
+		reverse(@s[35..40]), $s[0], reverse(@s[30..33]), $s[34],
+		reverse(@s[10..28]), $s[29], reverse(@s[1..8]), $s[9]);
+    } elsif (@s == 79) {
+        return ($s[54], reverse(@s[55..77]), $s[39], reverse(@s[40..53]), $s[78],
+		reverse(@s[35..38]), $s[0], reverse(@s[30..33]), $s[34],
+		reverse(@s[10..28]), $s[29], reverse(@s[1..8]), $s[9]);
+    }
+
+    return ();    # fail
 }
 
-# taken from https://gist.github.com/anonymous/e40cb4a1ba3c71f16c05
-sub _sigdecode {
+sub _getsig {
     my $sig = shift;
-    Carp::croak 'Unable to find signature.' unless $sig;
-    my @sig = split(//, $sig);
-    @sig = reverse(_swapelement(52, @sig));
-    @sig = @sig[3..$#sig];
-    @sig = reverse(_swapelement(21, @sig));
-    @sig = @sig[3..$#sig];
-    return join('', reverse(@sig));
+    croak 'Unable to find signature' unless $sig;
+    my @sig = _sigdecode(split(//, $sig));
+    croak "Unable to decode signature $sig of length " . length($sig) unless @sig;
+    return join('', @sig);
 }
 
 sub _parse_stream_map {
@@ -272,7 +299,7 @@ sub _parse_stream_map {
         my $uri = URI->new;
         $uri->query($stuff);
         my $query = +{ $uri->query_form };
-        my $sig = $query->{sig} || _sigdecode($query->{s});
+        my $sig = $query->{sig} || _getsig($query->{s});
         my $url = $query->{url};
         $fmt_url_map->{$query->{itag}} = $url.'&signature='.$sig;
     }
@@ -319,7 +346,7 @@ sub video_id {
 sub playlist_id {
     my ($self, $stuff) = @_;
     return unless $stuff;
-    if ($stuff =~ m{/.*?[?&;!]list=([FP]L[^&#?=/;]+)}) {
+    if ($stuff =~ m{/.*?[?&;!]list=([^&#?=/;]+)}) {
         return $1;
     }
     elsif ($stuff =~ m{^\s*([FP]L[\w\-]+)\s*$}) {
diff --git a/t/playlist_id.t b/t/playlist_id.t
index 183fdea..eccd424 100644
--- a/t/playlist_id.t
+++ b/t/playlist_id.t
@@ -19,6 +19,11 @@ test_playlist_id(
 );
 
 test_playlist_id(
+    'http://www.youtube.com/watch?v=9VV8sgVSZNQ&list=ALHTd1VmZQRNpEtPhKH9FrcB_S6domiCtv',
+    'ALHTd1VmZQRNpEtPhKH9FrcB_S6domiCtv'
+);
+
+test_playlist_id(
     'http://www.youtube.com/playlist?list=PLUyiyCkoNwG8C_4ljTZWYYxmw7emk0W-f',
     'PLUyiyCkoNwG8C_4ljTZWYYxmw7emk0W-f'
 );
@@ -29,6 +34,11 @@ test_playlist_id(
 );
 
 test_playlist_id(
+    'ALHTd1VmZQRNpEtPhKH9FrcB_S6domiCtv',
+    'ALHTd1VmZQRNpEtPhKH9FrcB_S6domiCtv'
+);
+
+test_playlist_id(
     'PLu-EVkxXzIVQp07QyLO0qFNQjBHkHwPf2',
     'PLu-EVkxXzIVQp07QyLO0qFNQjBHkHwPf2'
 );
diff --git a/t/signatures.t b/t/signatures.t
new file mode 100644
index 0000000..2ad4d8f
--- /dev/null
+++ b/t/signatures.t
@@ -0,0 +1,78 @@
+use strict;
+use warnings;
+use Test::More;
+use WWW::YouTube::Download;
+
+sub test_signature_decode {
+    my ($content, $expects) = @_;
+    my $sig = WWW::YouTube::Download::_getsig($content);
+    is $sig, $expects;
+}
+
+# 92
+test_signature_decode(
+    'F9F9B6E6FD47029957AB911A964CC20D95A181A5D37A2DBEFD67D403DB0E8BE4F4910053E4E8A79.0B70B.0B80B8',
+    '69B6E6FD47029957AB911A9F4CC20D95A181A5D3.A2DBEFD67D403DB0E8BE4F4910053E4E8A7980B7',
+);
+
+# 90
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<"`',
+    'mrtyuioplkjhgfdsazxcvbne1234567890QWER[YUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={`]}|',
+);
+
+# 88
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<',
+    'J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej',
+);
+
+# 87 
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$^&*()_-+={[]}|:;?/>.<',
+    'tyuioplkjhgfdsazxcv<nm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$^&*()_-+={[]}|:;?/>',
+);
+
+# 86
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[|};?/>.<',
+    'ertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!/#$%^&*()_-+={[|};?@',
+);
+
+# 85
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?/>.<',
+    'ertyuiqplkjhgfdsazx$vbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#<%^&*()_-+={[};?/c',
+);
+
+# 84
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?>.<',
+    '<.>?;}[{=+-_)(*&^%$#@!MNBVCXZASDFGHJKLPOIUYTREWe098765432rmnbvcxzasdfghjklpoiuyt1',
+);
+ 
+# 83
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<',
+    'urty8ioplkjhgfdsazxcvbqm1234567S90QWERTYUIOPLKJHGFDnAZXCVBNM!#$%^&*()_+={[};?/>.<',
+);
+
+# 82
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.<',
+    'Q>/?;}[{=+-(*<^%$#@!MNBVCXZASDFGHKLPOIUY8REWT0q&7654321mnbvcxzasdfghjklpoiuytrew9',
+);
+
+# 81
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.',
+    'C>/?;}[{=+-(*&^%$#@!MNBVYXZASDFGHKLPOIU.TREWQ0q87659321mnbvcxzasdfghjkl4oiuytrewp',
+);
+
+# 79
+test_signature_decode(
+    'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/',
+    'Z?;}[{=+-(*&^%$#@!MNBVCXRASDFGHKLPOIUYT/EWQ0q87659321mnbvcxzasdfghjkl4oiuytrewp',
+);
+
+done_testing;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libwww-youtube-download-perl.git



More information about the Pkg-perl-cvs-commits mailing list