DE analysis between time points

Time comparison AP-axis

Notebook for performing the DESeq2 analysis

Here we perform DEseq2 analysis for each time comparison, i.e. to identify the genes that change between the time points (in anterior and posterior tissues).

This is performed on each condition separately.

Run each of the supplimentary DEseq 2 experiments

runDeseq2BetweenTime(paste('merged_df_anterior_wt_11-18_FEATURE_COUNTS_', date, '.csv', sep=''), paste('DEseq2_CNS_anterior_wt_11-18_', date, '.csv', sep=''))
[1] "========================== RUNNING merged_df_anterior_wt_11-18_FEATURE_COUNTS_20210124.csv ============================"
[1] "Dataset dimensions:  15117 8"
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
[1] "Deseq2 design:  ~"             "Deseq2 design:  tissue + time"

out of 15117 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 6245, 41%
LFC < 0 (down)     : 6115, 40%
outliers [1]       : 0, 0%
low counts [2]     : 0, 0%
(mean count < 7)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

log2 fold change (MLE): time 18 vs 11 
Wald test p-value: time 18 vs 11 
DataFrame with 15117 rows and 6 columns
                 baseMean log2FoldChange     lfcSE         stat       pvalue         padj
                <numeric>      <numeric> <numeric>    <numeric>    <numeric>    <numeric>
70375-Ica1l       1318.03        5.64223  0.149042      37.8566  0.00000e+00  0.00000e+00
320840-Negr1      6555.41        4.71498  0.122025      38.6395  0.00000e+00  0.00000e+00
320429-Trank1     3790.13        7.58517  0.190022      39.9174  0.00000e+00  0.00000e+00
214230-Pak6       2996.26        6.53159  0.177697      36.7568 9.04325e-296 3.41767e-292
103967-Dnm3       4801.13        5.47815  0.149405      36.6663 2.51277e-294 7.59710e-291
...                   ...            ...       ...          ...          ...          ...
108705-Pttg1ip  2247.3365   -0.000219204 0.0925904 -0.002367455     0.998111     0.998356
69297-Lrrc46      75.2733    0.000691936 0.3014340  0.002295482     0.998168     0.998356
21391-Tbxas1      45.1978   -0.000789042 0.3545447 -0.002225507     0.998224     0.998356
239170-Fam160b2 1476.2587   -0.000218608 0.1090903 -0.002003919     0.998401     0.998467
213980-Fbxw10     23.3805   -0.000273951 0.4918497 -0.000556982     0.999556     0.999556
runDeseq2BetweenTime(paste('merged_df_anterior_ko_11-18_FEATURE_COUNTS_', date, '.csv', sep=''), paste('DEseq2_CNS_anterior_ko_11-18_', date, '.csv', sep=''))
[1] "========================== RUNNING merged_df_anterior_ko_11-18_FEATURE_COUNTS_20210124.csv ============================"
[1] "Dataset dimensions:  15425 8"
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
[1] "Deseq2 design:  ~"             "Deseq2 design:  tissue + time"

out of 15425 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 6302, 41%
LFC < 0 (down)     : 6170, 40%
outliers [1]       : 0, 0%
low counts [2]     : 0, 0%
(mean count < 6)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

log2 fold change (MLE): time 18 vs 11 
Wald test p-value: time 18 vs 11 
DataFrame with 15425 rows and 6 columns
               baseMean log2FoldChange     lfcSE        stat    pvalue      padj
              <numeric>      <numeric> <numeric>   <numeric> <numeric> <numeric>
214230-Pak6     3184.69        6.06427 0.1292838     46.9066         0         0
213582-Map9     5829.16        3.22176 0.0802596     40.1417         0         0
269610-Chd5     6861.76        6.13684 0.1492642     41.1139         0         0
434128-Pnmal2  13655.54        3.98644 0.0589009     67.6805         0         0
93843-Pnck      2348.64        3.88132 0.0984787     39.4127         0         0
...                 ...            ...       ...         ...       ...       ...
11777-Ap3s1     849.187   -0.000279388 0.0909826 -0.00307078  0.997550  0.997809
16009-Igfbp3   1099.478    0.000568137 0.2286891  0.00248432  0.998018  0.998212
72133-Trub1    1195.778    0.000145404 0.1054636  0.00137871  0.998900  0.999029
74479-Snx11    1548.126    0.000104932 0.0851620  0.00123214  0.999017  0.999082
69727-Usp46    2474.183    0.000118817 0.1047340  0.00113447  0.999095  0.999095
runDeseq2BetweenTime(paste('merged_df_anterior_wt_11-13_FEATURE_COUNTS_', date, '.csv', sep=''), paste('DEseq2_CNS_anterior_wt_11-13_', date, '.csv', sep=''))
[1] "========================== RUNNING merged_df_anterior_wt_11-13_FEATURE_COUNTS_20210124.csv ============================"
[1] "Dataset dimensions:  14789 8"
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
[1] "Deseq2 design:  ~"             "Deseq2 design:  tissue + time"

