Overview

Differential expression analysis with 8hpa control and all replicates.

Spearman Correlation

Spearman’s rank correlation coefficient is a nonparametric measure of rank correlation, recommended for data that does not necessarily come from a bivariate normal distribution (Wikipedia). Below, we plot the Spearman correlation of the RPM (reads per million) for all genes that have an average RPM ≥ 1.

Pairwise PCA

Principal component analysis (PCA) is a statistical procedure that uses an orthogonal transformation to convert a set of observations of possibly correlated variables into a set of values of linearly uncorrelated variables called principal components (Wikipedia). Below is a PCA of the 8hpf control versus the other developmental timepoints.

MA and Volcano plots

MA plot: The log2 fold change (M) plotted against the log2 average (A) of the normalized read count for each gene. Significantly differentially expressed genes are plotted in red.

Volcano plot: The log2 fold change (M) plotted against the -log10 (eg. 1e^-10 = 10) of the adjusted p-value.

1hpf/8hpf

2hpf/8hpf

3hpf/8hpf

4hpf/8hpf

5hpf/8hpf

6hpf/8hpf

7hpf/8hpf

Heatmaps

The first heatmap was made by hierarchically clustering the euclidean distances of the log2 fold change for genes with p-values less than 1e^-5 at any time point.

The second heatmap uses the same hierarchical method to cluster timepoints as well as genes.

