maj.world

maj.world

Git

This blob has been accessed 287 times via Git panel.

  1. <?php
  2.  
  3. ##########################################################################
  4. # ZipStream - Streamed, dynamically generated zip archives.              #
  5. # by Paul Duncan <pabs@pablotron.org>                                    #
  6. #                                                                        #
  7. # Copyright (C) 2007 Paul Duncan <pabs@pablotron.org>                    #
  8. #                                                                        #
  9. # Permission is hereby granted, free of charge, to any person obtaining  #
  10. # a copy of this software and associated documentation files (the        #
  11. # "Software"), to deal in the Software without restriction, including    #
  12. # without limitation the rights to use, copy, modify, merge, publish,    #
  13. # distribute, sublicense, and/or sell copies of the Software, and to     #
  14. # permit persons to whom the Software is furnished to do so, subject to  #
  15. # the following conditions:                                              #
  16. #                                                                        #
  17. # The above copyright notice and this permission notice shall be         #
  18. # included in all copies of the Software, its documentation and          #
  19. # marketing & publicity materials, and acknowledgment shall be given in  #
  20. # the documentation, materials and software packages that this Software  #
  21. # was used.                                                              #
  22. #                                                                        #
  23. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        #
  24. # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     #
  25. # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. #
  26. # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR      #
  27. # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,  #
  28. # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR  #
  29. # OTHER DEALINGS IN THE SOFTWARE.                                        #
  30. ##########################################################################
  31.  
  32. #
  33. # ZipStream - Streamed, dynamically generated zip archives.
  34. # by Paul Duncan <pabs@pablotron.org>
  35. #
  36. # Usage:
  37. #
  38. # Streaming zip archives is a simple, three-step process:
  39. #
  40. # 1.  Create the zip stream:
  41. #
  42. #     $zip = new ZipStream('example.zip');
  43. #
  44. # 2.  Add one or more files to the archive:
  45. #
  46. #     # add first file
  47. #     $data = file_get_contents('some_file.gif');
  48. #     $zip->add_file('some_file.gif', $data);
  49. #
  50. #     # add second file
  51. #     $data = file_get_contents('some_file.gif');
  52. #     $zip->add_file('another_file.png', $data);
  53. #
  54. # 3.  Finish the zip stream:
  55. #
  56. #     $zip->finish();
  57. #
  58. # You can also add an archive comment, add comments to individual files,
  59. # and adjust the timestamp of files.  See the API documentation for each
  60. # method below for additional information.
  61. #
  62. # Example:
  63. #
  64. #   # create a new zip stream object
  65. #   $zip = new ZipStream('some_files.zip');
  66. #
  67. #   # list of local files
  68. #   $files = array('foo.txt', 'bar.jpg');
  69. #
  70. #   # read and add each file to the archive
  71. #   foreach ($files as $path)
  72. #     $zip->add_file($path, file_get_contents($path));
  73. #
  74. #   # write archive footer to stream
  75. #   $zip->finish();
  76. #
  77. class ZipStream {
  78.   var $opt = array(),
  79.       $files = array(),
  80.       $cdr_ofs = 0,
  81.       $ofs = 0;
  82.  
  83.   #
  84.   # Create a new ZipStream object.
  85.   #
  86.   # Parameters:
  87.   #
  88.   #   $name - Name of output file (optional).
  89.   #   $opt  - Hash of archive options (optional, see "Archive Options"
  90.   #           below).
  91.   #
  92.   # Archive Options:
  93.   #
  94.   #   comment             - Comment for this archive.
  95.   #   content_type        - HTTP Content-Type.  Defaults to 'application/x-zip'.
  96.   #   content_disposition - HTTP Content-Disposition.  Defaults to
  97.   #                         'attachment; filename=\"FILENAME\"', where
  98.   #                         FILENAME is the specified filename.
  99.   #   large_file_size     - Size, in bytes, of the largest file to try
  100.   #                         and load into memory (used by
  101.   #                         add_file_from_path()).  Large files may also
  102.   #                         be compressed differently; see the
  103.   #                         'large_file_method' option.
  104.   #   large_file_method   - How to handle large files.  Legal values are
  105.   #                         'store' (the default), or 'deflate'.  Store
  106.   #                         sends the file raw and is significantly
  107.   #                         faster, while 'deflate' compresses the file
  108.   #                         and is much, much slower.  Note that deflate
  109.   #                         must compress the file twice and extremely
  110.   #                         slow.
  111.   #   send_http_headers   - Boolean indicating whether or not to send
  112.   #                         the HTTP headers for this file.
  113.   #
  114.   # Note that content_type and content_disposition do nothing if you are
  115.   # not sending HTTP headers.
  116.   #
  117.   # Large File Support:
  118.   #
  119.   # By default, the method add_file_from_path() will send send files
  120.   # larger than 20 megabytes along raw rather than attempting to
  121.   # compress them.  You can change both the maximum size and the
  122.   # compression behavior using the large_file_* options above, with the
  123.   # following caveats:
  124.   #
  125.   # * For "small" files (e.g. files smaller than large_file_size), the
  126.   #   memory use can be up to twice that of the actual file.  In other
  127.   #   words, adding a 10 megabyte file to the archive could potentially
  128.   #   occupty 20 megabytes of memory.
  129.   #
  130.   # * Enabling compression on large files (e.g. files larger than
  131.   #   large_file_size) is extremely slow, because ZipStream has to pass
  132.   #   over the large file once to calculate header information, and then
  133.   #   again to compress and send the actual data.
  134.   #
  135.   # Examples:
  136.   #
  137.   #   # create a new zip file named 'foo.zip'
  138.   #   $zip = new ZipStream('foo.zip');
  139.   #
  140.   #   # create a new zip file named 'bar.zip' with a comment
  141.   #   $zip = new ZipStream('bar.zip', array(
  142.   #     'comment' => 'this is a comment for the zip file.',
  143.   #   ));
  144.   #
  145.   # Notes:
  146.   #
  147.   # If you do not set a filename, then this library _DOES NOT_ send HTTP
  148.   # headers by default.  This behavior is to allow software to send its
  149.   # own headers (including the filename), and still use this library.
  150.   #
  151.   function ZipStream($name = null, $opt = array()) {
  152.     # save options
  153.     $this->opt = $opt;
  154.  
  155.     # set large file defaults: size = 20 megabytes, method = store
  156.     if (!$this->opt['large_file_size'])
  157.       $this->opt['large_file_size'] = 20 * 1024 * 1024;
  158.     if (!$this->opt['large_file_method'])
  159.       $this->opt['large_file_method'] = 'store';
  160.  
  161.     $this->output_name = $name;
  162.     if ($name || $opt['send_http_headers'])
  163.       $this->need_headers = true;
  164.   }
  165.  
  166.   #
  167.   # add_file - add a file to the archive
  168.   #
  169.   # Parameters:
  170.   #  
  171.   #  $name - path of file in archive (including directory).
  172.   #  $data - contents of file
  173.   #  $opt  - Hash of options for file (optional, see "File Options"
  174.   #          below).  
  175.   #
  176.   # File Options:
  177.   #  time     - Last-modified timestamp (seconds since the epoch) of
  178.   #             this file.  Defaults to the current time.
  179.   #  comment  - Comment related to this file.
  180.   #
  181.   # Examples:
  182.   #
  183.   #   # add a file named 'foo.txt'
  184.   #   $data = file_get_contents('foo.txt');
  185.   #   $zip->add_file('foo.txt', $data);
  186.   #
  187.   #   # add a file named 'bar.jpg' with a comment and a last-modified
  188.   #   # time of two hours ago
  189.   #   $data = file_get_contents('bar.jpg');
  190.   #   $zip->add_file('bar.jpg', $data, array(
  191.   #     'time'    => time() - 2 * 3600,
  192.   #     'comment' => 'this is a comment about bar.jpg',
  193.   #   ));
  194.   #
  195.   function add_file($name, $data, $opt = array()) {
  196.     # compress data
  197.     $zdata = gzdeflate($data);
  198.  
  199.     # calculate header attributes
  200.     $crc  = crc32($data);
  201.     $zlen = mb_strlen($zdata);
  202.     $len  = mb_strlen($data);
  203.     $meth = 0x08;
  204.  
  205.     # send file header
  206.     $this->add_file_header($name, $opt, $meth, $crc, $zlen, $len);
  207.  
  208.     # print data
  209.     $this->send($zdata);
  210.   }
  211.  
  212.   #
  213.   # add_file_from_path - add a file at path to the archive.
  214.   #
  215.   # Note that large files may be compresed differently than smaller
  216.   # files; see the "Large File Support" section above for more
  217.   # information.
  218.   #
  219.   # Parameters:
  220.   #  
  221.   #  $name - name of file in archive (including directory path).
  222.   #  $path - path to file on disk.
  223.   #  $opt  - Hash of options for file (optional, see "File Options"
  224.   #          below).  
  225.   #
  226.   # File Options:
  227.   #  time     - Last-modified timestamp (seconds since the epoch) of
  228.   #             this file.  Defaults to the current time.
  229.   #  comment  - Comment related to this file.
  230.   #
  231.   # Examples:
  232.   #
  233.   #   # add a file named 'foo.txt' from the local file '/tmp/foo.txt'
  234.   #   $zip->add_file_from_path('foo.txt', '/tmp/foo.txt');
  235.   #
  236.   #   # add a file named 'bigfile.rar' from the local file
  237.   #   # '/usr/share/bigfile.rar' with a comment and a last-modified
  238.   #   # time of two hours ago
  239.   #   $path = '/usr/share/bigfile.rar';
  240.   #   $zip->add_file_from_path('bigfile.rar', $path, array(
  241.   #     'time'    => time() - 2 * 3600,
  242.   #     'comment' => 'this is a comment about bar.jpg',
  243.   #   ));
  244.   #
  245.   function add_file_from_path($name, $path, $opt = array()) {
  246.     if ($this->is_large_file($path)) {
  247.       # file is too large to be read into memory; add progressively
  248.       $this->add_large_file($name, $path, $opt);
  249.     } else {
  250.       # file is small enough to read into memory; read file contents and
  251.       # handle with add_file()
  252.       $data = file_get_contents($path);
  253.       $this->add_file($name, $data, $opt);
  254.     }
  255.   }
  256.  
  257.   #
  258.   # finish - Write zip footer to stream.
  259.   #
  260.   # Example:
  261.   #
  262.   #   # add a list of files to the archive
  263.   #   $files = array('foo.txt', 'bar.jpg');
  264.   #   foreach ($files as $path)
  265.   #     $zip->add_file($path, file_get_contents($path));
  266.   #
  267.   #   # write footer to stream
  268.   #   $zip->finish();
  269.   #
  270.   function finish() {
  271.     # add trailing cdr record
  272.     $this->add_cdr($this->opt);
  273.     $this->clear();
  274.   }
  275.  
  276.   ###################
  277.   # PRIVATE METHODS #
  278.   ###################
  279.  
  280.   #
  281.   # Create and send zip header for this file.
  282.   #
  283.   function add_file_header($name, $opt, $meth, $crc, $zlen, $len) {
  284.     # calculate name length
  285.     $nlen = mb_strlen($name);
  286.  
  287.     # create dos timestamp
  288.     $opt['time'] = $opt['time'] ? $opt['time'] : time();
  289.     $dts = $this->dostime($opt['time']);
  290.  
  291.     # build file header
  292.     $fields = array(            # (from V.A of APPNOTE.TXT)
  293.       array('V', 0x04034b50),     # local file header signature
  294.       array('v', 0x14),           # version needed to extract
  295.       array('v', 0x00),           # general purpose bit flag
  296.       array('v', $meth),          # compresion method (deflate or store)
  297.       array('V', $dts),           # dos timestamp
  298.       array('V', $crc),           # crc32 of data
  299.       array('V', $zlen),          # compressed data length
  300.       array('V', $len),           # uncompressed data length
  301.       array('v', $nlen),          # filename length
  302.       array('v', 0),              # extra data len
  303.     );
  304.  
  305.     # pack fields and calculate "total" length
  306.     $ret = $this->pack_fields($fields);
  307.     $cdr_len = mb_strlen($ret) + $nlen + $zlen;
  308.  
  309.     # print header and filename
  310.     $this->send($ret . $name);
  311.  
  312.     # add to central directory record and increment offset
  313.     $this->add_to_cdr($name, $opt, $meth, $crc, $zlen, $len, $cdr_len);
  314.   }
  315.  
  316.   #
  317.   # Add a large file from the given path.
  318.   #
  319.   function add_large_file($name, $path, $opt = array()) {
  320.     $st = stat($path);
  321.     $block_size = 1048576; # process in 1 megabyte chunks
  322.     $algo = 'crc32b';
  323.  
  324.     # calculate header attributes
  325.     $zlen = $len = $st['size'];
  326.  
  327.     $meth_str = $this->opt['large_file_method'];
  328.     if ($meth_str == 'store') {
  329.       # store method
  330.       $meth = 0x00;
  331.       $crc  = unpack('V', hash_file($algo, $path, true));
  332.       $crc = $crc[1];
  333.     } elseif ($meth_str == 'deflate') {
  334.       # deflate method
  335.       $meth = 0x08;
  336.  
  337.       # open file, calculate crc and compressed file length
  338.       $fh = fopen($path, 'rb');
  339.       $hash_ctx = hash_init($algo);
  340.       $zlen = 0;
  341.  
  342.       # read each block, update crc and zlen
  343.       while ($data = fgets($fh, $block_size)) {
  344.         hash_update($hash_ctx, $data);
  345.         $data = gzdeflate($data);
  346.         $zlen += mb_strlen($data);
  347.       }
  348.  
  349.       # close file and finalize crc
  350.       fclose($fh);
  351.       $crc = unpack('V', hash_final($hash_ctx, true));
  352.       $crc = $crc[1];
  353.     } else {
  354.       die("unknown large_file_method: $meth_str");
  355.     }
  356.  
  357.     # send file header
  358.     $this->add_file_header($name, $opt, $meth, $crc, $zlen, $len);
  359.  
  360.     # open input file
  361.     $fh = fopen($path, 'rb');
  362.  
  363.     # send file blocks
  364.     while ($data = fgets($fh, $block_size)) {
  365.       if ($meth_str == 'deflate')
  366.         $data = gzdeflate($data);
  367.  
  368.       # send data
  369.       $this->send($data);
  370.     }
  371.  
  372.     # close input file
  373.     fclose($fh);
  374.   }
  375.  
  376.   #
  377.   # Is this file larger than large_file_size?
  378.   #
  379.   function is_large_file($path) {
  380.     $st = stat($path);
  381.     return ($this->opt['large_file_size'] > 0) &&
  382.            ($st['size'] > $this->opt['large_file_size']);
  383.   }
  384.  
  385.   #
  386.   # Save file attributes for trailing CDR record.
  387.   #
  388.   function add_to_cdr($name, $opt, $meth, $crc, $zlen, $len, $rec_len) {
  389.     $this->files[] = array($name, $opt, $meth, $crc, $zlen, $len, $this->ofs);
  390.     $this->ofs += $rec_len;
  391.   }
  392.  
  393.   #
  394.   # Send CDR record for specified file.
  395.   #
  396.   function add_cdr_file($args) {
  397.     list ($name, $opt, $meth, $crc, $zlen, $len, $ofs) = $args;
  398.  
  399.     # get attributes
  400.     $comment = $opt['comment'] ? $opt['comment'] : '';
  401.  
  402.     # get dos timestamp
  403.     $dts = $this->dostime($opt['time']);
  404.  
  405.     $fields = array(                  # (from V,F of APPNOTE.TXT)
  406.       array('V', 0x02014b50),           # central file header signature
  407.       array('v', 0x00),                 # version made by
  408.       array('v', 0x14),                 # version needed to extract
  409.       array('v', 0x00),                 # general purpose bit flag
  410.       array('v', $meth),                # compresion method (deflate or store)
  411.       array('V', $dts),                 # dos timestamp
  412.       array('V', $crc),                 # crc32 of data
  413.       array('V', $zlen),                # compressed data length
  414.       array('V', $len),                 # uncompressed data length
  415.       array('v', mb_strlen($name)),        # filename length
  416.       array('v', 0),                    # extra data len
  417.       array('v', mb_strlen($comment)),     # file comment length
  418.       array('v', 0),                    # disk number start
  419.       array('v', 0),                    # internal file attributes
  420.       array('V', 32),                   # external file attributes
  421.       array('V', $ofs),                 # relative offset of local header
  422.     );
  423.  
  424.     # pack fields, then append name and comment
  425.     $ret = $this->pack_fields($fields) . $name . $comment;
  426.  
  427.     $this->send($ret);
  428.  
  429.     # increment cdr offset
  430.     $this->cdr_ofs += mb_strlen($ret);
  431.   }
  432.  
  433.   #
  434.   # Send CDR EOF (Central Directory Record End-of-File) record.
  435.   #
  436.   function add_cdr_eof($opt = null) {
  437.     $num = count($this->files);
  438.     $cdr_len = $this->cdr_ofs;
  439.     $cdr_ofs = $this->ofs;
  440.  
  441.     # grab comment (if specified)
  442.     $comment = '';
  443.     if ($opt && $opt['comment'])
  444.       $comment = $opt['comment'];
  445.  
  446.     $fields = array(                # (from V,F of APPNOTE.TXT)
  447.       array('V', 0x06054b50),         # end of central file header signature
  448.       array('v', 0x00),               # this disk number
  449.       array('v', 0x00),               # number of disk with cdr
  450.       array('v', $num),               # number of entries in the cdr on this disk
  451.       array('v', $num),               # number of entries in the cdr
  452.       array('V', $cdr_len),           # cdr size
  453.       array('V', $cdr_ofs),           # cdr ofs
  454.       array('v', mb_strlen($comment)),   # zip file comment length
  455.     );
  456.  
  457.     $ret = $this->pack_fields($fields) . $comment;
  458.     $this->send($ret);
  459.   }
  460.  
  461.   #
  462.   # Add CDR (Central Directory Record) footer.
  463.   #
  464.   function add_cdr($opt = null) {
  465.     foreach ($this->files as $file)
  466.       $this->add_cdr_file($file);
  467.     $this->add_cdr_eof($opt);
  468.   }
  469.  
  470.   #
  471.   # Clear all internal variables.  Note that the stream object is not
  472.   # usable after this.
  473.   #
  474.   function clear() {
  475.     $this->files = array();
  476.     $this->ofs = 0;
  477.     $this->cdr_ofs = 0;
  478.     $this->opt = array();
  479.   }
  480.  
  481.   ###########################
  482.   # PRIVATE UTILITY METHODS #
  483.   ###########################
  484.  
  485.   #
  486.   # Send HTTP headers for this stream.
  487.   #
  488.   function send_http_headers() {
  489.     # grab options
  490.     $opt = $this->opt;
  491.    
  492.     # grab content type from options
  493.     $content_type = 'application/x-zip';
  494.     if ($opt['content_type'])
  495.       $content_type = $this->opt['content_type'];
  496.  
  497.     # grab content disposition
  498.     $disposition = 'attachment';
  499.     if ($opt['content_disposition'])
  500.       $disposition = $opt['content_disposition'];
  501.  
  502.     if ($this->output_name)
  503.       $disposition .= "; filename=\"{$this->output_name}\"";
  504.  
  505.     $headers = array(
  506.       'Content-Type'              => $content_type,
  507.       'Content-Disposition'       => $disposition,
  508.       'Pragma'                    => 'public',
  509.       'Cache-Control'             => 'public, must-revalidate',
  510.       'Content-Transfer-Encoding' => 'binary',
  511.     );
  512.  
  513.     foreach ($headers as $key => $val)
  514.       header("$key: $val");
  515.   }
  516.  
  517.   #
  518.   # Send string, sending HTTP headers if necessary.
  519.   #
  520.   function send($str) {
  521.     if ($this->need_headers)
  522.       $this->send_http_headers();
  523.     $this->need_headers = false;
  524.  
  525.     echo $str;
  526.   }
  527.  
  528.   #
  529.   # Convert a UNIX timestamp to a DOS timestamp.
  530.   #
  531.   function dostime($when = 0) {
  532.     # get date array for timestamp
  533.     $d = getdate($when);
  534.  
  535.     # set lower-bound on dates
  536.     if ($d['year'] < 1980) {
  537.       $d = array('year' => 1980, 'mon' => 1, 'mday' => 1,
  538.                  'hours' => 0, 'minutes' => 0, 'seconds' => 0);
  539.     }
  540.  
  541.     # remove extra years from 1980
  542.     $d['year'] -= 1980;
  543.  
  544.     # return date string
  545.     return ($d['year'] << 25) | ($d['mon'] << 21) | ($d['mday'] << 16) |
  546.            ($d['hours'] << 11) | ($d['minutes'] << 5) | ($d['seconds'] >> 1);
  547.   }
  548.  
  549.   #
  550.   # Create a format string and argument list for pack(), then call
  551.   # pack() and return the result.
  552.   #
  553.   function pack_fields($fields) {
  554.     list ($fmt, $args) = array('', array());
  555.  
  556.     # populate format string and argument list
  557.     foreach ($fields as $field) {
  558.       $fmt .= $field[0];
  559.       $args[] = $field[1];
  560.     }
  561.  
  562.     # prepend format string to argument list
  563.     array_unshift($args, $fmt);
  564.  
  565.     # build output string from header and compressed data
  566.     return call_user_func_array('pack', $args);
  567.   }
  568. };
  569.  
  570. ?>
  571.  