out of 14789 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 5753, 39%
LFC < 0 (down)     : 5754, 39%
outliers [1]       : 0, 0%
low counts [2]     : 0, 0%
(mean count < 6)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

log2 fold change (MLE): time 13 vs 11 
Wald test p-value: time 13 vs 11 
DataFrame with 14789 rows and 6 columns
               baseMean log2FoldChange     lfcSE        stat    pvalue      padj
              <numeric>      <numeric> <numeric>   <numeric> <numeric> <numeric>
78294-Rps27a   12325.95       -2.78582 0.0691907    -40.2630         0         0
268449-Rpl23a  10798.27       -3.84460 0.0918637    -41.8511         0         0
20918-Eif1      8917.69       -1.71713 0.0411784    -41.6998         0         0
170930-Sumo2    6345.09       -3.51959 0.0634919    -55.4336         0         0
13877-Erh       5990.03       -2.42839 0.0613256    -39.5983         0         0
...                 ...            ...       ...         ...       ...       ...
56495-Asna1    3595.338   -1.47192e-04 0.0541694 -0.00271724  0.997832  0.998102
12857-Cox4i1  12540.921    1.75901e-04 0.0692759  0.00253914  0.997974  0.998128
17929-Myom1     102.304    5.43922e-04 0.2162432  0.00251533  0.997993  0.998128
94246-Arid4b   4591.562    1.53003e-04 0.0776083  0.00197147  0.998427  0.998481
67812-Ubxn4    5079.677   -9.23433e-05 0.0485119 -0.00190352  0.998481  0.998481
runDeseq2BetweenTime(paste('merged_df_anterior_ko_11-13_FEATURE_COUNTS_', date, '.csv', sep=''), paste('DEseq2_CNS_anterior_ko_11-13_', date, '.csv', sep=''))
[1] "========================== RUNNING merged_df_anterior_ko_11-13_FEATURE_COUNTS_20210124.csv ============================"
[1] "Dataset dimensions:  15071 8"
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates

References:

Love MI, Huber W, Anders S (2014). “Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2.” Genome Biology, 15, 550. doi: 10.1186/s13059-014-0550-8.