LS0tCnRpdGxlOiAiOGhwYSBDb250cm9sIC0gQWxsIFJlcGxpY2F0ZXMiIAphdXRob3I6ICJLaXJzdGVuIEdvdHRpbmciCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICAgIHRvYzogdHJ1ZQogICAgICB0b2NfZGVwdGg6IDIKICAgICAgdG9jX2Zsb2F0OgogICAgICAgIGNvbGxhcHNlZDogZmFsc2UKCi0tLQoKCmBgYHtyIGluaXRpYWxpemVEYXRhOGhwYUNvbnRyb2xBbGxSZXBsaWNhdGVzLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiaGlkZSIsIG1lc3NhZ2UgPSBGQUxTRSwgZXJyb3IgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBjYWNoZSA9IEZBTFNFfQoKIyMgdXNlciBpbnB1dCB0byAnREVTZXEyQWxsLlJkYXRhJwoKbG9hZCgiLi9vdXRwdXQvREVTZXEyQWxsQWxsUi5SZGF0YSIpCnNldHdkKCIuLyIpCgoKIyMgRmlyc3QgbGlzdCB0aGUgUiBsaWJyYXJpZXMgSSB3YW50IHRvIHVzZQpsaWJyYXJpZXMgICAgICAgIDwtIGMoIkRFU2VxMiIsICJncGxvdHMiLCAiUkNvbG9yQnJld2VyIiwgJ2tuaXRyJywgJ2dyaWQnLCAnZ3JpZEV4dHJhJywgInRpZHl2ZXJzZSIsICdraVJzdGVuJykKCiMjIE5vdyByZWFkIGluIHRoZSBsaWJyYXJpZXMKbGFwcGx5KGxpYnJhcmllcywgZnVuY3Rpb24oeCl7CiAgICBsaWJyYXJ5KHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSwgcXVpZXRseSA9IFRSVUUpCiAgICB9KQoKIyMgSW5pdGlhbGl6ZSBrbml0ciBvcHRpb25zCm9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9ImhpZGUiLCBmaWcua2VlcD0iYWxsIiwgd2FybmluZz1GQUxTRSwgZXJyb3I9RkFMU0UsIGZpZy5wYXRoPSJmaWd1cmVzLyIsIGNhY2hlID0gVFJVRSkKb3B0c19rbml0JHNldChyb290LmRpciA9ICIuLyIpCgpgYGAKCgoKIyBPdmVydmlldwoKRGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYW5hbHlzaXMgd2l0aCA4aHBhIGNvbnRyb2wgYW5kIGFsbCByZXBsaWNhdGVzLgoKI1NwZWFybWFuIENvcnJlbGF0aW9uCgpTcGVhcm1hbidzIHJhbmsgY29ycmVsYXRpb24gY29lZmZpY2llbnQgaXMgYSBub25wYXJhbWV0cmljIG1lYXN1cmUgb2YgcmFuayBjb3JyZWxhdGlvbiwgcmVjb21tZW5kZWQgZm9yIGRhdGEgdGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBjb21lIGZyb20gYSBiaXZhcmlhdGUgbm9ybWFsIGRpc3RyaWJ1dGlvbiAoV2lraXBlZGlhKS4gQmVsb3csIHdlIHBsb3QgdGhlIFNwZWFybWFuIGNvcnJlbGF0aW9uIG9mIHRoZSBSUE0gKHJlYWRzIHBlciBtaWxsaW9uKSBmb3IgYWxsIGdlbmVzIHRoYXQgaGF2ZSBhbiBhdmVyYWdlIFJQTSAmIzg4MDU7IDEuCgoKCmBgYHtyIHNwZWFybWFuX2NvcnJlbGF0aW9uOGhwYUNvbnRyb2xBbGxSZXBsaWNhdGVzLCBmaWcuY2FwID0gIiJ9CgojIyBNYWtlIGEgc3BlYXJtYW4gcGxvdAoKCmZpbHRlcmVkUlBNcyA8LSBub3JtQ291bnRzICU+JSBncm91cF9ieShJRCkgJT4lIG11dGF0ZShycG1GbGFnID0gaWZlbHNlKChtZWFuKHJwbSkgPj0gMSksIHllcyA9ICd5ZXMnLCBubyA9ICdubycpKSAlPiUgdW5ncm91cCgpICU+JQogICAgZmlsdGVyKHJwbUZsYWcgPT0gJ3llcycpICU+JSBzZWxlY3QoSUQsIFNhbXBsZSwgcnBtKSAlPiUgc3ByZWFkKFNhbXBsZSwgcnBtKQoKCgpycG1maWx0ICAgICAgICA8LSBkYXRhLmZyYW1lKHNlbGVjdChmaWx0ZXJlZFJQTXMsIC1JRCksIHJvdy5uYW1lcyA9IGZpbHRlcmVkUlBNcyRJRCwgY2hlY2submFtZXMgPSBGQUxTRSkKc3BlYXJtYW4gICAgICAgPC0gZGF0YS5mcmFtZShjb3IocnBtZmlsdCwgbWV0aG9kID0gJ3NwZWFybWFuJyksIGNoZWNrLm5hbWVzID0gRkFMU0UpCnNwZWFybWFuJElEICAgIDwtIHJvd25hbWVzKHNwZWFybWFuKQpzcGVhcm1hblRpZHkgICA8LSBzcGVhcm1hbiAlPiUgZ2F0aGVyKFNhbXBsZSwgY29ycmVsYXRpb24sIC1JRCkKCiMjIGFuZCBwbG90IGl0IQoKZ2dwbG90KGRhdGEgPSBzcGVhcm1hblRpZHksIGFlcyh4ID0gSUQsIHkgPSBTYW1wbGUsIGZpbGwgPSBjb3JyZWxhdGlvbikpICsgZ2VvbV90aWxlKCkgKwogICAgc2NhbGVfZmlsbF9ncmFkaWVudDIobG93ID0gInllbGxvdyIsIG1pZCA9ICd3aGl0ZScsIGhpZ2ggPSAicHVycGxlNCIsIG1pZHBvaW50ID0gMC44LCBsaW1pdCA9IGMoMCwxKSkgKwogICAgICAgIGdndGl0bGUoJ1NwZWFybWFuIENvcnJlbGF0aW9uIG9mIFNhbXBsZXMnKSArIHhsYWIoJycpICsgeWxhYignJykgKwogICAgICAgICAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKCgojIFBhaXJ3aXNlIFBDQQoKUHJpbmNpcGFsIGNvbXBvbmVudCBhbmFseXNpcyAoUENBKSBpcyBhIHN0YXRpc3RpY2FsIHByb2NlZHVyZSB0aGF0IHVzZXMgYW4gb3J0aG9nb25hbCB0cmFuc2Zvcm1hdGlvbiB0byBjb252ZXJ0IGEgc2V0IG9mIG9ic2VydmF0aW9ucyBvZiBwb3NzaWJseSBjb3JyZWxhdGVkIHZhcmlhYmxlcyBpbnRvIGEgc2V0IG9mIHZhbHVlcyBvZiBsaW5lYXJseSB1bmNvcnJlbGF0ZWQgdmFyaWFibGVzIGNhbGxlZCBwcmluY2lwYWwgY29tcG9uZW50cyAoV2lraXBlZGlhKS4gQmVsb3cgaXMgYSBQQ0Egb2YgdGhlIDhocGYgY29udHJvbCB2ZXJzdXMgdGhlIG90aGVyIGRldmVsb3BtZW50YWwgdGltZXBvaW50cy4gCgpgYGB7ciBQQ0E4aHBhQ29udHJvbEFsbFJlcGxpY2F0ZXMsIGZpZy5mdWxsd2lkdGggPSBUUlVFLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDEwfQoKcGNhc19kYXRhIDwtIGxhcHBseShjb250cmFzdF9uYW1lcywgZnVuY3Rpb24oeCl7CiAgICB5IDwtIHBsb3RQQ0EocmxkX2FsbFtbeF1dLCByZXR1cm5EYXRhID0gVFJVRSwgbnRvcCA9IDEwMDAwKQogICAgeSRJRCA8LSB4CiAgICB5Cn0pCgpwY2FfZGF0YSA8LSBiaW5kX3Jvd3MocGNhc19kYXRhKQoKZ2dwbG90KGRhdGEgPSBwY2FfZGF0YSwgYWVzKHggPSBQQzEsIHkgPSBQQzIsIGxhYmVsID0gbmFtZSwgY29sb3VyID0gZmFjdG9yKGNvbmRpdGlvbikpKSArCiAgICAgICAgICAgIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgdGhlbWVfYncoKSArIGdlb21fdGV4dChoanVzdCA9IDAsIHZqdXN0ID0gLTAuNCkgKwogICAgICAgICAgICB4bGFiKCJQQyAxIikgKyB5bGFiKCJQQyAyIikgKyAKICAgICAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMC45OCwgMCkpICArCiAgICAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAuMiwgMCkpICsKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogICAgICAgICAgICBmYWNldF93cmFwKH4gSUQsIHNjYWxlcyA9ICJmcmVlIikKCmBgYAoKCgojIE1BIGFuZCBWb2xjYW5vIHBsb3RzIHsudGFic2V0fQoKTUEgcGxvdDogVGhlIGxvZzIgZm9sZCBjaGFuZ2UgKE0pIHBsb3R0ZWQgYWdhaW5zdCB0aGUgbG9nMiBhdmVyYWdlIChBKSBvZiB0aGUgbm9ybWFsaXplZCByZWFkIGNvdW50IGZvciBlYWNoIGdlbmUuIFNpZ25pZmljYW50bHkgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGFyZSBwbG90dGVkIGluIHJlZC4KClZvbGNhbm8gcGxvdDogVGhlIGxvZzIgZm9sZCBjaGFuZ2UgKE0pIHBsb3R0ZWQgYWdhaW5zdCB0aGUgLWxvZzEwIChlZy4gMWVeLTEwID0gMTApIG9mIHRoZSBhZGp1c3RlZCBwLXZhbHVlLgoKYGBge3IgbWF2b2w4aHBhQ29udHJvbEFsbFJlcGxpY2F0ZXN9CgoKeCA8LSBjb250cmFzdF9uYW1lc1tbMV1dCgpwbG90cyA8LSBsYXBwbHkoY29udHJhc3RfbmFtZXMsIGZ1bmN0aW9uKHgpewogICAgZGYgICAgICA8LSBhbGxfcmVzdWx0c190aWR5REYgJT4lIGZpbHRlcihjb250cmFzdElEID09IHgpICU+JSBzcHJlYWQoZGVhX0lELCBkZWFfVmFsdWUpICU+JSBtdXRhdGUobG9nYmFzZU1lYW4gPSBsb2coYmFzZU1lYW4pKQogICAgcHZhbCAgICA8LSBhcy5udW1lcmljKHB2YWwpCiAgICBpZihpcy5udWxsKGRmKSl7CiAgICAgICAgbWVzc2FnZShwYXN0ZTAoIlB2YWx1ZSB0b28gc3RyaW5nZW50IGZvciAiLCBjb250cmFzdCwgIi4gTUEvVm9sY2FubyBwbG90IG9tbWl0ZWQuXG4iKSkKICAgIH0gZWxzZSB7CiAgICAgICAgcHZhbCAgICAgICAgICAgICAgICAgIDwtIGFzLm51bWVyaWMocHZhbCkKICAgICAgICBsb3dlcl9sYWJlbCAgICAgICAgICAgPC0gcGFzdGUwKCJHZW5lcyB3aXRoIENvdW50czogIiwgbnJvdyhkZiksICJcblVwOiAiLCNjcmVhdGUgdGhlIGxhYmVsIG9mIHRoZSBsZWdlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3coc3Vic2V0KGRmLCBsb2cyRm9sZENoYW5nZSA+IDAgJiBwYWRqIDwgcHZhbCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgRG93bjogIiwgbnJvdyhzdWJzZXQoZGYsIGxvZzJGb2xkQ2hhbmdlIDwgMCAmIHBhZGogPCBwdmFsKSksICJcbiIpCiAgCiAgICAgICAgZGYgPC0gZGYgJT4lIG11dGF0ZShzaWduaWZpY2FuY2VfZ3JvdXAgPSBpZmVsc2UocGFkaiA8PSBwdmFsLCB5ZXMgPSAneWVzJywgbm8gPSAnbm8nKSkKICAKICAgICAgICBsZWdlbmRfbGFiZWxzICAgICAgICA8LSBjKHBhc3RlMCgicGFkaiA+ICIsIHB2YWwsIjogIiwgbnJvdyhmaWx0ZXIoZGYsIHNpZ25pZmljYW5jZV9ncm91cCA9PSAnbm8nKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJwYWRqIDwgIiwgcHZhbCwiOiAiLCBucm93KGZpbHRlcihkZiwgc2lnbmlmaWNhbmNlX2dyb3VwID09ICd5ZXMnKSkpKQogICAgICAgIG1hLnBsb3QgPC0gICBnZ3Bsb3QoZGYsIGFlcyh4ID0gbG9nYmFzZU1lYW4sIHkgPSBsb2cyRm9sZENoYW5nZSwgZ3JvdXAgPSBzaWduaWZpY2FuY2VfZ3JvdXAsIGNvbG91ciA9IHNpZ25pZmljYW5jZV9ncm91cCkpICsKICAgICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSArIHRoZW1lX2J3KCkgKwogICAgICAgICAgICAgICAgICAgICAgZ2d0aXRsZSgnTUEgcGxvdCcpICsgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpICsKICAgICAgICAgICAgICAgICAgICAgIHhsYWIoIkEgPSBNZWFuIG9mIGxvZzIoQWJ1bmRhbmNlKSIpICsgeWxhYigiTSA9IGxvZzIoRm9sZCBDaGFuZ2UpIikgKwogICAgICAgICAgICAgICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImdyYXkyNCIsICJyZWQiKSwgbmFtZSA9IGxvd2VyX2xhYmVsLCBicmVha3MgPSBjKCJncmF5MjQiLCAicmVkIiksIGxhYmVscyA9IGxlZ2VuZF9sYWJlbHMpICsKICAgICAgICAgICAgICAgICAgICAgIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAwKSwgY29sb3VyID0gImJsYWNrIiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDEpLCBjb2xvdXIgPSAiZ3JheTY2IiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IC0xKSwgY29sb3VyID0gImdyYXk2NiIsIGxpbmV0eXBlPSJkYXNoZWQiKSArCiAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScsIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0yMCkpCiAgICAgICAgdm9sY2Fuby5wbG90IDwtICAgZ2dwbG90KGRmLCBhZXMoeCA9IGxvZzJGb2xkQ2hhbmdlLCB5ID0gLWxvZyhwYWRqLCBiYXNlID0gYygxMCkpLCBncm91cCA9IHNpZ25pZmljYW5jZV9ncm91cCwgY29sb3VyID0gc2lnbmlmaWNhbmNlX2dyb3VwKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2d0aXRsZSgnVm9sY2FubyBwbG90JykgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWIoIk0gPSBsb2cyKEZvbGQgQ2hhbmdlKSIpICsgeWxhYigiLWxvZzEwKEFkanVzdGVkIFAtVmFsdWUpIikgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JheTI0IiwgInJlZCIpLCBsYWJlbHMgPSBsZWdlbmRfbGFiZWxzLCBuYW1lPWxvd2VyX2xhYmVsKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIiksIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MjApKQogICAgIGdyb2IgPC0gICBtYXJyYW5nZUdyb2IobGlzdChtYS5wbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGNhbm8ucGxvdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gdGV4dEdyb2IoeCwgZ3AgPSBncGFyKGZvbnNpemUgPSA0MCwgZm9udGZhY2UgPSAnYm9sZCcsIGNleCA9IDIpLCBoanVzdCA9IDEuOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IDEsIG5jb2wgPSAyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocz1jKDAuMzgsIDAuNjIpKQogICAgIGludmlzaWJsZShncm9iKQogICAgfQp9KQoKbmFtZXMocGxvdHMpIDwtIGNvbnRyYXN0X25hbWVzCmBgYAoKYGBge3IgcGxvdG1hdm9sOGhwYUNvbnRyb2xBbGxSZXBsaWNhdGVzLCBmaWcua2VlcCA9ICJhbGwiLCBmaWcuaGVpZ2h0ID0gMTAsIGZpZy53aWR0aCA9IDIwLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdhc2lzJ30KCmZvcihpIGluIGNvbnRyYXN0X25hbWVzKXsKICBjYXQocGFzdGUwKCJcblxuXG4jIyIsIGksICJcbiIpKQogIHByaW50KHBsb3RzW1tpXV0pCn0KCmBgYAoKCiNIZWF0bWFwcwoKClRoZSBmaXJzdCBoZWF0bWFwIHdhcyBtYWRlIGJ5IGhpZXJhcmNoaWNhbGx5IGNsdXN0ZXJpbmcgdGhlIGV1Y2xpZGVhbiBkaXN0YW5jZXMgb2YgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgZm9yIGdlbmVzIHdpdGggcC12YWx1ZXMgbGVzcyB0aGFuICAxZV4tNSBhdCBhbnkgdGltZSBwb2ludC4KClRoZSBzZWNvbmQgaGVhdG1hcCB1c2VzIHRoZSBzYW1lIGhpZXJhcmNoaWNhbCBtZXRob2QgdG8gY2x1c3RlciB0aW1lcG9pbnRzIGFzIHdlbGwgYXMgZ2VuZXMuCgoKYGBge3IgcGFpcndpc2VIZWF0bWFwczhocGFDb250cm9sQWxsUmVwbGljYXRlcywgcmVzdWx0cyA9ICJoaWRlIiwgZmlnLmNhcCA9ICIiLCBmaWcua2VlcCA9ICJoaWdoIn0KCgpsZmNfdGFibGUgPC0gYWxsX3Jlc3VsdHNfdGlkeURGICU+JQogIG11dGF0ZShzaWduaWZpY2FudCA9IGlmZWxzZShkZWFfSUQgPT0gJ3BhZGonICYgZGVhX1ZhbHVlIDw9IHB2YWwsIHllcyA9IFRSVUUsIG5vID0gRkFMU0UpKSAlPiUgIyBsYWJlbCBhbGwgc2lnbmlmaWNhbnQgZ2VuZXMKICBncm91cF9ieShjb250cmFzdElELCBHZW5lKSAlPiUgIyBsYWJlbCB0aGUgIyBvZiB0aW1lcyBnZW5lcyB0aGF0IGFyZSBzaWduaWZpY2FudAogIHVuZ3JvdXAoKSAgJT4lCiAgZ3JvdXBfYnkoR2VuZSkgJT4lCiAgZmlsdGVyKGFueShzaWduaWZpY2FudCksIGRlYV9JRCA9PSAnbG9nMkZvbGRDaGFuZ2UnKSAlPiUKICBzZWxlY3QoLXNpZ25pZmljYW50KSAlPiUgdW5pdGUoY29sbmFtZSwgY29udHJhc3RJRCwgZGVhX0lEKSAlPiUgIyBtYWtlIHRoZSB0YWJsZSB3aWRlIGZvcm1hdHRlZAogIHNwcmVhZChjb2xuYW1lLCBkZWFfVmFsdWUpCgoKIyMgY3JlYXRlIGEgdGFibGUgb2Ygc2lnbmlmaWNhbnQgZ2VuZXMgd2l0aCB0aGUgY2x1c3RlciBjb2xvcnMgYXNzaWduZWQKCnNpZ24udGFibGUgPC0gYWxsX3Jlc3VsdHNfdGlkeURGICAlPiUgCiAgc3ByZWFkKGtleSA9IGRlYV9JRCwgdmFsdWUgPSBkZWFfVmFsdWUpICAlPiUgCiAgZmlsdGVyKEdlbmUgJWluJSBsZmNfdGFibGUkR2VuZSkgJT4lCiAgZ3JvdXBfYnkoY29udHJhc3RJRCwgR2VuZSkgJT4lIAogIG11dGF0ZShzb3J0YnkgPSAtbG9nKHBhZGosIGJhc2UgPSBjKDEwKSkqc2lnbihsb2cyRm9sZENoYW5nZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lIGdhdGhlcihkZWFfSUQsIGRlYV9WYWx1ZSwgLUdlbmUsIC1jb250cmFzdElEKSAlPiUgCiAgdW5pdGUoaWRBbGwsIGNvbnRyYXN0SUQsIGRlYV9JRCkgJT4lIHNwcmVhZChrZXkgPSBpZEFsbCwgdmFsdWUgPSBkZWFfVmFsdWUpICU+JQogIGRwbHlyOjpyZW5hbWUoJ1RyYW5zY3JpcHRJRCcgPSBHZW5lKQoKCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIGRhdGEuZnJhbWUobGZjX3RhYmxlKQpyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSA8LSBsZmNfdGFibGUkR2VuZQpoZWF0bWFwLmlucHV0LnRhYmxlJEdlbmUgICAgICA8LSBOVUxMCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIG5hLm9taXQoZGF0YS5tYXRyaXgoaGVhdG1hcC5pbnB1dC50YWJsZVt3aGljaChyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSAlaW4lIHNpZ24udGFibGUkVHJhbnNjcmlwdElEKSwgXSkpCmNvbG5hbWVzKGhlYXRtYXAuaW5wdXQudGFibGUpIDwtIGNvbnRyYXN0X25hbWVzCgoKcHJldHR5Y29sb3JzICA8LSBjb2xvclJhbXBQYWxldHRlKHJldihicmV3ZXIucGFsKDExLCAiU3BlY3RyYWwiKSkpCmNvbC5icmVha3MgICAgPC0gc2VxKC0zLCAzLCBsZW5ndGgub3V0ID0gbmNvbChoZWF0bWFwLmlucHV0LnRhYmxlKSkKCgojIyBNYWtlIHR3byBoZWF0bWFwcywgYWxsb3cgY3VzdGltaXphYmxlIGdyYXBoaW5nCgpociA8LSBoY2x1c3QoZGlzdChoZWF0bWFwLmlucHV0LnRhYmxlKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyByb3cgZGVuZHJvZ3JhbQpoYyA8LSBoY2x1c3QoZGlzdCh0KGhlYXRtYXAuaW5wdXQudGFibGUpKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyBjb2x1bW4gZGVuZHJvZ3JhbQoKbXljbHIgICAgIDwtIGN1dHJlZShociwgayA9IDcpICMgc2V0IHVwIHdoZXJlIHRoZSBncm91cHMgd2lsbCBiZSwgY2hhbmdlICdrJyBmb3IgbW9yZSBvciBsZXNzIGdyb3VwcwpteWNvbHIgICAgPC0gYygiR3JlZW4iLCAiUmVkIiwgIkJsdWUiLCAiT3JhbmdlIiwgIlB1cnBsZSIsICJQaW5rIiwgIlllbGxvdyIpICMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGggYXMgJ2snCm15Y29sciAgICA8LSBteWNvbHJbYXMudmVjdG9yKG15Y2xyKV0gIyBwdWxsIG91dCB0aGUgY29sb3JzIGFzc2lnbmVkIHRvIGVhY2ggZ2VuZQpteWNvbHIuZGYgPC0gZGF0YS5mcmFtZShDbHVzdGVyX0NvbG9yID0gbXljb2xyLCBUcmFuc2NyaXB0SUQgPSBuYW1lcyhteWNscikpICMgY3JlYXRlIGEgZGF0YSBmcmFtZSBvZiB0aGUgY2x1c3RlciBjb2xvciBlYWNoIGdlbmUgYmVsb25ncyB0bwoKCmlmKG5jb2woaGVhdG1hcC5pbnB1dC50YWJsZSkgPiAxKXsKICAgICMjIE1ha2UgYSBoZWF0bWFwIHdpdGhvdXQgYSBjb2x1bW4gZGVuZHJvZ3JhbQogICAgY29sLmJyZWFrcyAgICA8LSBzZXEoLTMsIDMsIGxlbmd0aC5vdXQgPSBuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpKQogICAgaGVhdG1hcCAgICAgICA8LSBoZWF0bWFwLjIoaGVhdG1hcC5pbnB1dC50YWJsZSwgbWFyZ2luID0gYygxNSw1KSwgY29sID0gcHJldHR5Y29sb3JzLCBkZW5kcm9ncmFtID0gJ3JvdycsIHRyYWNlID0gYygibm9uZSIpLCBSb3d2PWFzLmRlbmRyb2dyYW0oaHIpLCBDb2x2ID0gTkEsIGxhYlJvdyA9IEZBTFNFLCBrZXkgPSBUUlVFLCBicmVha3MgPSBjb2wuYnJlYWtzLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIpCiAgICB0aXRsZShtYWluID0gcGFzdGUwKCJDbHVzdGVyaW5nIG9mICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBsaW5lID0gMCkKICAgIHBhcihjZXgubWFpbj0wLjkpCn0KCgppZihuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpID4gMikgewogICAgayA8LSBpZmVsc2UobmNvbChoZWF0bWFwLmlucHV0LnRhYmxlIDwgNSksIDMsIDUpCiAgICBteWNsYyAgPC0gY3V0cmVlKGhjLCBrID0gaykgIyBjcmVhdGUgZ3JvdXBpbmdzIGZvciB0aGUgY29sdW1uIGRlbmRyb2dyYW0KICAgIG15Y29sYyA8LSBjKCJHcmVlbiIsICJSZWQiLCAiQmx1ZSIsICJPcmFuZ2UiLCAiUHVycGxlIikKICAgIG15Y29sYyA8LSBteWNvbGNbYXMudmVjdG9yKG15Y2xjKV0KICAgICMjIE1ha2UgYSBoZWF0bWFwIG9mIHRoZSBsb2dmb2xkIGNoYW5nZXMgd2l0aCBjb2x1bW4gZGVuZHJvZ3JhbS4KICAgIGhlYXRtYXAgICAgICAgPC0gaGVhdG1hcC4yKGhlYXRtYXAuaW5wdXQudGFibGUsIG1hcmdpbiA9IGMoMTUsNSksIGRlbmRyb2dyYW0gPSAnYm90aCcsIFJvd3YgPSBhcy5kZW5kcm9ncmFtKGhyKSwgQ29sdiA9IGFzLmRlbmRyb2dyYW0oaGMpLCBjb2wgPSBwcmV0dHljb2xvcnMsIHRyYWNlID0gYygibm9uZSIpLCBsYWJSb3cgPSBGQUxTRSwga2V5ID0gVFJVRSwgYnJlYWtzID0gY29sLmJyZWFrcywgbWFpbiA9IHBhc3RlMCgiQ2x1c3RlcmluZyBvZiBUaW1lcG9pbnRzIG9uICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIsIENvbFNpZGVDb2xvcnMgPSBteWNvbGMpCn0KCmBgYAoKCgpgYGB7ciBzZXNzaW9uOGhwYUNvbnRyb2xBbGxSZXBsaWNhdGVzLCBlY2hvPUZBTFNFfQp3cml0ZUxpbmVzKGNhcHR1cmUub3V0cHV0KHNlc3Npb25JbmZvKCkpLCAic2Vzc2lvbkluZm8vOGhwYUFsbFNlc3Npb25JbmZvLnR4dCIpCmBgYAojW1Itc2Vzc2lvbiBpbmZvcm1hdGlvbl0oc2Vzc2lvbkluZm8vOGhwYUFsbFNlc3Npb25JbmZvLnR4dCkKCg==

Privacy Policy

Terms of Use