filedropmaj.git-01822e4.tar.bz2
147.95 KB
63 downloads
filedropmaj.git-01822e4.zip
201.96 KB
20 downloads
filedropmaj.git-0291349.tar.bz2
152.85 KB
61 downloads
filedropmaj.git-0291349.zip
211.90 KB
20 downloads
filedropmaj.git-02cb3b7.tar.bz2
151.48 KB
64 downloads
filedropmaj.git-02cb3b7.zip
209.82 KB
20 downloads
filedropmaj.git-0811dd5.tar.bz2
152.90 KB
60 downloads
filedropmaj.git-0811dd5.zip
211.90 KB
18 downloads
filedropmaj.git-083625f.tar.bz2
132.92 KB
59 downloads
filedropmaj.git-083625f.zip
179.59 KB
20 downloads
filedropmaj.git-0885d7b.tar.bz2
92.63 KB
60 downloads
filedropmaj.git-0885d7b.zip
132.34 KB
17 downloads
filedropmaj.git-09c6f33.tar.bz2
151.51 KB
59 downloads
filedropmaj.git-09c6f33.zip
202.12 KB
18 downloads
filedropmaj.git-0b26a85.tar.bz2
151.44 KB
57 downloads
filedropmaj.git-0b26a85.zip
209.75 KB
16 downloads
filedropmaj.git-0b32424.tar.bz2
151.66 KB
58 downloads
filedropmaj.git-0b32424.zip
206.72 KB
17 downloads
filedropmaj.git-0f3ac59.tar.bz2
152.14 KB
57 downloads
filedropmaj.git-0f3ac59.zip
211.45 KB
13 downloads
filedropmaj.git-11d4582.tar.bz2
143.02 KB
55 downloads
filedropmaj.git-11d4582.zip
195.12 KB
12 downloads
filedropmaj.git-17f105a.tar.bz2
137.96 KB
53 downloads
filedropmaj.git-17f105a.zip
193.02 KB
13 downloads
filedropmaj.git-183270b.tar.bz2
137.54 KB
57 downloads
filedropmaj.git-183270b.zip
187.93 KB
13 downloads
filedropmaj.git-197a49d.tar.bz2
152.03 KB
55 downloads
filedropmaj.git-197a49d.zip
211.32 KB
16 downloads
filedropmaj.git-1b9af25.tar.bz2
152.87 KB
53 downloads
filedropmaj.git-1b9af25.zip
211.96 KB
14 downloads
filedropmaj.git-1be2914.tar.bz2
149.30 KB
55 downloads
filedropmaj.git-1be2914.zip
203.09 KB
13 downloads
filedropmaj.git-1bed800.tar.bz2
138.15 KB
51 downloads
filedropmaj.git-1bed800.zip
190.15 KB
17 downloads
filedropmaj.git-1d330de.tar.bz2
151.65 KB
54 downloads
filedropmaj.git-1d330de.zip
210.80 KB
15 downloads
filedropmaj.git-1df190d.tar.bz2
151.72 KB
55 downloads
filedropmaj.git-1df190d.zip
210.85 KB
13 downloads
filedropmaj.git-1ee1167.tar.bz2
151.52 KB
56 downloads
filedropmaj.git-1ee1167.zip
202.16 KB
14 downloads
filedropmaj.git-2057838.tar.bz2
151.76 KB
52 downloads
filedropmaj.git-2057838.zip
202.36 KB
14 downloads
filedropmaj.git-2075213.tar.bz2
155.81 KB
52 downloads
filedropmaj.git-2075213.zip
208.39 KB
13 downloads
filedropmaj.git-211b7b0.tar.bz2
142.53 KB
55 downloads
filedropmaj.git-211b7b0.zip
194.64 KB
14 downloads
filedropmaj.git-2331f5a.tar.bz2
75.55 KB
55 downloads
filedropmaj.git-2331f5a.zip
100.32 KB
16 downloads
filedropmaj.git-25e3c4c.tar.bz2
147.57 KB
53 downloads
filedropmaj.git-25e3c4c.zip
201.46 KB
13 downloads
filedropmaj.git-2622313.tar.bz2
151.47 KB
50 downloads
filedropmaj.git-2622313.zip
206.44 KB
12 downloads
filedropmaj.git-273e4b2.tar.bz2
152.60 KB
52 downloads
filedropmaj.git-273e4b2.zip
203.40 KB
15 downloads
filedropmaj.git-2753e51.tar.bz2
136.37 KB
55 downloads
filedropmaj.git-2753e51.zip
184.34 KB
12 downloads
filedropmaj.git-2c1a589.tar.bz2
155.89 KB
49 downloads
filedropmaj.git-2c1a589.zip
208.69 KB
13 downloads
filedropmaj.git-2c3d544.tar.bz2
151.33 KB
51 downloads
filedropmaj.git-2c3d544.zip
206.23 KB
14 downloads
filedropmaj.git-2c85f72.tar.bz2
143.23 KB
50 downloads
filedropmaj.git-2c85f72.zip
194.84 KB
12 downloads
filedropmaj.git-2dc622c.tar.bz2
151.76 KB
48 downloads
filedropmaj.git-2dc622c.zip
202.35 KB
14 downloads
filedropmaj.git-2fabf8a.tar.bz2
151.35 KB
53 downloads
filedropmaj.git-2fabf8a.zip
206.24 KB
15 downloads
filedropmaj.git-322736b.tar.bz2
137.81 KB
45 downloads
filedropmaj.git-322736b.zip
190.18 KB
13 downloads
filedropmaj.git-374279c.tar.bz2
137.54 KB
46 downloads
filedropmaj.git-374279c.zip
189.58 KB
12 downloads
filedropmaj.git-37e852d.tar.bz2
151.32 KB
42 downloads
filedropmaj.git-37e852d.zip
206.21 KB
11 downloads
filedropmaj.git-38636de.tar.bz2
147.35 KB
42 downloads
filedropmaj.git-38636de.zip
201.16 KB
69 downloads
filedropmaj.git-3b25d71.tar.bz2
147.88 KB
35 downloads
filedropmaj.git-3b25d71.zip
201.85 KB
14 downloads
filedropmaj.git-3b6df7a.tar.bz2
153.39 KB
33 downloads
filedropmaj.git-3b6df7a.zip
204.55 KB
17 downloads
filedropmaj.git-3bf6bd2.tar.bz2
137.77 KB
38 downloads
filedropmaj.git-3bf6bd2.zip
190.16 KB
14 downloads
filedropmaj.git-3e012ff.tar.bz2
152.83 KB
34 downloads
filedropmaj.git-3e012ff.zip
211.89 KB
16 downloads
filedropmaj.git-4129ab8.tar.bz2
135.86 KB
42 downloads
filedropmaj.git-4129ab8.zip
184.30 KB
14 downloads
filedropmaj.git-414dbb4.tar.bz2
91.09 KB
40 downloads
filedropmaj.git-414dbb4.zip
130.29 KB
14 downloads
filedropmaj.git-43755d0.tar.bz2
150.25 KB
33 downloads
filedropmaj.git-43755d0.zip
204.44 KB
14 downloads
filedropmaj.git-4c20005.tar.bz2
55.59 KB
37 downloads
filedropmaj.git-4c20005.zip
74.20 KB
14 downloads
filedropmaj.git-4ccdbcd.tar.bz2
136.38 KB
38 downloads
filedropmaj.git-4ccdbcd.zip
185.22 KB
16 downloads
filedropmaj.git-4cd1a1c.tar.bz2
155.25 KB
35 downloads
filedropmaj.git-4cd1a1c.zip
207.88 KB
16 downloads
filedropmaj.git-4cf16d1.tar.bz2
76.32 KB
38 downloads
filedropmaj.git-4cf16d1.zip
101.80 KB
12 downloads
filedropmaj.git-4ec45a0.tar.bz2
131.16 KB
35 downloads
filedropmaj.git-4ec45a0.zip
172.66 KB
14 downloads
filedropmaj.git-4f73c22.tar.bz2
134.46 KB
35 downloads
filedropmaj.git-4f73c22.zip
182.45 KB
13 downloads
filedropmaj.git-5457969.tar.bz2
155.21 KB
38 downloads
filedropmaj.git-5457969.zip
207.63 KB
14 downloads
filedropmaj.git-57ee8a1.tar.bz2
145.49 KB
38 downloads
filedropmaj.git-57ee8a1.zip
198.12 KB
66 downloads
filedropmaj.git-592978d.tar.bz2
138.38 KB
36 downloads
filedropmaj.git-592978d.zip
190.58 KB
13 downloads
filedropmaj.git-5935b42.tar.bz2
135.60 KB
34 downloads
filedropmaj.git-5935b42.zip
183.28 KB
15 downloads
filedropmaj.git-5b443b6.tar.bz2
152.00 KB
36 downloads
filedropmaj.git-5b443b6.zip
211.07 KB
13 downloads
filedropmaj.git-5b4a9bf.tar.bz2
155.29 KB
34 downloads
filedropmaj.git-5b4a9bf.zip
207.93 KB
12 downloads
filedropmaj.git-5b6c01d.tar.bz2
147.13 KB
35 downloads
filedropmaj.git-5b6c01d.zip
200.86 KB
16 downloads
filedropmaj.git-5da45f7.tar.bz2
147.27 KB
36 downloads
filedropmaj.git-5da45f7.zip
201.02 KB
13 downloads
filedropmaj.git-5e53618.tar.bz2
75.57 KB
38 downloads
filedropmaj.git-5e53618.zip
100.78 KB
14 downloads
filedropmaj.git-5f8ca35.tar.bz2
136.39 KB
33 downloads
filedropmaj.git-5f8ca35.zip
185.32 KB
13 downloads
filedropmaj.git-61e3d7b.tar.bz2
153.52 KB
33 downloads
filedropmaj.git-61e3d7b.zip
204.73 KB
15 downloads
filedropmaj.git-62a635c.tar.bz2
155.90 KB
37 downloads
filedropmaj.git-62a635c.zip
208.73 KB
14 downloads
filedropmaj.git-6390d34.tar.bz2
138.39 KB
37 downloads
filedropmaj.git-6390d34.zip
190.56 KB
17 downloads
filedropmaj.git-649dfbe.tar.bz2
151.78 KB
37 downloads
filedropmaj.git-649dfbe.zip
210.91 KB
14 downloads
filedropmaj.git-65d6570.tar.bz2
151.63 KB
39 downloads
filedropmaj.git-65d6570.zip
210.80 KB
16 downloads
filedropmaj.git-660433f.tar.bz2
151.67 KB
36 downloads
filedropmaj.git-660433f.zip
206.68 KB
14 downloads
filedropmaj.git-6619ae5.tar.bz2
153.23 KB
47 downloads
filedropmaj.git-6619ae5.zip
204.28 KB
13 downloads
filedropmaj.git-68e4e3a.tar.bz2
135.13 KB
34 downloads
filedropmaj.git-68e4e3a.zip
182.91 KB
13 downloads
filedropmaj.git-6995297.tar.bz2
144.93 KB
38 downloads
filedropmaj.git-6995297.zip
197.18 KB
12 downloads
filedropmaj.git-69d6fd3.tar.bz2
143.23 KB
34 downloads
filedropmaj.git-69d6fd3.zip
194.89 KB
16 downloads
filedropmaj.git-6aa872a.tar.bz2
142.95 KB
39 downloads
filedropmaj.git-6aa872a.zip
195.11 KB
15 downloads
filedropmaj.git-6bad5c7.tar.bz2
147.04 KB
38 downloads
filedropmaj.git-6bad5c7.zip
200.79 KB
14 downloads
filedropmaj.git-6e96a2d.tar.bz2
152.13 KB
37 downloads
filedropmaj.git-6e96a2d.zip
207.21 KB
67 downloads
filedropmaj.git-73d46de.tar.bz2
138.42 KB
36 downloads
filedropmaj.git-73d46de.zip
190.59 KB
13 downloads
filedropmaj.git-75e0478.tar.bz2
144.54 KB
38 downloads
filedropmaj.git-75e0478.zip
196.70 KB
15 downloads
filedropmaj.git-784fc35.tar.bz2
143.07 KB
38 downloads
filedropmaj.git-784fc35.zip
195.01 KB
13 downloads
filedropmaj.git-7872a83.tar.bz2
138.51 KB
39 downloads
filedropmaj.git-7872a83.zip
190.69 KB
13 downloads
filedropmaj.git-788fb89.tar.bz2
138.30 KB
37 downloads
filedropmaj.git-788fb89.zip
191.26 KB
18 downloads
filedropmaj.git-796d8a3.tar.bz2
138.92 KB
35 downloads
filedropmaj.git-796d8a3.zip
191.24 KB
13 downloads
filedropmaj.git-79a5e8d.tar.bz2
132.43 KB
38 downloads
filedropmaj.git-79a5e8d.zip
176.90 KB
14 downloads
filedropmaj.git-7b3b2e0.tar.bz2
147.24 KB
36 downloads
filedropmaj.git-7b3b2e0.zip
201.05 KB
14 downloads
filedropmaj.git-7e28eed.tar.bz2
138.89 KB
33 downloads
filedropmaj.git-7e28eed.zip
191.24 KB
14 downloads
filedropmaj.git-8279296.tar.bz2
135.56 KB
38 downloads
filedropmaj.git-8279296.zip
183.25 KB
14 downloads
filedropmaj.git-84c17fe.tar.bz2
152.87 KB
38 downloads
filedropmaj.git-84c17fe.zip
211.90 KB
14 downloads
filedropmaj.git-87c5d5f.tar.bz2
135.78 KB
36 downloads
filedropmaj.git-87c5d5f.zip
183.64 KB
12 downloads
filedropmaj.git-8a48901.tar.bz2
147.27 KB
39 downloads
filedropmaj.git-8a48901.zip
201.06 KB
14 downloads
filedropmaj.git-8ad9892.tar.bz2
164.04 KB
36 downloads
filedropmaj.git-8ad9892.zip
224.42 KB
13 downloads
filedropmaj.git-8b4cf2a.tar.bz2
134.06 KB
37 downloads
filedropmaj.git-8b4cf2a.zip
180.78 KB
14 downloads
filedropmaj.git-8b7e38d.tar.bz2
138.04 KB
41 downloads
filedropmaj.git-8b7e38d.zip
190.39 KB
70 downloads
filedropmaj.git-8df6e40.tar.bz2
143.11 KB
38 downloads
filedropmaj.git-8df6e40.zip
194.66 KB
18 downloads
filedropmaj.git-8e80c84.tar.bz2
138.18 KB
36 downloads
filedropmaj.git-8e80c84.zip
190.30 KB
14 downloads
filedropmaj.git-8ec0fba.tar.bz2
138.37 KB
39 downloads
filedropmaj.git-8ec0fba.zip
191.39 KB
14 downloads
filedropmaj.git-8f7abf6.tar.bz2
153.36 KB
38 downloads
filedropmaj.git-8f7abf6.zip
211.80 KB
13 downloads
filedropmaj.git-923f11a.tar.bz2
138.14 KB
36 downloads
filedropmaj.git-923f11a.zip
191.03 KB
15 downloads
filedropmaj.git-955e82e.tar.bz2
42.71 KB
35 downloads
filedropmaj.git-955e82e.zip
59.77 KB
14 downloads
filedropmaj.git-95add4a.tar.bz2
151.23 KB
40 downloads
filedropmaj.git-95add4a.zip
205.91 KB
14 downloads
filedropmaj.git-96fe0ba.tar.bz2
137.68 KB
32 downloads
filedropmaj.git-96fe0ba.zip
190.34 KB
13 downloads
filedropmaj.git-99a90ce.tar.bz2
137.82 KB
39 downloads
filedropmaj.git-99a90ce.zip
191.20 KB
16 downloads
filedropmaj.git-9a69bb9.tar.bz2
143.19 KB
39 downloads
filedropmaj.git-9a69bb9.zip
194.70 KB
15 downloads
filedropmaj.git-9b6538e.tar.bz2
151.45 KB
36 downloads
filedropmaj.git-9b6538e.zip
202.15 KB
13 downloads
filedropmaj.git-9c4292d.tar.bz2
132.06 KB
37 downloads
filedropmaj.git-9c4292d.zip
176.93 KB
13 downloads
filedropmaj.git-9c78d40.tar.bz2
137.70 KB
37 downloads
filedropmaj.git-9c78d40.zip
190.49 KB
15 downloads
filedropmaj.git-9f1363f.tar.bz2
43.12 KB
40 downloads
filedropmaj.git-9f1363f.zip
60.31 KB
13 downloads
filedropmaj.git-a16c3eb.tar.bz2
90.22 KB
34 downloads
filedropmaj.git-a16c3eb.zip
128.62 KB
14 downloads
filedropmaj.git-a3aa72d.tar.bz2
153.00 KB
37 downloads
filedropmaj.git-a3aa72d.zip
203.86 KB
16 downloads
filedropmaj.git-a6886e4.tar.bz2
144.69 KB
37 downloads
filedropmaj.git-a6886e4.zip
196.95 KB
13 downloads
filedropmaj.git-a8669dc.tar.bz2
135.60 KB
35 downloads
filedropmaj.git-a8669dc.zip
183.34 KB
14 downloads
filedropmaj.git-a9477f1.tar.bz2
135.59 KB
37 downloads
filedropmaj.git-a9477f1.zip
183.45 KB
14 downloads
filedropmaj.git-aa285db.tar.bz2
151.73 KB
38 downloads
filedropmaj.git-aa285db.zip
210.85 KB
14 downloads
filedropmaj.git-aa6ae87.tar.bz2
135.44 KB
37 downloads
filedropmaj.git-aa6ae87.zip
183.88 KB
14 downloads
filedropmaj.git-ab6bc22.tar.bz2
151.71 KB
33 downloads
filedropmaj.git-ab6bc22.zip
210.84 KB
16 downloads
filedropmaj.git-adef726.tar.bz2
153.48 KB
36 downloads
filedropmaj.git-adef726.zip
212.32 KB
14 downloads
filedropmaj.git-afe5877.tar.bz2
144.73 KB
32 downloads
filedropmaj.git-afe5877.zip
197.01 KB
13 downloads
filedropmaj.git-b2d9f8e.tar.bz2
133.22 KB
35 downloads
filedropmaj.git-b2d9f8e.zip
179.27 KB
13 downloads
filedropmaj.git-b41f320.tar.bz2
151.56 KB
33 downloads
filedropmaj.git-b41f320.zip
209.85 KB
18 downloads
filedropmaj.git-b4432ce.tar.bz2
152.96 KB
34 downloads
filedropmaj.git-b4432ce.zip
203.86 KB
14 downloads
filedropmaj.git-b67b08f.tar.bz2
151.27 KB
36 downloads
filedropmaj.git-b67b08f.zip
206.15 KB
16 downloads
filedropmaj.git-b899831.tar.bz2
143.12 KB
35 downloads
filedropmaj.git-b899831.zip
194.60 KB
14 downloads
filedropmaj.git-b8b49c1.tar.bz2
132.59 KB
33 downloads
filedropmaj.git-b8b49c1.zip
178.90 KB
13 downloads
filedropmaj.git-b9c5bcf.tar.bz2
155.92 KB
34 downloads
filedropmaj.git-b9c5bcf.zip
208.70 KB
12 downloads
filedropmaj.git-bbddb1f.tar.bz2
151.63 KB
33 downloads
filedropmaj.git-bbddb1f.zip
209.92 KB
16 downloads
filedropmaj.git-bcaa744.tar.bz2
146.98 KB
37 downloads
filedropmaj.git-bcaa744.zip
200.79 KB
15 downloads
filedropmaj.git-c1ff9dc.tar.bz2
138.39 KB
38 downloads
filedropmaj.git-c1ff9dc.zip
191.43 KB
97 downloads
filedropmaj.git-c20c4b0.tar.bz2
151.64 KB
35 downloads
filedropmaj.git-c20c4b0.zip
210.79 KB
13 downloads
filedropmaj.git-c37f3f7.tar.bz2
145.45 KB
49 downloads
filedropmaj.git-c37f3f7.zip
198.11 KB
22 downloads
filedropmaj.git-c532394.tar.bz2
146.39 KB
37 downloads
filedropmaj.git-c532394.zip
199.91 KB
15 downloads
filedropmaj.git-c6317a4.tar.bz2
152.01 KB
36 downloads
filedropmaj.git-c6317a4.zip
207.08 KB
13 downloads
filedropmaj.git-c748176.tar.bz2
89.44 KB
34 downloads
filedropmaj.git-c748176.zip
126.35 KB
14 downloads
filedropmaj.git-c9ed81f.tar.bz2
135.56 KB
34 downloads
filedropmaj.git-c9ed81f.zip
183.28 KB
16 downloads
filedropmaj.git-c9f9b80.tar.bz2
138.50 KB
34 downloads
filedropmaj.git-c9f9b80.zip
190.66 KB
15 downloads
filedropmaj.git-ca65b73.tar.bz2
152.69 KB
35 downloads
filedropmaj.git-ca65b73.zip
207.87 KB
15 downloads
filedropmaj.git-cd80b77.tar.bz2
153.12 KB
35 downloads
filedropmaj.git-cd80b77.zip
212.01 KB
12 downloads
filedropmaj.git-cffbb2a.tar.bz2
138.22 KB
33 downloads
filedropmaj.git-cffbb2a.zip
190.28 KB
14 downloads
filedropmaj.git-d061ad7.tar.bz2
55.78 KB
47 downloads
filedropmaj.git-d061ad7.zip
74.39 KB
15 downloads
filedropmaj.git-d0af4d6.tar.bz2
57.28 KB
35 downloads
filedropmaj.git-d0af4d6.zip
78.56 KB
15 downloads
filedropmaj.git-d1caa0a.tar.bz2
144.57 KB
37 downloads
filedropmaj.git-d1caa0a.zip
196.63 KB
14 downloads
filedropmaj.git-d5679b5.tar.bz2
152.37 KB
34 downloads
filedropmaj.git-d5679b5.zip
207.52 KB
15 downloads
filedropmaj.git-d72f459.tar.bz2
147.90 KB
36 downloads
filedropmaj.git-d72f459.zip
201.92 KB
13 downloads
filedropmaj.git-d958c91.tar.bz2
144.67 KB
37 downloads
filedropmaj.git-d958c91.zip
196.88 KB
17 downloads
filedropmaj.git-d96784f.tar.bz2
135.58 KB
36 downloads
filedropmaj.git-d96784f.zip
183.46 KB
12 downloads
filedropmaj.git-da4b73f.tar.bz2
152.62 KB
33 downloads
filedropmaj.git-da4b73f.zip
203.48 KB
13 downloads
filedropmaj.git-dd24240.tar.bz2
138.27 KB
33 downloads
filedropmaj.git-dd24240.zip
190.45 KB
72 downloads
filedropmaj.git-e11e772.tar.bz2
152.09 KB
33 downloads
filedropmaj.git-e11e772.zip
211.33 KB
14 downloads
filedropmaj.git-e61478e.tar.bz2
135.95 KB
37 downloads
filedropmaj.git-e61478e.zip
183.91 KB
14 downloads
filedropmaj.git-e7a2547.tar.bz2
133.80 KB
33 downloads
filedropmaj.git-e7a2547.zip
180.05 KB
16 downloads
filedropmaj.git-e8a3b95.tar.bz2
138.15 KB
37 downloads
filedropmaj.git-e8a3b95.zip
191.04 KB
12 downloads
filedropmaj.git-eac86d5.tar.bz2
155.65 KB
33 downloads
filedropmaj.git-eac86d5.zip
208.28 KB
12 downloads
filedropmaj.git-ed83bf9.tar.bz2
135.16 KB
34 downloads
filedropmaj.git-ed83bf9.zip
182.91 KB
15 downloads
filedropmaj.git-ee50d40.tar.bz2
135.59 KB
36 downloads
filedropmaj.git-ee50d40.zip
183.48 KB
16 downloads
filedropmaj.git-efdb4df.tar.bz2
155.87 KB
36 downloads
filedropmaj.git-efdb4df.zip
208.72 KB
14 downloads
filedropmaj.git-f1554f8.tar.bz2
151.30 KB
37 downloads
filedropmaj.git-f1554f8.zip
206.22 KB
16 downloads
filedropmaj.git-f72a07b.tar.bz2
153.44 KB
37 downloads
filedropmaj.git-f72a07b.zip
212.11 KB
17 downloads
filedropmaj.git-f7ea5a1.tar.bz2
147.46 KB
36 downloads
filedropmaj.git-f7ea5a1.zip
201.32 KB
17 downloads
filedropmaj.git-f8a7353.tar.bz2
138.49 KB
36 downloads
filedropmaj.git-f8a7353.zip
190.66 KB
18 downloads
filedropmaj.git-fb84a8d.tar.bz2
137.61 KB
41 downloads
filedropmaj.git-fb84a8d.zip
190.70 KB
18 downloads
filedropmaj.git-fdcf5d3.tar.bz2
152.34 KB
40 downloads
filedropmaj.git-fdcf5d3.zip
207.53 KB
17 downloads
filedropmaj.git-feca42d.tar.bz2
132.90 KB
39 downloads
filedropmaj.git-feca42d.zip
179.44 KB
20 downloads