{ "info": { "author": "Zooko O\\'Whielacronx", "author_email": "zooko@zooko.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: DFSG approved", "License :: OSI Approved", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "License :: Other/Proprietary License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft", "Operating System :: Microsoft :: Windows", "Operating System :: Microsoft :: Windows :: Windows NT/2000", "Operating System :: OS Independent", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: C", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: Usenet News", "Topic :: Software Development :: Libraries", "Topic :: System :: Archiving", "Topic :: System :: Archiving :: Backup", "Topic :: System :: Archiving :: Mirroring", "Topic :: System :: Distributed Computing", "Topic :: System :: Filesystems", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "\ufeff\n\nzfec -- efficient, portable erasure coding tool\n===============================================\n\nGenerate redundant blocks of information such that if some of the blocks are\nlost then the original data can be recovered from the remaining blocks. This\npackage includes command-line tools, C API, Python API, and Haskell API.\n\n|pypi| |travis| |appveyor|\n\nIntro and Licence\n-----------------\n\nThis package implements an \"erasure code\", or \"forward error correction\ncode\".\n\nYou may use this package under the GNU General Public License, version 2 or,\nat your option, any later version. You may use this package under the\nTransitive Grace Period Public Licence, version 1.0 or, at your option, any\nlater version. (You may choose to use this package under the terms of either\nlicence, at your option.) See the file COPYING.GPL for the terms of the GNU\nGeneral Public License, version 2. See the file COPYING.TGPPL.rst for the\nterms of the Transitive Grace Period Public Licence, version 1.0.\n\nThe most widely known example of an erasure code is the RAID-5 algorithm\nwhich makes it so that in the event of the loss of any one hard drive, the\nstored data can be completely recovered. The algorithm in the zfec package\nhas a similar effect, but instead of recovering from the loss of only a\nsingle element, it can be parameterized to choose in advance the number of\nelements whose loss it can tolerate.\n\nThis package is largely based on the old \"fec\" library by Luigi Rizzo et al.,\nwhich is a mature and optimized implementation of erasure coding. The zfec\npackage makes several changes from the original \"fec\" package, including\naddition of the Python API, refactoring of the C API to support zero-copy\noperation, a few clean-ups and optimizations of the core code itself, and the\naddition of a command-line tool named \"zfec\".\n\n\nInstallation\n------------\n\n``pip install zfec``\n\nTo run the self-tests, execute ``tox`` from an unpacked source tree or git checkout.\n\nTo run the tests of the Haskell API: ``runhaskell haskell/test/FECTest.hs``\n\nNote that in order to run the Haskell API tests you must have installed the\nlibrary first due to the fact that the interpreter cannot process FEC.hs as\nit takes a reference to an FFI function.\n\n\nCommunity\n---------\n\nThe source is currently available via git on the web with the command:\n\n``git clone https://github.com/tahoe-lafs/zfec``\n\nPlease post about zfec to the Tahoe-LAFS mailing list and contribute patches:\n\n\n\nIf you find a bug in zfec, please open an issue on github:\n\n\n\nOverview\n--------\n\nThis package performs two operations, encoding and decoding. Encoding takes\nsome input data and expands its size by producing extra \"check blocks\", also\ncalled \"secondary blocks\". Decoding takes some data -- any combination of\nblocks of the original data (called \"primary blocks\") and \"secondary blocks\",\nand produces the original data.\n\nThe encoding is parameterized by two integers, k and m. m is the total\nnumber of blocks produced, and k is how many of those blocks are necessary to\nreconstruct the original data. m is required to be at least 1 and at most\n256, and k is required to be at least 1 and at most m.\n\n(Note that when k == m then there is no point in doing erasure coding -- it\ndegenerates to the equivalent of the Unix \"split\" utility which simply splits\nthe input into successive segments. Similarly, when k == 1 it degenerates to\nthe equivalent of the unix \"cp\" utility -- each block is a complete copy of\nthe input data.)\n\nNote that each \"primary block\" is a segment of the original data, so its size\nis 1/k'th of the size of original data, and each \"secondary block\" is of the\nsame size, so the total space used by all the blocks is m/k times the size of\nthe original data (plus some padding to fill out the last primary block to be\nthe same size as all the others). In addition to the data contained in the\nblocks themselves there are also a few pieces of metadata which are necessary\nfor later reconstruction. Those pieces are: 1. the value of K, 2. the\nvalue of M, 3. the sharenum of each block, 4. the number of bytes of\npadding that were used. The \"zfec\" command-line tool compresses these pieces\nof data and prepends them to the beginning of each share, so each the\nsharefile produced by the \"zfec\" command-line tool is between one and four\nbytes larger than the share data alone.\n\nThe decoding step requires as input k of the blocks which were produced by\nthe encoding step. The decoding step produces as output the data that was\nearlier input to the encoding step.\n\n\nCommand-Line Tool\n-----------------\n\nThe bin/ directory contains two Unix-style, command-line tools \"zfec\" and\n\"zunfec\". Execute ``zfec --help`` or ``zunfec --help`` for usage\ninstructions.\n\n\nPerformance\n-----------\n\nTo run the benchmarks, execute the included bench/bench_zfec.py script with\noptional --k= and --m= arguments.\n\nOn my Athlon 64 2.4 GHz workstation (running Linux), the \"zfec\" command-line\ntool encoded a 160 MB file with m=100, k=94 (about 6% redundancy) in 3.9\nseconds, where the \"par2\" tool encoded the file with about 6% redundancy in\n27 seconds. zfec encoded the same file with m=12, k=6 (100% redundancy) in\n4.1 seconds, where par2 encoded it with about 100% redundancy in 7 minutes\nand 56 seconds.\n\nThe underlying C library in benchmark mode encoded from a file at about 4.9\nmillion bytes per second and decoded at about 5.8 million bytes per second.\n\nOn Peter's fancy Intel Mac laptop (2.16 GHz Core Duo), it encoded from a file\nat about 6.2 million bytes per second.\n\nOn my even fancier Intel Mac laptop (2.33 GHz Core Duo), it encoded from a\nfile at about 6.8 million bytes per second.\n\nOn my old PowerPC G4 867 MHz Mac laptop, it encoded from a file at about 1.3\nmillion bytes per second.\n\nHere is a paper analyzing the performance of various erasure codes and their\nimplementations, including zfec:\n\nhttp://www.usenix.org/events/fast09/tech/full_papers/plank/plank.pdf\n\nZfec shows good performance on different machines and with different values\nof K and M. It also has a nice small memory footprint.\n\n\nAPI\n---\n\nEach block is associated with \"blocknum\". The blocknum of each primary block\nis its index (starting from zero), so the 0'th block is the first primary\nblock, which is the first few bytes of the file, the 1'st block is the next\nprimary block, which is the next few bytes of the file, and so on. The last\nprimary block has blocknum k-1. The blocknum of each secondary block is an\narbitrary integer between k and 255 inclusive. (When using the Python API,\nif you don't specify which secondary blocks you want when invoking encode(),\nthen it will by default provide the blocks with ids from k to m-1 inclusive.)\n\n- C API\n\n fec_encode() takes as input an array of k pointers, where each pointer\n points to a memory buffer containing the input data (i.e., the i'th buffer\n contains the i'th primary block). There is also a second parameter which\n is an array of the blocknums of the secondary blocks which are to be\n produced. (Each element in that array is required to be the blocknum of a\n secondary block, i.e. it is required to be >= k and < m.)\n\n The output from fec_encode() is the requested set of secondary blocks which\n are written into output buffers provided by the caller.\n\n Note that this fec_encode() is a \"low-level\" API in that it requires the\n input data to be provided in a set of memory buffers of exactly the right\n sizes. If you are starting instead with a single buffer containing all of\n the data then please see easyfec.py's \"class Encoder\" as an example of how\n to split a single large buffer into the appropriate set of input buffers\n for fec_encode(). If you are starting with a file on disk, then please see\n filefec.py's encode_file_stringy_easyfec() for an example of how to read\n the data from a file and pass it to \"class Encoder\". The Python interface\n provides these higher-level operations, as does the Haskell interface. If\n you implement functions to do these higher-level tasks in other languages,\n please send a patch to tahoe-dev@tahoe-lafs.org so that your API can be\n included in future releases of zfec.\n\n fec_decode() takes as input an array of k pointers, where each pointer\n points to a buffer containing a block. There is also a separate input\n parameter which is an array of blocknums, indicating the blocknum of each\n of the blocks which is being passed in.\n\n The output from fec_decode() is the set of primary blocks which were\n missing from the input and had to be reconstructed. These reconstructed\n blocks are written into output buffers provided by the caller.\n\n\n- Python API\n\n encode() and decode() take as input a sequence of k buffers, where a\n \"sequence\" is any object that implements the Python sequence protocol (such\n as a list or tuple) and a \"buffer\" is any object that implements the Python\n buffer protocol (such as a string or array). The contents that are\n required to be present in these buffers are the same as for the C API.\n\n encode() also takes a list of desired blocknums. Unlike the C API, the\n Python API accepts blocknums of primary blocks as well as secondary blocks\n in its list of desired blocknums. encode() returns a list of buffer\n objects which contain the blocks requested. For each requested block which\n is a primary block, the resulting list contains a reference to the\n apppropriate primary block from the input list. For each requested block\n which is a secondary block, the list contains a newly created string object\n containing that block.\n\n decode() also takes a list of integers indicating the blocknums of the\n blocks being passed int. decode() returns a list of buffer objects which\n contain all of the primary blocks of the original data (in order). For\n each primary block which was present in the input list, then the result\n list simply contains a reference to the object that was passed in the input\n list. For each primary block which was not present in the input, the\n result list contains a newly created string object containing that primary\n block.\n\n Beware of a \"gotcha\" that can result from the combination of mutable data\n and the fact that the Python API returns references to inputs when\n possible.\n\n Returning references to its inputs is efficient since it avoids making an\n unnecessary copy of the data, but if the object which was passed as input\n is mutable and if that object is mutated after the call to zfec returns,\n then the result from zfec -- which is just a reference to that same object\n -- will also be mutated. This subtlety is the price you pay for avoiding\n data copying. If you don't want to have to worry about this then you can\n simply use immutable objects (e.g. Python strings) to hold the data that\n you pass to zfec.\n\n- Haskell API\n\n The Haskell code is fully Haddocked, to generate the documentation, run\n ``runhaskell Setup.lhs haddock``.\n\n\nUtilities\n---------\n\nThe filefec.py module has a utility function for efficiently reading a file\nand encoding it piece by piece. This module is used by the \"zfec\" and\n\"zunfec\" command-line tools from the bin/ directory.\n\n\nDependencies\n------------\n\nA C compiler is required. To use the Python API or the command-line tools a\nPython interpreter is also required. We have tested it with Python v2.7,\nv3.5 and v3.6. For the Haskell interface, GHC >= 6.8.1 is required.\n\n\nAcknowledgements\n----------------\n\nThanks to the author of the original fec lib, Luigi Rizzo, and the folks that\ncontributed to it: Phil Karn, Robert Morelos-Zaragoza, Hari Thirumoorthy, and\nDan Rubenstein. Thanks to the Mnet hackers who wrote an earlier Python\nwrapper, especially Myers Carpenter and Hauke Johannknecht. Thanks to Brian\nWarner and Amber O'Whielacronx for help with the API, documentation,\ndebugging, compression, and unit tests. Thanks to Adam Langley for improving\nthe C API and contributing the Haskell API. Thanks to the creators of GCC\n(starting with Richard M. Stallman) and Valgrind (starting with Julian\nSeward) for a pair of excellent tools. Thanks to my coworkers at Allmydata\n-- http://allmydata.com -- Fabrice Grinda, Peter Secor, Rob Kinninmont, Brian\nWarner, Zandr Milewski, Justin Boreta, Mark Meras for sponsoring this work\nand releasing it under a Free Software licence. Thanks to Jack Lloyd, Samuel\nNeves, and David-Sarah Hopwood.\n\n\nRelated Works\n-------------\n\nNote: a Unix-style tool like \"zfec\" does only one thing -- in this case\nerasure coding -- and leaves other tasks to other tools. Other Unix-style\ntools that go well with zfec include `GNU tar`_ for archiving multiple files\nand directories into one file, `lzip`_ for compression, and `GNU Privacy\nGuard`_ for encryption or `b2sum`_ for integrity. It is important to do\nthings in order: first archive, then compress, then either encrypt or\nintegrity-check, then erasure code. Note that if GNU Privacy Guard is used\nfor privacy, then it will also ensure integrity, so the use of b2sum is\nunnecessary in that case. Note also that you also need to do integrity\nchecking (such as with b2sum) on the blocks that result from the erasure\ncoding in *addition* to doing it on the file contents! (There are two\ndifferent subtle failure modes -- see \"more than one file can match an\nimmutable file cap\" on the `Hack Tahoe-LAFS!`_ Hall of Fame.)\n\nThe `Tahoe-LAFS`_ project uses zfec as part of a complete distributed\nfilesystem with integrated encryption, integrity, remote distribution of the\nblocks, directory structure, backup of changed files or directories, access\ncontrol, immutable files and directories, proof-of-retrievability, and repair\nof damaged files and directories.\n\n`fecpp`_ is an alternative to zfec. It implements a bitwise-compatible\nalgorithm to zfec and is BSD-licensed.\n\n.. _GNU tar: http://directory.fsf.org/project/tar/\n.. _lzip: http://www.nongnu.org/lzip/lzip.html\n.. _GNU Privacy Guard: http://gnupg.org/\n.. _b2sum: https://blake2.net/\n.. _Tahoe-LAFS: https://tahoe-lafs.org\n.. _Hack Tahoe-LAFS!: https://tahoe-lafs.org/hacktahoelafs/\n.. _fecpp: http://www.randombit.net/code/fecpp/\n\n\nEnjoy!\n\nZooko Wilcox-O'Hearn\n\n2013-05-15\n\nBoulder, Colorado\n\n----\n\n.. |pypi| image:: http://img.shields.io/pypi/v/zfec.svg\n :alt: PyPI release status\n :target: https://pypi.python.org/pypi/zfec\n\n.. |travis| image:: https://travis-ci.org/tahoe-lafs/zfec.png?branch=master\n :alt: build status\n :target: https://travis-ci.org/tahoe-lafs/zfec\n\n.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/uamocktx0h84ahqa/branch/master\n :alt: Appveyor (windows) build status\n :target: https://ci.appveyor.com/project/tahoe-lafs/zfec", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tahoe-lafs/zfec", "keywords": "", "license": "GPL-2+", "maintainer": "", "maintainer_email": "", "name": "zfec", "package_url": "https://pypi.org/project/zfec/", "platform": "", "project_url": "https://pypi.org/project/zfec/", "project_urls": { "Homepage": "https://github.com/tahoe-lafs/zfec" }, "release_url": "https://pypi.org/project/zfec/1.5.3/", "requires_dist": null, "requires_python": "", "summary": "An efficient, portable erasure coding tool", "version": "1.5.3" }, "last_serial": 3810707, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "bb21d1c0772207637f3891d3aa99cfc7", "sha256": "4f96a02d0dd709e1fd16c5d9582c9a93c026fed31e482c06e8c2e1feeda23b68" }, "downloads": -1, "filename": "zfec-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bb21d1c0772207637f3891d3aa99cfc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45195, "upload_time": "2007-05-02T22:27:32", "url": "https://files.pythonhosted.org/packages/65/c4/f0ce7606c2ca237fd9a2fb1eda3e815c3dcb96aa3e9cc11d0704c25d1215/zfec-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "86c0b6724dfed41fb02c3081b6021acf", "sha256": "506181de23bd845108d71f1f1f2a05e5bd48abcf76177e21b8180bdd33d5f4ce" }, "downloads": -1, "filename": "zfec-1.0.1.tar.gz", "has_sig": false, "md5_digest": "86c0b6724dfed41fb02c3081b6021acf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45422, "upload_time": "2007-06-04T11:47:44", "url": "https://files.pythonhosted.org/packages/ad/31/d21937ba4e14ac81aa11397eb2d29a49bbe1703b33b3430db8a76b5453e0/zfec-1.0.1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "9e42ab07308f681e80a629072a7e10a0", "sha256": "46cba0929910c240176dbcda5e08a91bdfdde560fe595f78ee6d252d2068f658" }, "downloads": -1, "filename": "zfec-1.0.3.tar.gz", "has_sig": false, "md5_digest": "9e42ab07308f681e80a629072a7e10a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49076, "upload_time": "2007-09-12T19:30:50", "url": "https://files.pythonhosted.org/packages/8d/63/29e45ef305d3ecdb5aa3ca2cb948c0a3d9c98943079e411f84756d99f63e/zfec-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "5b33538846d743393f408aa3d30cb0b0", "sha256": "a6d0ac8176c954abecd8e7fed5f5b8f8027ec1fff143ff40cdd0246e86de8ad2" }, "downloads": -1, "filename": "zfec-1.0.4.tar.gz", "has_sig": false, "md5_digest": "5b33538846d743393f408aa3d30cb0b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49145, "upload_time": "2007-09-19T21:31:37", "url": "https://files.pythonhosted.org/packages/1c/c7/bc139a4921cb813936090b79132b6d1ab67b7d394a158d354ee644d8901f/zfec-1.0.4.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "2249b7c14b5067a63c573e543675518b", "sha256": "d608d26e2fc65b60bf5ed1a9bc1c31ea3403d35c8cba4e64f63e91e3dd27db02" }, "downloads": -1, "filename": "zfec-1.1.tar.gz", "has_sig": false, "md5_digest": "2249b7c14b5067a63c573e543675518b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49191, "upload_time": "2007-10-02T19:12:37", "url": "https://files.pythonhosted.org/packages/b2/44/a7e04dcbf8ffccb0b5ff1903d6fa1079b08a8086bf6eeed4d970563858e9/zfec-1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "be4afa616be25c4b4eb8cd4a2fe4a6f8", "sha256": "caf81c03439d5912399d02ffe7302c4a362fb8787d18d7eb89ec46a4da2f1922" }, "downloads": -1, "filename": "zfec-1.2.0.tar.gz", "has_sig": false, "md5_digest": "be4afa616be25c4b4eb8cd4a2fe4a6f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26808, "upload_time": "2007-11-09T18:17:23", "url": "https://files.pythonhosted.org/packages/f2/8b/3b5bac5fe07c0fde4c76deef0e48cb651f41ae4cb59335e6a0d9009ac210/zfec-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "25849cfc343a8419869b087c84736ae1", "sha256": "b00cbeb17481ac5c279e3e92da0a925c8e5524c4fb3a3ebbe0525fb920f16639" }, "downloads": -1, "filename": "zfec-1.3.0.tar.gz", "has_sig": false, "md5_digest": "25849cfc343a8419869b087c84736ae1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38227, "upload_time": "2007-12-20T16:26:26", "url": "https://files.pythonhosted.org/packages/91/7a/df48831f68ec42bdc1a7b06c794f0820c2e04705aca66aaa6ed9ed6f98cc/zfec-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "da2d63df29aa1466b49fd3298f404022", "sha256": "b975fbeeec77979f6b33276951508c82a2a379fe641a9a205edb9ca8e3b8543b" }, "downloads": -1, "filename": "zfec-1.3.1.tar.gz", "has_sig": false, "md5_digest": "da2d63df29aa1466b49fd3298f404022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42080, "upload_time": "2007-12-20T16:34:03", "url": "https://files.pythonhosted.org/packages/40/b6/16a55195944ff6354a8f14b056750ec21785e0a9ffaa6a96fb70feef381c/zfec-1.3.1.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "112a8315e87a58d3fc33b467b8af1e48", "sha256": "f21ea06f53096a2ca4a819badca1a6c4be3dcb0070536276632026c918432069" }, "downloads": -1, "filename": "zfec-1.3.3.tar.gz", "has_sig": false, "md5_digest": "112a8315e87a58d3fc33b467b8af1e48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41494, "upload_time": "2007-12-20T20:59:39", "url": "https://files.pythonhosted.org/packages/72/1e/c5d43add13afd1f734d989f76cf6f9a6532810487cb7b92b37130b7b7a1c/zfec-1.3.3.tar.gz" } ], "1.3.4-3": [ { "comment_text": "", "digests": { "md5": "216becc631bec6b041b491b243159103", "sha256": "4cf1cde1ebb5da098fd697ef8a7edc8ce41d33172aa5a069fc5f06ede938769c" }, "downloads": -1, "filename": "zfec-1.3.4-3.tar.gz", "has_sig": false, "md5_digest": "216becc631bec6b041b491b243159103", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1427079, "upload_time": "2008-01-17T21:19:45", "url": "https://files.pythonhosted.org/packages/a6/86/31ff073c040d57d814eb1c1ea57ed2145cd420a4a667ef50a8ddc0681ad4/zfec-1.3.4-3.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "0fb7c31fb887db8f4b2ecc046b4b01f4", "sha256": "cd32ba0c4618a1bbeaed44e8b720753a1672581f9aaae182fbce83f3f0df097e" }, "downloads": -1, "filename": "zfec-1.3.5.tar.gz", "has_sig": false, "md5_digest": "0fb7c31fb887db8f4b2ecc046b4b01f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 932371, "upload_time": "2008-01-19T03:25:21", "url": "https://files.pythonhosted.org/packages/3d/f9/ed02a44765d0f7fecbd7e7559b4cf5d4410e9a9473aeade98617e607c71f/zfec-1.3.5.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "8209bc40b44edf89657be7357a1dccf9", "sha256": "3fbfb5446ebaef88945fb451dc74026c30fd869c5dd309bb433b0caa7d956c23" }, "downloads": -1, "filename": "zfec-1.4.0.tar.gz", "has_sig": false, "md5_digest": "8209bc40b44edf89657be7357a1dccf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 938270, "upload_time": "2008-01-21T17:39:03", "url": "https://files.pythonhosted.org/packages/4c/88/befa1c236e0e4f1f17203aa12b001f57cf7d787918c0da4c0129d952289d/zfec-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "83cd7a276aa3a6257c05c9404785a097", "sha256": "83c027885e6e1a4369c7c457c00a33ed6d549a212af6332db50b018a9963597f" }, "downloads": -1, "filename": "zfec-1.4.1-py2.5-macosx-10.3-i386.egg", "has_sig": false, "md5_digest": "83cd7a276aa3a6257c05c9404785a097", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 79829, "upload_time": "2008-10-24T21:13:21", "url": "https://files.pythonhosted.org/packages/3a/5a/4e4dc5efecd88825a806b5016be2b051ce5c82609d94b0511b66973d0685/zfec-1.4.1-py2.5-macosx-10.3-i386.egg" }, { "comment_text": "", "digests": { "md5": "2333c2bf3ee3c750663456f207404679", "sha256": "71ac5fd0fa33232ec0a07aea4448684560a228d7da936fc86a7e4c76dc84504a" }, "downloads": -1, "filename": "zfec-1.4.1.tar.gz", "has_sig": false, "md5_digest": "2333c2bf3ee3c750663456f207404679", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217347, "upload_time": "2008-09-30T19:24:32", "url": "https://files.pythonhosted.org/packages/a5/6a/551b16a57d65931db4bc25ae68c8f4689bd0528935a94e9354512633fe9b/zfec-1.4.1.tar.gz" } ], "1.4.1-2": [ { "comment_text": "", "digests": { "md5": "efd63fb155b459abf069bf68e253da9c", "sha256": "82d1d75a34b69673d1ee1141f8e2a8df08befd314aaae37d9db6e50d287be9c7" }, "downloads": -1, "filename": "zfec-1.4.1_2-py2.5-win32.egg", "has_sig": false, "md5_digest": "efd63fb155b459abf069bf68e253da9c", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 70947, "upload_time": "2008-10-21T17:59:26", "url": "https://files.pythonhosted.org/packages/1b/4f/76c77a29bdd61e38fd3f88b4a93dbaa74b08d0a25ebb4a5c495a5608987b/zfec-1.4.1_2-py2.5-win32.egg" }, { "comment_text": "", "digests": { "md5": "5b50888f3403993590ea7faa11a23346", "sha256": "6b6d785073c0f867e9761f65a8413e73eed5df0d663bb52a4e972625400cb84d" }, "downloads": -1, "filename": "zfec-1.4.1-2.zip", "has_sig": false, "md5_digest": "5b50888f3403993590ea7faa11a23346", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 226976, "upload_time": "2008-10-21T17:59:15", "url": "https://files.pythonhosted.org/packages/ea/91/0ccfffbb09cfa24079b765672f3907c9a205b6c381bdc085c5f45eb765c6/zfec-1.4.1-2.zip" } ], "1.4.11": [ { "comment_text": "", "digests": { "md5": "fa386723364058f66cabd8742822f192", "sha256": "fc1173fded0733c920fa1f2a293e74c020c9dc4e6935733b95dbed29fb9d793d" }, "downloads": -1, "filename": "zfec-1.4.11.tar.gz", "has_sig": false, "md5_digest": "fa386723364058f66cabd8742822f192", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29410, "upload_time": "2011-01-16T18:50:26", "url": "https://files.pythonhosted.org/packages/ac/e8/6189b13fef5d78d9224c0819b238c6da7f32908d3507bfc0708ffb404c2c/zfec-1.4.11.tar.gz" } ], "1.4.12": [ { "comment_text": "", "digests": { "md5": "8cfdfa2c6c76432eb3283a175738b2a0", "sha256": "47d1dd89e3f3b504c89ff081261e3ea8d4f3efe58acc4f25e3d6589697326cf6" }, "downloads": -1, "filename": "zfec-1.4.12.tar.gz", "has_sig": false, "md5_digest": "8cfdfa2c6c76432eb3283a175738b2a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29469, "upload_time": "2011-01-16T18:53:51", "url": "https://files.pythonhosted.org/packages/cb/47/471f506e73092da6680a81185686f717372c58579a90ffb8f356c94511c2/zfec-1.4.12.tar.gz" } ], "1.4.13": [ { "comment_text": "", "digests": { "md5": "2a0043fe37f9109d6d3e9c40e630a49d", "sha256": "c98fd0624d83d18b2730f925605326a3d889fd3e1db4f9191f6a715c69485b53" }, "downloads": -1, "filename": "zfec-1.4.13.tar.gz", "has_sig": false, "md5_digest": "2a0043fe37f9109d6d3e9c40e630a49d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29457, "upload_time": "2011-01-16T18:55:23", "url": "https://files.pythonhosted.org/packages/2a/b4/5dd416998579bfede3fb212b260387f935e8772a3035578a3dcb9ca4798b/zfec-1.4.13.tar.gz" } ], "1.4.14": [ { "comment_text": "", "digests": { "md5": "16d5c70d78083b8821ac2b2f5a666218", "sha256": "f870434a52e6e3cd0dcf2b665935060fd52cb0525e6cf73668fb90c9aca63835" }, "downloads": -1, "filename": "zfec-1.4.14.tar.gz", "has_sig": false, "md5_digest": "16d5c70d78083b8821ac2b2f5a666218", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29474, "upload_time": "2011-01-16T19:03:06", "url": "https://files.pythonhosted.org/packages/a3/d7/3d6480693b442e583cde049f5d2f06be0fc7d9c200ec9ecca3cef0879e0e/zfec-1.4.14.tar.gz" } ], "1.4.15": [ { "comment_text": "", "digests": { "md5": "4bec6b9f5b10b86a9b9c58387edb0fd7", "sha256": "ec5c243956c25adda1859b3db5f9933f8b8c95fabe6277ce81e77057c49578e1" }, "downloads": -1, "filename": "zfec-1.4.15.tar.gz", "has_sig": false, "md5_digest": "4bec6b9f5b10b86a9b9c58387edb0fd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162291, "upload_time": "2011-01-17T02:29:49", "url": "https://files.pythonhosted.org/packages/c6/33/1391c97df2a861182f20aabddfca8005b08d120fe2831e3993dfdc8463e6/zfec-1.4.15.tar.gz" } ], "1.4.16": [ { "comment_text": "", "digests": { "md5": "b00f5c1d6c0bdca145aeb7081e882a02", "sha256": "9968acd87118a1471a82c6625d3022631155174eee7ae54a99f26302a30d955f" }, "downloads": -1, "filename": "zfec-1.4.16.tar.gz", "has_sig": false, "md5_digest": "b00f5c1d6c0bdca145aeb7081e882a02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29456, "upload_time": "2011-01-30T09:27:00", "url": "https://files.pythonhosted.org/packages/68/78/b2e097e1c3542b793fc4198f74e7d0a6903fd2307b5a3807b87ceda21944/zfec-1.4.16.tar.gz" } ], "1.4.17": [ { "comment_text": "", "digests": { "md5": "60ed9e37c850669a010d862dc62d73cb", "sha256": "35e680b86b063b03d435adb7f42adef3c279cb029bfaddc99fdcc2af6b2f5a1a" }, "downloads": -1, "filename": "zfec-1.4.17.tar.gz", "has_sig": false, "md5_digest": "60ed9e37c850669a010d862dc62d73cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162284, "upload_time": "2011-01-30T14:49:07", "url": "https://files.pythonhosted.org/packages/4e/5a/9b8f16cfe42cc8f448dd21fccf0486738affe35b3367f67c46e95a8ca63c/zfec-1.4.17.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "e35f6aba626a95312cc1a90ef1e8593f", "sha256": "8fb710cc850242ad84712e10c9e71e31b32b058b0b1b761bb93cb06a55c20a9f" }, "downloads": -1, "filename": "zfec-1.4.2-py2.5-macosx-10.3-i386.egg", "has_sig": false, "md5_digest": "e35f6aba626a95312cc1a90ef1e8593f", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 79844, "upload_time": "2008-10-24T21:17:19", "url": "https://files.pythonhosted.org/packages/eb/5a/cef7d3337d0647e3aa1a6c42a53b4d664b5cbdde25e8de6689b666cf82ce/zfec-1.4.2-py2.5-macosx-10.3-i386.egg" }, { "comment_text": "", "digests": { "md5": "cebf8d5eed5f5c21f24c62746f80b750", "sha256": "85d79cc001c461ca84b819a7ab463d944d7d39e501f98b9b96a9074ecc57fd83" }, "downloads": -1, "filename": "zfec-1.4.2-py2.5-win32.egg", "has_sig": false, "md5_digest": "cebf8d5eed5f5c21f24c62746f80b750", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 91302, "upload_time": "2008-10-23T22:10:54", "url": "https://files.pythonhosted.org/packages/ad/85/d34d6240885d1547fa989f37f5bc0165b16618edeb7f14f101defa6f1476/zfec-1.4.2-py2.5-win32.egg" }, { "comment_text": "", "digests": { "md5": "8f70e1b183aca15e6d400252118ec4fe", "sha256": "8e232623d90e34483e2f4785ee1cb8d4cf07e1fe1a4b36e8edf560e9ea90eeed" }, "downloads": -1, "filename": "zfec-1.4.2.tar.gz", "has_sig": false, "md5_digest": "8f70e1b183aca15e6d400252118ec4fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217578, "upload_time": "2008-10-23T22:11:28", "url": "https://files.pythonhosted.org/packages/97/ba/c0bf53a7378461e845a12f7b0920a2620658538d3a763edbcf87400910fb/zfec-1.4.2.tar.gz" } ], "1.4.20": [ { "comment_text": "30d53a12689f3d2ae8217166d18d0530", "digests": { "md5": "30d53a12689f3d2ae8217166d18d0530", "sha256": "fa4146dda042b2cd0a8fb2186c7390b322150dbc47f805aeb479e09fae3e859d" }, "downloads": -1, "filename": "zfec-1.4.20.tar.gz", "has_sig": false, "md5_digest": "30d53a12689f3d2ae8217166d18d0530", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162370, "upload_time": "2011-03-03T22:26:59", "url": "https://files.pythonhosted.org/packages/fb/e5/28a763fae2be2acbcfd3dfbdc23d0833fcbb5671ff98a2dc12ad66891f5d/zfec-1.4.20.tar.gz" } ], "1.4.21": [ { "comment_text": "", "digests": { "md5": "c552dd57acd284b4eb6ba751d0dcf92e", "sha256": "3f07d5d730593640657d44a42210d204727b26123338698cd6969cdbaf103cba" }, "downloads": -1, "filename": "zfec-1.4.21.tar.gz", "has_sig": false, "md5_digest": "c552dd57acd284b4eb6ba751d0dcf92e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162566, "upload_time": "2011-03-05T23:40:44", "url": "https://files.pythonhosted.org/packages/34/de/ff38bc7a068567da54b71b2941a3188b44a1e90387553185fe0844f2d138/zfec-1.4.21.tar.gz" } ], "1.4.22": [ { "comment_text": "", "digests": { "md5": "105745eb9d3db8f909786a0b39153a79", "sha256": "e8eafa0940a9622ed3ea80f60485b89ee28b9a581988cb669136b632282aca7b" }, "downloads": -1, "filename": "zfec-1.4.22.tar.gz", "has_sig": false, "md5_digest": "105745eb9d3db8f909786a0b39153a79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162680, "upload_time": "2011-03-06T06:43:45", "url": "https://files.pythonhosted.org/packages/3e/58/b51aa09d8d80492dc8470a90fd8fcc5c5d1591fb4256eaabbee0d7df10e1/zfec-1.4.22.tar.gz" } ], "1.4.23": [ { "comment_text": "", "digests": { "md5": "d5755489eb9b2a06a547b6a3fa98bc64", "sha256": "f0d2fbef7203afa481bf3782155220b649fdf19d639b368f8875184a7d4c4831" }, "downloads": -1, "filename": "zfec-1.4.23.tar.gz", "has_sig": false, "md5_digest": "d5755489eb9b2a06a547b6a3fa98bc64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36150, "upload_time": "2012-04-11T05:24:34", "url": "https://files.pythonhosted.org/packages/e3/47/d2c852b7a1f986a8111b08ada6e889ea553a3f2e09dae365b246cd1c0dc0/zfec-1.4.23.tar.gz" } ], "1.4.24": [ { "comment_text": "", "digests": { "md5": "e1bca3a1f18374f72bdf8cd42ea9c919", "sha256": "e3e99e6e67ac9af72c0f918f03d2051e17d41f48ee0134d0d2c81e7fe92749cf" }, "downloads": -1, "filename": "zfec-1.4.24.tar.gz", "has_sig": false, "md5_digest": "e1bca3a1f18374f72bdf8cd42ea9c919", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 175884, "upload_time": "2012-04-12T19:56:43", "url": "https://files.pythonhosted.org/packages/e3/fd/e62597ca563077f1ee7b291010aa51b9898c9014a4a87e1447107d79a46d/zfec-1.4.24.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "38f8e415c54aa9f778aa2ef0f1473f88", "sha256": "ca14b8e27b292f08343e7d86612e0913acbf267dc1e7662a24e8e9e4cbb068dc" }, "downloads": -1, "filename": "zfec-1.4.3.tar.gz", "has_sig": false, "md5_digest": "38f8e415c54aa9f778aa2ef0f1473f88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51076, "upload_time": "2009-01-05T17:21:56", "url": "https://files.pythonhosted.org/packages/d6/10/08bc19f34b849578c333a2217b78750b6eb4e45ebeaae41f629ad489941b/zfec-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "c7c5d5c1dd634a054bcd36fd01617fe6", "sha256": "dcc06a6cd76f81a8915265373a87783b5a9706bbfe53166b4f8ee4b5b53def65" }, "downloads": -1, "filename": "zfec-1.4.4.tar.gz", "has_sig": false, "md5_digest": "c7c5d5c1dd634a054bcd36fd01617fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 325423, "upload_time": "2009-01-05T20:19:55", "url": "https://files.pythonhosted.org/packages/8f/ee/bfa05c3df22afce906e562e45d177fca33ca465318afc80cade37bcc6c0d/zfec-1.4.4.tar.gz" } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "36e109fa7360534bd08295be66bf0246", "sha256": "57b6679e9685c4dce1ce934c260d81bd293216bf225e680890cc0e5b0cabd3c0" }, "downloads": -1, "filename": "zfec-1.4.5.tar.gz", "has_sig": false, "md5_digest": "36e109fa7360534bd08295be66bf0246", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 325981, "upload_time": "2009-06-17T18:10:52", "url": "https://files.pythonhosted.org/packages/d2/3f/99bcb2f4c33cbd998d1e993c4f27c456b39dde1479c8d5be35fa5cbbd6b5/zfec-1.4.5.tar.gz" } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "542957786c0b5de3ff76094349d0cf0d", "sha256": "bec82a323b94c47f0fd165065280c5a207664d2c51cf04ab1d1e7f73b942069c" }, "downloads": -1, "filename": "zfec-1.4.6.tar.gz", "has_sig": false, "md5_digest": "542957786c0b5de3ff76094349d0cf0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 176917, "upload_time": "2010-01-25T02:48:02", "url": "https://files.pythonhosted.org/packages/18/79/28fad2776a06a042dad60bc0603b7c61f58d6e07aa54bd996d67f384b07f/zfec-1.4.6.tar.gz" } ], "1.4.7": [ { "comment_text": "", "digests": { "md5": "bc8547fef02ef60b160ba6d68e0911e4", "sha256": "3335c9054f45e2c59188400e892634b68761b29d06f3cafe525c60484902d379" }, "downloads": -1, "filename": "zfec-1.4.7.tar.gz", "has_sig": false, "md5_digest": "bc8547fef02ef60b160ba6d68e0911e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 155662, "upload_time": "2010-05-24T09:37:28", "url": "https://files.pythonhosted.org/packages/f4/82/9bf7f48278dba6ea0a0c6247f6d0fd2d502a6999eb7f0661ef74c60b4daa/zfec-1.4.7.tar.gz" } ], "1.4.8": [ { "comment_text": "", "digests": { "md5": "5a695ed92cd510304b532f0d3fab85fc", "sha256": "6705467e234543687738a392a13987de2da4f9d2af010651d75efa474d89566d" }, "downloads": -1, "filename": "zfec-1.4.8.tar.gz", "has_sig": false, "md5_digest": "5a695ed92cd510304b532f0d3fab85fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161690, "upload_time": "2010-12-04T20:04:12", "url": "https://files.pythonhosted.org/packages/1f/f2/48acf1c4a8f9083c321bbe43bc129158b51c0ac1196dde8a42496d4c3a58/zfec-1.4.8.tar.gz" } ], "1.4.9": [ { "comment_text": "", "digests": { "md5": "5e4b62c873a35f0f810621ff5472a32d", "sha256": "44825b7ea929b85134c35aa16ff35af7e8cd2bbde407e63a6e4b5937d8c843eb" }, "downloads": -1, "filename": "zfec-1.4.9.tar.gz", "has_sig": false, "md5_digest": "5e4b62c873a35f0f810621ff5472a32d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161908, "upload_time": "2010-12-04T20:07:19", "url": "https://files.pythonhosted.org/packages/20/24/8897f12fe80807a08724b0bc06df4a02191e04be1bc36e68cc897f37cfc8/zfec-1.4.9.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "f1f91114c5b5cf55dbec6b17f995313e", "sha256": "b917ec77bb6fff8797a9e06b580a7e6dbe16e0ec451a8e63cac93171de191476" }, "downloads": -1, "filename": "zfec-1.5.0.tar.gz", "has_sig": true, "md5_digest": "f1f91114c5b5cf55dbec6b17f995313e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80357, "upload_time": "2018-02-02T21:52:27", "url": "https://files.pythonhosted.org/packages/8e/04/a5320b8bc80e657ef21591008ffe3789e412c24a3912a6003de996b77e9b/zfec-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "8a91bfa1dc4dd04d40fe4be2424913c3", "sha256": "d820ee6c539867f89cc29f1906e1bc3de8206247f1fb1d6dc8adc82a37dd79d1" }, "downloads": -1, "filename": "zfec-1.5.1.tar.gz", "has_sig": true, "md5_digest": "8a91bfa1dc4dd04d40fe4be2424913c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70320, "upload_time": "2018-02-04T23:58:52", "url": "https://files.pythonhosted.org/packages/21/59/dc3a360533e64030ac08aaf1448d2d116a1c11008acfdc88a974a692ae74/zfec-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "4c7f532010aebaa3b1728414f82c5109", "sha256": "3cfb6bc2e9e3455fbe8cb51efb69cf653c2e142bc6bcb1e5ba3dcd597873e17a" }, "downloads": -1, "filename": "zfec-1.5.2.tar.gz", "has_sig": true, "md5_digest": "4c7f532010aebaa3b1728414f82c5109", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70536, "upload_time": "2018-02-06T22:12:19", "url": "https://files.pythonhosted.org/packages/50/b4/a9b28e4e29df58f73198ed7248dc93f3bb743e8f9a86ac61cb32c44a699c/zfec-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "34c06ad7703865c1aa5746372d583b8d", "sha256": "b41bd4b0af9c6b3a78bd6734e1e4511475944164375e6241b53df518a366922b" }, "downloads": -1, "filename": "zfec-1.5.3.tar.gz", "has_sig": true, "md5_digest": "34c06ad7703865c1aa5746372d583b8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79402, "upload_time": "2018-04-08T04:45:12", "url": "https://files.pythonhosted.org/packages/8f/99/aba4602ff6ed25a5ff2a9e0f9a3762d84d7e1b941b75d620a53a0ccecd9f/zfec-1.5.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "34c06ad7703865c1aa5746372d583b8d", "sha256": "b41bd4b0af9c6b3a78bd6734e1e4511475944164375e6241b53df518a366922b" }, "downloads": -1, "filename": "zfec-1.5.3.tar.gz", "has_sig": true, "md5_digest": "34c06ad7703865c1aa5746372d583b8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79402, "upload_time": "2018-04-08T04:45:12", "url": "https://files.pythonhosted.org/packages/8f/99/aba4602ff6ed25a5ff2a9e0f9a3762d84d7e1b941b75d620a53a0ccecd9f/zfec-1.5.3.tar.gz" } ] }