LS0tCnRpdGxlOiAiVGltZSBjb21wYXJpc29uIEFQLWF4aXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyMgTm90ZWJvb2sgZm9yIHBlcmZvcm1pbmcgdGhlIERFU2VxMiBhbmFseXNpcwoKSGVyZSB3ZSBwZXJmb3JtIERFc2VxMiBhbmFseXNpcyBmb3IgZWFjaCB0aW1lIGNvbXBhcmlzb24sIGkuZS4gdG8gaWRlbnRpZnkgdGhlIGdlbmVzIHRoYXQgY2hhbmdlIGJldHdlZW4gdGhlIHRpbWUgcG9pbnRzIChpbiBhbnRlcmlvciBhbmQgcG9zdGVyaW9yIHRpc3N1ZXMpLgoKVGhpcyBpcyBwZXJmb3JtZWQgb24gZWFjaCBjb25kaXRpb24gc2VwYXJhdGVseS4KCmBgYHtyfQpsaWJyYXJ5KERFU2VxMikKCnByb2plY3RfZGlyIDwtICcuLi9kYXRhL3Jlc3VsdHMvZGVzZXEyLycKCmRhdGUgPC0gJzIwMjEwMTI0JwoKcnVuRGVzZXEyQmV0d2VlblRpbWUgPC0gZnVuY3Rpb24gKGZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUpIHsKCiAgICBmaWxlX3BhdGggPC0gcGFzdGUocHJvamVjdF9kaXIsIGZpbGVuYW1lLCBzZXA9JycpCiAgCiAgICBwcmludChwYXN0ZSgiPT09PT09PT09PT09PT09PT09PT09PT09PT0gUlVOTklORyAiLCBmaWxlbmFtZSwgIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Iiwgc2VwPSIiKSkKICAgICAgIyBodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvcmVsZWFzZS93b3JrZmxvd3MvdmlnbmV0dGVzL3JuYXNlcUdlbmUvaW5zdC9kb2Mvcm5hc2VxR2VuZS5odG1sCiAgICBjb3VudHMgPC0gcmVhZC5jc3YoZmlsZV9wYXRoLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpCiAgICByb3duYW1lcyhjb3VudHMpIDwtIGNvdW50cyR1X2lkCgogICAgIyBMZXQncyBtYWtlIHN1cmUgb3VyIGNvdW50IGRhdGEgaXMgaW4gbWF0cml4IGZvcm1hdCBhbmQgaXMgb25seSB0aGUgbnVtZXJpYyBjb2x1bW5zIGkuZS4gZXZlcnl0aGluZyBidXQgdGhlIGdlbmVzCiAgICBjb3VudHMgPC0gY291bnRzWywyOm5jb2woY291bnRzKV0KCiAgICBzYW1wbGVfbmFtZXMgPC0gY29sbmFtZXMoY291bnRzKSAjIFNhbXBsZSBuYW1lcwogICAgCiAgICAjIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmNsdWRlIHRoZSBJRCBpbiBvdXIgY29sdW1ucwogICAgY291bnRfbWF0cml4IDwtIGFzLm1hdHJpeChjb3VudHMpCiAgICAKICAgICMgV2Ugbm93IHNldCB0aGUgcm93IG5hbWVzIHRvIGJlIHRoZSBnZW5lIElEcwogICAgcm93bmFtZXMoY291bnRfbWF0cml4KSA8LSByb3duYW1lcyhjb3VudHMpIAogICAgCiAgICAjIFNlcGFyYXRlIG91dCBlYWNoIG9mIHRoZSBzYW1wbGUgbmFtZXMgdG8gYmUgdGhlIGRpZmZlcmVudCBleHBlcmltZW50IGNvbmRpdGlvbnMKICAgIGNvbmRpdGlvbiA8LSBmYWN0b3Ioc2FwcGx5KHNhbXBsZV9uYW1lcywgZnVuY3Rpb24oeCl7c3Vic3RyKHgsIHN0YXJ0ID0gMSwgc3RvcCA9IDIpfSkpCiAgICB0aW1lIDwtIGZhY3RvcihzYXBwbHkoc2FtcGxlX25hbWVzLCBmdW5jdGlvbih4KXtzdWJzdHIoeCwgc3RhcnQgPSAzLCBzdG9wID0gNCl9KSkKICAgIHRpc3N1ZSA8LSBmYWN0b3Ioc2FwcGx5KHNhbXBsZV9uYW1lcywgZnVuY3Rpb24oeCl7c3Vic3RyKHgsIHN0YXJ0ID0gNSwgc3RvcCA9IDYpfSkpCiAgICBjb25kaXRpb25faWQgPC0gZmFjdG9yKHNhcHBseShzYW1wbGVfbmFtZXMsIGZ1bmN0aW9uKHgpe2lmIChncmVwbCgia28iLCB4LCBmaXhlZCA9IFRSVUUpKSB7MX0gZWxzZSB7MH19KSkKCiAgICAjIEZvciBERXNlcTIgd2UgbmVlZCB0byB0dXJuIHRoaXMgaW50byBhIGRhdGFmcmFtZSAKICAgIHNhbXBsZV9kZiA9IGRhdGEuZnJhbWUoc2FtcGxlX25hbWVzID0gc2FtcGxlX25hbWVzLCBjb25kaXRpb24gPSBjb25kaXRpb24sIHRpbWUgPSB0aW1lLCB0aXNzdWUgPSB0aXNzdWUsIGNvbmRpdGlvbl9pZD1jb25kaXRpb25faWQpCiAgICBkZHNfbWF0IDwtIERFU2VxRGF0YVNldEZyb21NYXRyaXgoY291bnREYXRhID0gY291bnRfbWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sRGF0YSA9IHNhbXBsZV9kZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbiA9IH50aXNzdWUrdGltZSkgIyBIYXZlIHRpc3N1ZSBhcyBhIGZhY3RvcgogICAgCiAgICBkZHMgPC0gZXN0aW1hdGVTaXplRmFjdG9ycyhkZHNfbWF0KQogICAgCiAgICBkZHNfbWF0JGRlc2lnbiAjIFByaW50IHRoZSBkZXNpZ24gb2YgdGhlIGV4cGVyaW1lbnQKICAgIGRkcyA8LSBlc3RpbWF0ZVNpemVGYWN0b3JzKGRkc19tYXQpCiAgICAKICAgIG51bV9zYW1wbGVzX21lZXRpbmdfY3JpdGVyaWEgPC0gNCAgIyBiZSBzdHJpY3QgYW5kIGVuZm9yY2UgdGhhdCBhdCBsZWFzdCBoYWxmIHRoZSBzYW1wbGVzIG5lZWQgdG8gbWVldCB0aGUgY3JpdGVyaWEgKGkuZS4gb25lIGZ1bGwgY29uZGl0aW9uKQogICAgbnVtX2NvdW50c19pbl9nZW5lIDwtIDEwICAjIFRoZXkgbmVlZCBhdCBsZWFzdCAxMCBjb3VudHMKICAgIGtlZXAgPC0gcm93U3Vtcyhjb3VudHMoZGRzX21hdCkgPj0gbnVtX2NvdW50c19pbl9nZW5lKSA+PSBudW1fc2FtcGxlc19tZWV0aW5nX2NyaXRlcmlhCiAgICBkZHMgPC0gZGRzX21hdFtrZWVwLF0gIyBPbmx5IGtlZXAgdGhlIHJvd3Mgd2l0aCB0aGlzIGNyaXRlcmlhCiAgICAKICAgICAjIExldCdzIHByaW50IHRoZSBudW1iZXIgb2Ygcm93cwogICAgcHJpbnQocGFzdGUoIkRhdGFzZXQgZGltZW5zaW9uczogIiwgbnJvdyhkZHMpLCBuY29sKGRkcykpKQogICAgaWYgKG5jb2woZGRzKSAhPSA4KSB7CiAgICAgIHByaW50KHBhc3RlKCI9PT09PT09PT09PT09PT09PT0gV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgWU9VUiBDT0xVTU5TIE1BWSBIQVZFIFRIRSBXUk9ORyBESU1TICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0iLCBzZXA9IiIpKQogICAgfQogICAgCiAgICAjIFJ1biBERXNlcTIKICAgIGRkcyA8LSBERVNlcShkZHMpCiAgICAKICAgICMgQnVpbGQgcmVzdWx0cyB0YWJsZQogICAgcmVzIDwtIHJlc3VsdHMoZGRzKQogICAgcHJpbnQocGFzdGUoIkRlc2VxMiBkZXNpZ246ICIsIGRlc2lnbihkZHMpKSkKCiAgICAjIFN1bWFyaXNlIHRoZSByZXN1bHRzCiAgICBzdW1tYXJ5KHJlcykKICAgIAogICAgIyBMYXN0bHksIHdlIG1heSB3YW50IHRvIHNlZSB0aGUgcmVzdWx0cyBvZiB0aGUgaGlnaCBsb2dmb2xkY2hhbmdlIGUuZy4gPiAxIHdpdGggYSBwYWRqIHZhbHVlIDwgMC4wNQogICAgcmVzX3BhZGowNV9sZmMxIDwtIHJlc3VsdHMoZGRzLCBsZmNUaHJlc2hvbGQ9MikKICAgIHRhYmxlKHJlc19wYWRqMDVfbGZjMSRwYWRqIDwgMC4wNSkKICAgIAogICAgIyBTYXZlIHRoZSByZXN1bHRzCiAgICByZXNfb3JkZXJlZCA8LSByZXNbb3JkZXIocmVzJHB2YWx1ZSksXQogICAgb3V0cHV0X2ZpbGVuYW1lIDwtIHBhc3RlKHByb2plY3RfZGlyLCBvdXRwdXRfZmlsZW5hbWUsIHNlcD0nJykKICAgIHdyaXRlLmNzdihyZXNfb3JkZXJlZCwgZmlsZSA9IG91dHB1dF9maWxlbmFtZSkKICAgIHJldHVybihyZXNfb3JkZXJlZCkKfQoKYGBgCgoKIyMgUnVuIGVhY2ggb2YgdGhlIHN1cHBsaW1lbnRhcnkgREVzZXEgMiBleHBlcmltZW50cwoKYGBge3J9CnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfYW50ZXJpb3Jfd3RfMTEtMThfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19hbnRlcmlvcl93dF8xMS0xOF8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfYW50ZXJpb3Jfa29fMTEtMThfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19hbnRlcmlvcl9rb18xMS0xOF8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCgpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX2FudGVyaW9yX3d0XzExLTEzX0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfYW50ZXJpb3Jfd3RfMTEtMTNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX2FudGVyaW9yX2tvXzExLTEzX0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfYW50ZXJpb3Jfa29fMTEtMTNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQoKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9hbnRlcmlvcl93dF8xMy0xOF9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX2FudGVyaW9yX3d0XzEzLTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9hbnRlcmlvcl9rb18xMy0xOF9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX2FudGVyaW9yX2tvXzEzLTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfYW50ZXJpb3Jfd3RfMTEtMTVfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19hbnRlcmlvcl93dF8xMS0xNV8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfYW50ZXJpb3Jfa29fMTEtMTVfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19hbnRlcmlvcl9rb18xMS0xNV8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCgpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX2FudGVyaW9yX3d0XzEzLTE1X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfYW50ZXJpb3Jfd3RfMTMtMTVfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX2FudGVyaW9yX2tvXzEzLTE1X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfYW50ZXJpb3Jfa29fMTMtMTVfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQoKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9hbnRlcmlvcl93dF8xNS0xOF9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX2FudGVyaW9yX3d0XzE1LTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9hbnRlcmlvcl9rb18xNS0xOF9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX2FudGVyaW9yX2tvXzE1LTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfcG9zdGVyaW9yX3d0XzExLTE4X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfcG9zdGVyaW9yX3d0XzExLTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9wb3N0ZXJpb3Jfa29fMTEtMThfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19wb3N0ZXJpb3Jfa29fMTEtMThfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQoKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9wb3N0ZXJpb3Jfd3RfMTEtMTNfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19wb3N0ZXJpb3Jfd3RfMTEtMTNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX3Bvc3Rlcmlvcl9rb18xMS0xM19GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX3Bvc3Rlcmlvcl9rb18xMS0xM18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCgpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX3Bvc3Rlcmlvcl93dF8xMy0xOF9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX3Bvc3Rlcmlvcl93dF8xMy0xOF8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfcG9zdGVyaW9yX2tvXzEzLTE4X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfcG9zdGVyaW9yX2tvXzEzLTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfcG9zdGVyaW9yX3d0XzE1LTE4X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfcG9zdGVyaW9yX3d0XzE1LTE4XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9wb3N0ZXJpb3Jfa29fMTUtMThfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19wb3N0ZXJpb3Jfa29fMTUtMThfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQoKcnVuRGVzZXEyQmV0d2VlblRpbWUocGFzdGUoJ21lcmdlZF9kZl9wb3N0ZXJpb3Jfd3RfMTEtMTVfRkVBVFVSRV9DT1VOVFNfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpLCBwYXN0ZSgnREVzZXEyX0NOU19wb3N0ZXJpb3Jfd3RfMTEtMTVfJywgZGF0ZSwgJy5jc3YnLCBzZXA9JycpKQpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX3Bvc3Rlcmlvcl9rb18xMS0xNV9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX3Bvc3Rlcmlvcl9rb18xMS0xNV8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCgpydW5EZXNlcTJCZXR3ZWVuVGltZShwYXN0ZSgnbWVyZ2VkX2RmX3Bvc3Rlcmlvcl93dF8xMy0xNV9GRUFUVVJFX0NPVU5UU18nLCBkYXRlLCAnLmNzdicsIHNlcD0nJyksIHBhc3RlKCdERXNlcTJfQ05TX3Bvc3Rlcmlvcl93dF8xMy0xNV8nLCBkYXRlLCAnLmNzdicsIHNlcD0nJykpCnJ1bkRlc2VxMkJldHdlZW5UaW1lKHBhc3RlKCdtZXJnZWRfZGZfcG9zdGVyaW9yX2tvXzEzLTE1X0ZFQVRVUkVfQ09VTlRTXycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSwgcGFzdGUoJ0RFc2VxMl9DTlNfcG9zdGVyaW9yX2tvXzEzLTE1XycsIGRhdGUsICcuY3N2Jywgc2VwPScnKSkKYGBgCgojIyMgUHJpbnQgc2Vzc2lvbiBpbmZvCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAoKIyMjIFJlZmVyZW5jZXM6CgpMb3ZlIE1JLCBIdWJlciBXLCBBbmRlcnMgUyAoMjAxNCkuIOKAnE1vZGVyYXRlZCBlc3RpbWF0aW9uIG9mIGZvbGQgY2hhbmdlIGFuZCBkaXNwZXJzaW9uIGZvciBSTkEtc2VxIGRhdGEgd2l0aCBERVNlcTIu4oCdIEdlbm9tZSBCaW9sb2d5LCAxNSwgNTUwLiBkb2k6IDEwLjExODYvczEzMDU5LTAxNC0wNTUwLTguCgo=