A python phylogeny tracking module
Project description
phylotrackpy: a python phylogeny tracker
In in silico evolution experiments, we have the luxury of being able to perfectly track the phylogenies of our populations, rather than having to just infer them after the fact. Phylotrackpy is a Python package designed to help you do so as efficiently as possible.
At face value, measuring a phylogeny in in silico evolution may seem very straightforward: you just need to keep track of what gives birth to what. However, multiple aspects turn out to be non-trivial. The goal of Phylotrackpy is to implement these things the right way once so that we all can stop needing to re-implement them over and over. Phylotrackpy is a python library designed to flexibly handle all aspects of recording phylogenies in in silico evolution.
Note: this library is essentially a wrapper around Phylotracklib, which is implemented in C++. If you need a C++ phylogeny tracker, you can use that one directly (it is part of the larger Empirical library, which is header-only so you can just include the parts you want).
Features
- Pruning: Ability to prune out taxa that are extinct and have no extant descendants (to keep memory use under control)
- Flexible taxon definitions: Flexible control of how taxa are defined (e.g. by genotype, by phenotype, by trait, or by something more complex)
- Efficiency: Highly efficient (implemented in C++ under the hood)
- Phylostatistics: Includes various phylogenetic topology metrics
- Flexible output: Easily add columns to output files.
High level usage
There are three main steps in using phylotrackpy:
- Construct a
Systematics
object - Notify the systematics object whenever anything is born
- Notify the systematics object whenever anything dies
For more detailed instructions, see the documentation
Installation
Phylotrackpy is available through pip:
pip install phylotrackpy
Useful background information
There are certain quirks associated with real-time phylogenies (especially digital ones) that you might not be used to thinking about if you're used to dealing with reconstructed phylogenies. Many of these discrepancies are the result of the very different temporal resolutions on which these types of phylogenies are measured, and the fact that the taxonomic units we work with are often at a finer resolution than species. We document some here so that they don't catch you off guard:
- Multifurcations are real: In phylogenetic reconstructions, there is usually an assumption that any multifurcation/polytomy (i.e. a node that has more than two child nodes) is an artifact of having insufficient data. In real-time phylogenies, however, we often observe multifurcations that we know for sure actually happened.
- Not all extant taxa are leaf nodes: In phylogenetic reconstructions, there is usually an assumption that all extant (i.e. still living) taxa are leaf nodes in the phylogeny (i.e. none of them are parents/offspring of each other; similar taxa are descended from a shared common ancestor). In real-time phylogenies it is entirely possible that one taxon gives birth to something that we have defined as a different taxon and then continues to coexist with that child taxon.
- Not all nodes are branch points: In phylogenetic reconstructions, we only attempt to infer where branch points (i.e. common ancestors of multiple taxa) occurred. We do not try to infer how many taxa existed on a line of descent between a branch point and an extant taxa. In real-time phylogenies we observe exactly how many taxa exist on this line of descent and we keep a record of them. In practice there are often a lot of them, depending on you define your taxa. It is unclear whether we should include these non-branching nodes when calculating phylogenetic statistics (which is why Phylotrackpy lets you choose whether you want to).
The above image represents an actual phylogeny measured from digital evolution. Each rectangle represents a different taxon. It's position along the x axis represents the span of time it existed for. Note that there are often sections along a single branch where multiple taxa coexisted for a period of time. Circles represent extant taxa at the end of this run.
Dependencies
Testing dependencies
- pytest
Documentation dependencies
- myst_parser (for writing documentation in markdown)
- sphinx_rtd_theme (theme for readthedocs)
Contributing
Contributions are welcome! See CONTRIBUTING.md.
Developers
- Emily Dolson (lead developer)
- Matthew Andres Moreno
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for phylotrackpy-0.1.16-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 004a8c5e6898ed1dd1880dab2e61e0b1d23fbfb96e2e4e740fd331cccbb82a3d |
|
MD5 | 34e6838e521b1e0cea12908b73a6cd79 |
|
BLAKE2b-256 | 6fd4a917c30e4ad56e3312359644b22c843346d5d93f89d018165ef32fb8b90f |
Hashes for phylotrackpy-0.1.16-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e968921106547e4075d0a44afe115d64990a9ff1d9eecc86482db3b85e80de5 |
|
MD5 | 6355aa38bd3e7f5fc2d3844ac5965d22 |
|
BLAKE2b-256 | 4befff48f21245ea004118b9937f7c04c380e92cb5abf6d4f6ba7377244cdf6c |
Hashes for phylotrackpy-0.1.16-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | acd3aacd0344652b079ca654b168205a0cf114f9f53595a15f17c5046a1fe68e |
|
MD5 | 4a3dc96c02f04584f2445441084b58cb |
|
BLAKE2b-256 | bf9149a999f73ecc6801351e1adde693df4b82a28d857dcfd6599166d4f44951 |
Hashes for phylotrackpy-0.1.16-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a8f5acafb8a75feb2d265d8e0a3e504f5a611f9776941387220761e7a2f4c383 |
|
MD5 | 52a67176ae3981ae1f3eb95f66cb3894 |
|
BLAKE2b-256 | 06f340f6afc65c594a9651ba5394eb447e345941aa567d8b58e31a62c21eabd1 |
Hashes for phylotrackpy-0.1.16-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d3b6b2e8c0244c8c6ec9b12e39af897ce6ae1134175738f3c519dd00096c085 |
|
MD5 | a657b83e91c666888e415e69d3e8003f |
|
BLAKE2b-256 | 6fac99803d11c8fe1349a65e066e45db3a336f83183d9a37dfe74db55de4ea31 |
Hashes for phylotrackpy-0.1.16-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | acda57b99c40cda7552fa5521cfba193021cb4917c4ec63ef1e80e9dec1f9c57 |
|
MD5 | e41bd6aef51313a5de39afb2a87d4c8a |
|
BLAKE2b-256 | f7a488bfe5b41323a69e8f1f86d03845c472691367ec4e0ef34955c3864f6d33 |
Hashes for phylotrackpy-0.1.16-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db354efded6739568361a263aec0d9b5f7d955506941fb87876a04afd633b0ea |
|
MD5 | c5832ac07bffcf9af039c97f1cb457ce |
|
BLAKE2b-256 | 35d2cc65b504b39dbb062b13a2750ca5efe86e2e11e429062fc7c78462a0675a |
Hashes for phylotrackpy-0.1.16-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f713907bfd40dd03f3d5b6115473e02eb6fbcee8cf7225acf890f05a9777728 |
|
MD5 | 53cc94cd363a8fbcb0d2c3ba4bd69527 |
|
BLAKE2b-256 | 50b4787aa0d41e2994196e12fd4aaf2cdc7e1e4bd34ed67f4bcff3e048f241ff |
Hashes for phylotrackpy-0.1.16-pp37-pypy37_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ddea206492f7c1a91b4332b501b0a32cb664e75cf9254fdad58b965983daa7a |
|
MD5 | bee77567cae3834cbce420c502d6bfd6 |
|
BLAKE2b-256 | 804cc9924657e4479d4aae02666118e0f5b9aa945e8c69b4fd7ebb342308fa5c |
Hashes for phylotrackpy-0.1.16-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b8290a043077a2dd9cb3cfed9499009e52080adb39d7d4efb63cefcfb7c8673 |
|
MD5 | cafa80a5dc86ffca59abfe7fa4b18303 |
|
BLAKE2b-256 | 47ee5f2596c98e3dfb9da3a458eb5ad44cbc61d5622f2b69ee1b4a027b9748ef |
Hashes for phylotrackpy-0.1.16-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74170cd54d427912a6ccad8798cdff6c0034621db0428947442e8b13f3ea10ad |
|
MD5 | febf20cf489f8aad4af38f2a1e90869b |
|
BLAKE2b-256 | 65840126461364f351e2df14e8c99b9dcc1a4a044fa3a11e0453a1cfbc33e01f |
Hashes for phylotrackpy-0.1.16-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d9fe8ec911e6251a4d144882de8933ba969be155963ab0732da71c3b81badb0 |
|
MD5 | dd044d3080f441b1c0cfeca6964ad312 |
|
BLAKE2b-256 | aa8fc2db7f0a7d43097b8dc09cda7c23ba53c25bf62a5d71e3d9b74f5bea322a |
Hashes for phylotrackpy-0.1.16-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2657cf16023bde8f9958782bae3c3afd81427d30c4072fbcc9faa1ed777b000 |
|
MD5 | a619556fd61ad385fdf46364514de801 |
|
BLAKE2b-256 | 316d4f815b69025fcd7ae6a575b0b262113ae6a1ebf867fc4c8291b1a006224f |
Hashes for phylotrackpy-0.1.16-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 34f108b07c5a278822b68e95652cc8e7736e5da2142d28f6197bb9ecbd281278 |
|
MD5 | 2bc70bc83aaf2def4f073b7be8c94626 |
|
BLAKE2b-256 | c6eea1b4cd0c34b10e43777f6d7e7dfd064c7360cc17f57a21b62a6998d44a17 |
Hashes for phylotrackpy-0.1.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb9344a01f7e2849d7f8e48efafc22dada49bc5fbb45bef9e279b38747a39f44 |
|
MD5 | f61d453aab712c3312f4e04a4c1a61bb |
|
BLAKE2b-256 | 762912e4b7bfb169ffea0abe3aca761b4bfc05dab46112c4e020f3e6d4f8517e |
Hashes for phylotrackpy-0.1.16-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dfc71f1c098e70704a3c0a20695f59190e4ad097a4f7823f5151d8246e1b484b |
|
MD5 | 3d3e5b9eaf01a01c344feed4c1452fd5 |
|
BLAKE2b-256 | 921c1c99a5162d18d0b07d1dfaafe72232fc2598bdbda2eafcea4424bcb540cf |
Hashes for phylotrackpy-0.1.16-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47acb0d016b8053a84daa3b2146da3c60b3c39c3fc44ae46169de1176f5dc573 |
|
MD5 | a25dbc1adc4d06a298c6ac3f8ce4a919 |
|
BLAKE2b-256 | bdbb3321111ef944a8a70ed1013de332383d3db19fdbb268b45dc8e47fa6b1c5 |
Hashes for phylotrackpy-0.1.16-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7f17452a88a876d187fecefdba22a8807459e29715f3bac3623a352a0d2ab61 |
|
MD5 | ab88c82afec2cf11a73876e044d257d1 |
|
BLAKE2b-256 | 027f457ee149da1ab85552fbc18722e3be91e12c53737e569139f6091782ef80 |
Hashes for phylotrackpy-0.1.16-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 233be4e8b34c34b68ea67915948c072333bc139be743f40a7aa291593e1f544b |
|
MD5 | 708d6e913a971aff41c2bbac5e8175da |
|
BLAKE2b-256 | c1994525b7bb5453a1156ac832eebc920183501db980cc91563c40a8b6a82bd0 |
Hashes for phylotrackpy-0.1.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 819004f7fc551ff75adbf68e6b0806ecb4bc23d4d9c5eb928e5e1adbab822bc8 |
|
MD5 | 2568824c4b3341ce91cb372e079f4e7b |
|
BLAKE2b-256 | 90b6eaacceab7fb18e9a2d582ab0c4b8dc916259c125fd2adf96702aadfe9399 |
Hashes for phylotrackpy-0.1.16-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef739eb9e0255f415cb7814b8df96e6aefcd3ca2617347a41f2426ee2418a6c9 |
|
MD5 | 5946f0d7794ffe6f2fa3755fc51db13d |
|
BLAKE2b-256 | 7a29ee3f0d9e79e308abf41600efb1cc264eeb84620c47eed3c6e9318a6422d6 |
Hashes for phylotrackpy-0.1.16-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 177ed883bb4f0b42ee044ee3d8b3cffa425a55a4a931cda0ce40e15ce259976f |
|
MD5 | 7ede67171513951c9a7c7cb7ffbec98d |
|
BLAKE2b-256 | a85fe9cd61d8fce9a293c18ad0a88691cd37567c9f79c07bd7a4bc1db57dafc6 |
Hashes for phylotrackpy-0.1.16-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c0988c6283c6868302d6c839ee170c1d4992e37c14e35951d0c29aa028e6556 |
|
MD5 | b86a60e26f6c783ecc0abd6f8488696f |
|
BLAKE2b-256 | b10856bd9ade4a4b6a3c1759cb67228c721d243c02d1f89a230ae61f0dd1ba57 |
Hashes for phylotrackpy-0.1.16-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e7407a952556cb097576dfcfde2c3d669652222853d913d09d3e06e4d7dbf43 |
|
MD5 | ab3e9e28cbaacba57720157135a8a5ca |
|
BLAKE2b-256 | 4c416c3daa7ba81cc88ae8054842a950ed2e561742efaa0ed1c5ea3fb915cf2e |
Hashes for phylotrackpy-0.1.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b02e549f9b2c73943c1d052bdd8dc15823e241ba83faf41f9a889d7b0e7c987f |
|
MD5 | 649d2c5910bcaacc9d3536f1d2259427 |
|
BLAKE2b-256 | d3e52fa3778d7f3d01b903ff5113f9de8ab5875b5a513f0ce152b16eff2f84db |
Hashes for phylotrackpy-0.1.16-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b42522d48fd1c96b4f09d8e475805cd9bb76610a3a129f710e8a5d0bda577bc |
|
MD5 | 4542dcca9efdbb2becfce6313f6f2a57 |
|
BLAKE2b-256 | 1958d9c5cb4518180c69f8d370ef6ef6dde1d31714d255d42c24e1a1bd0411bc |
Hashes for phylotrackpy-0.1.16-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7adb41a86468807814099380a91207e35cabaff52d34e482509222c5c39b958 |
|
MD5 | 1c305d7d9e7f100806c1cb1a76a958ad |
|
BLAKE2b-256 | f6e93eaaa297bd628642665bab8847fcc08334c422dfb8cf8b2e7a849c3fe516 |
Hashes for phylotrackpy-0.1.16-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c42298e243acdb30b4d1ec6acf39e5ae46a928002b312417eef2d49ecb60010 |
|
MD5 | d91b81cde8109f33e13a30d1264f3622 |
|
BLAKE2b-256 | b341b9c57a43775a32126996bbca418b635518807151d37e5e619475b2ec73a4 |
Hashes for phylotrackpy-0.1.16-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f96d686129bc939772138976db68e046ac050bf0d26b710ac834f6d127e0abf |
|
MD5 | 6fe9cba9614cc9d001c2febb20d344ce |
|
BLAKE2b-256 | 28279afbbe2addcf952ead6d56ab859e2bba7208a3e49ee54289f233efd5dfe7 |
Hashes for phylotrackpy-0.1.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd3a07876207d6fef2d98042bb935da601941df096e52c1408383b6898df36f3 |
|
MD5 | 278061e1271c409a9b4b9d077bd0de27 |
|
BLAKE2b-256 | bb25e923ab318222a28f6e82b38d16ae35fe95bd12691710dc1a214a93dffc44 |
Hashes for phylotrackpy-0.1.16-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 460a1c92f3408fef751d24618d25416493f3581cea17722bdb366322449f2dcb |
|
MD5 | 07d123024ee376c67a0f408dd8d55cc3 |
|
BLAKE2b-256 | d39b1ff15998162c7369d499a02961aaac8c85ba19bd3220fe15a468e3d90151 |
Hashes for phylotrackpy-0.1.16-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | adc8e33c743074a2660b80538af099710967ba60aef2341a7fc4e9594f112cc2 |
|
MD5 | a14a2d525cb849457ac1d0b1448a2b50 |
|
BLAKE2b-256 | 263688a4de9fa86ab0dd4d1d2da37befdacee36bcf272aa629e896156318e914 |
Hashes for phylotrackpy-0.1.16-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ef87e4e2f2b881cbede8b6990fef8079eba10d706f9fa4b6ee551b501d08885 |
|
MD5 | ee08b2496478d9c4ecbe880bcfcd52e4 |
|
BLAKE2b-256 | b46b1c1e6f418251f6d154440b8085c88b7a20e560e2d41a8d00f2c9d1aa19de |
Hashes for phylotrackpy-0.1.16-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bac4ff5f250fc1dc7a0242acc60ef13393ac15bbdc29d0248ba4e890d2cdc68f |
|
MD5 | 4978df09bd954f7b60b18333169634e9 |
|
BLAKE2b-256 | fdeb4f19c980ab36fa2e41b4dd1bcea611d93321fca4cf1ca746319cce9ce539 |
Hashes for phylotrackpy-0.1.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8995dfd6275ba83f4ae8b799db650d5877825ebd2fd9fb0699f41d915372fa56 |
|
MD5 | ceea95f5b542ab6f88b130fdeef0754b |
|
BLAKE2b-256 | f9d2d79177b6580fba1a89d7b4f36ed60a156744f06e7484415a47b47296e1ae |
Hashes for phylotrackpy-0.1.16-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d3eb73f3fb5ee0964341a084cfecfaca076e6a76e74366aa790c5e560f89bf9 |
|
MD5 | 699cf1495cdc174f295e957306155f20 |
|
BLAKE2b-256 | 2f195b75b63dcde536891d8c9f45a2671a1b7928cdb4f536ae7dabbb5eef9d6f |
Hashes for phylotrackpy-0.1.16-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e617340c48cc2e37f4780522c329fc44bbdb3985af38581b03496641345ef85 |
|
MD5 | 5ce261940e206414c552bb25b3f0d68b |
|
BLAKE2b-256 | af53de2f2cdd0ce5c93813d8ad4ad4bf4bc826f65046706bd3f0bb156b5d47ba |
Hashes for phylotrackpy-0.1.16-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6cc43fbb2bd2890e474079e531a4fe7dfa0d52c78ef7eb91398ef89c9947515 |
|
MD5 | 3f8040291a4240f0279101a3126fe5ed |
|
BLAKE2b-256 | 1da06066050dfc3379a0759daf8c930e3d4f0a896d7ee7ddb2c3a928d17fbb0d |
Hashes for phylotrackpy-0.1.16-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 640e0c8a57eccd9cec3c82df0180655fffba8d808c211bdbd1e7e08b63f90dbf |
|
MD5 | 84b874f6b5b2c9b0a57b955816f2afcd |
|
BLAKE2b-256 | f4650f39fc65f3f1554494ff1dc13a15c5bba6def2dbc6cd95dbedff846c388a |
Hashes for phylotrackpy-0.1.16-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68af9f14e0b6a33bb94514bf2a61baa6cbf0ee40770e98bc97ece8a0463c0c58 |
|
MD5 | 2a6378db758fc248e5a86f4514d04584 |
|
BLAKE2b-256 | 8e8d4a28b3ee310befa6f0dcbd9eda698084f501ef58945cf8fa3d2e158c7c63 |
Hashes for phylotrackpy-0.1.16-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e022e9b275a972814128fe2ddf07895ca733528d7cdcf3a7afd0cffff40a95d |
|
MD5 | 358b4c962ec5d9ddcddc5e8ab517d637 |
|
BLAKE2b-256 | 31847dd280121da463d235fbdf5a6d7c402f7347c7fe501f0cbd8c0ae63037b1 |
Hashes for phylotrackpy-0.1.16-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 721d35fd7a13f59f8d12b0e6a6eab855c15b5403efb88f80a818b6340a2c7666 |
|
MD5 | dd1830abae9db447124a69d957a8a726 |
|
BLAKE2b-256 | 020c78749ca5df3e5de2d9d9c20833e4ee0db9f2c5d7bf27a07f095ad597e2b8 |