Reference, Resources and Data

Nature Protocols volume 8, pages 1494-1512 (2013)

Machine: CentOS Linux 7 on Virtual Box

Starting directory and subdirectory contents

trinity2$ ls -l

drwxrwxr-x. 3 bdash bdash 149 Mar 24 17:58 Sp_ds

-rwxrwx—. 1 bdash bdash 175846179 Mar 24 13:01 Sp.ds.1M.left.fq

-rwxrwx—. 1 bdash bdash 175846179 Mar 24 13:01 Sp.ds.1M.right.fq

drwxrwxr-x. 3 bdash bdash 149 Mar 24 18:11 Sp_hs

-rwxrwx—. 1 bdash bdash 175736042 Mar 24 13:02 Sp.hs.1M.left.fq

-rwxrwx—. 1 bdash bdash 175736042 Mar 24 13:02 Sp.hs.1M.right.fq

drwxrwxr-x. 3 bdash bdash 149 Mar 24 18:28 Sp_log

-rwxrwx—. 1 bdash bdash 175741215 Mar 24 13:03 Sp.log.1M.left.fq

-rwxrwx—. 1 bdash bdash 175741215 Mar 24 13:03 Sp.log.1M.right.fq

drwxrwxr-x. 3 bdash bdash 149 Mar 24 18:20 Sp_plat

-rwxrwx—. 1 bdash bdash 175899533 Mar 24 13:03 Sp.plat.1M.left.fq

-rwxrwx—. 1 bdash bdash 175899533 Mar 24 13:03 Sp.plat.1M.right.fq

drwxr-xr-x. 2 bdash bdash 4096 Mar 25 11:27 trinity_out_dir

Analysis of deifferential expression (DE) of isoforms using edgeR

Combine the RSEM-computed isoform fragment counts into a matrix file for the isoforms

trinity2$ abundance_estimates_to_matrix.pl –est_method RSEM Sp_ds/RSEM.isoforms.results Sp_hs/RSEM.isoforms.results Sp_plat/RSEM.isoforms.results Sp_log g/RSEM.isoforms.results –gene_trans_map trinity_out_dir/Trinity.fasta.gene_trans_map –name_sample_by_basedir –out_prefix isoforms

Some log readouts

-reading file: Sp_ds/RSEM.isoforms.results

-reading file: Sp_hs/RSEM.isoforms.results

-reading file: Sp_plat/RSEM.isoforms.results

-reading file: Sp_log/RSEM.isoforms.results

  • Outputting combined matrix.

/home/bdash/miniconda2/opt/trinity-2.5.1/util/support_scripts/run_TMM_scale_matrix.pl –matrix isoforms.isoform.TPM.not_cross_norm > isoforms.isoform.TMM.EXPR.matrixCMD: R –vanilla -q < __tmp_runTMM.R 1>&2

library(edgeR)

Loading required package: limma

rnaseqMatrix = read.table(“isoforms.isoform.TPM.not_cross_norm”, header=T, row.names=1, com=’’, check.names=F)

rnaseqMatrix = as.matrix(rnaseqMatrix)

rnaseqMatrix = round(rnaseqMatrix)

exp_study = DGEList(counts=rnaseqMatrix, group=factor(colnames(rnaseqMatrix)))

exp_study = calcNormFactors(exp_study)

exp_study\(samples\)eff.lib.size = exp_study\(samples\)lib.size * exp_study\(samples\)norm.factors

write.table(exp_study$samples, file=“isoforms.isoform.TPM.not_cross_norm.TMM_info.txt”, quote=F, sep=", row.names=F)

/home/bdash/miniconda2/opt/trinity-2.5.1/util/support_scripts/run_TMM_scale_matrix.pl –matrix isoforms.gene.TPM.not_cross_norm > isoforms.gene.TMM.EXPR.matrixCMD: R –vanilla -q < __tmp_runTMM.R 1>&2

library(edgeR)

Loading required package: limma

rnaseqMatrix = read.table(“isoforms.gene.TPM.not_cross_norm”, header=T, row.names=1, com=’’, check.names=F)

rnaseqMatrix = as.matrix(rnaseqMatrix)

rnaseqMatrix = round(rnaseqMatrix)

exp_study = DGEList(counts=rnaseqMatrix, group=factor(colnames(rnaseqMatrix)))

exp_study = calcNormFactors(exp_study)

exp_study\(samples\)eff.lib.size = exp_study\(samples\)lib.size * exp_study\(samples\)norm.factors

write.table(exp_study$samples, file=“isoforms.gene.TPM.not_cross_norm.TMM_info.txt”, quote=F, sep=", row.names=F)

Additional files in the Directory/subdirectory following the above run

trinity2$ ls -l

-rw-rw-r–. 1 bdash bdash 384230 Mar 25 11:28 isoforms.gene.counts.matrix

-rw-rw-r–. 1 bdash bdash 419995 Mar 25 11:28 isoforms.gene.TMM.EXPR.matrix

-rw-rw-r–. 1 bdash bdash 361306 Mar 25 11:28 isoforms.gene.TPM.not_cross_norm

-rw-rw-r–. 1 bdash bdash 234 Mar 25 11:28 isoforms.gene.TPM.not_cross_norm.TMM_info.txt

-rw-rw-r–. 1 bdash bdash 431596 Mar 25 11:28 isoforms.isoform.counts.matrix

-rw-rw-r–. 1 bdash bdash 475183 Mar 25 11:28 isoforms.isoform.TMM.EXPR.matrix

-rw-rw-r–. 1 bdash bdash 411944 Mar 25 11:28 isoforms.isoform.TPM.not_cross_norm

-rw-rw-r–. 1 bdash bdash 234 Mar 25 11:28 isoforms.isoform.TPM.not_cross_norm.TMM_info.txt

-rw-rw-r–. 1 bdash bdash 526 Mar 25 11:28 __tmp_runTMM.R

trinity2$ ls -l Sp_ds/

-rw-rw-r–. 1 bdash bdash 142305396 Mar 24 17:55 bowtie.bam

-rw-rw-r–. 1 bdash bdash 0 Mar 24 17:55 bowtie.bam.ok

a file readout

trinity2$head isoforms.isoform.counts.matrix

                Sp_ds   Sp_hs   Sp_plat Sp_log

TRINITY_DN639_c0_g1_i1 1.00 1.00 6.00 2.00

TRINITY_DN3154_c0_g1_i2 103.26 101.58 108.72 43.73

TRINITY_DN1606_c0_g1_i1 0.00 0.00 0.00 0.00

TRINITY_DN4534_c0_g1_i1 0.00 0.00 0.88 1.58

TRINITY_DN694_c0_g1_i1 317.00 235.00 377.00 506.00

TRINITY_DN3962_c0_g2_i1 0.00 0.00 0.00 1.00

TRINITY_DN3383_c0_g2_i1 2.00 0.00 3.00 10.00

TRINITY_DN2506_c0_g1_i2 0.00 0.00 1.82 4.60

TRINITY_DN1195_c0_g1_i1 1.00 0.00 0.00 4.00

Sp_hs, Sp_plat and Sp_log directories will have contents similar to that of Sp_ds

Run DE analysis : Volcano plots and additional results

trinity2$ run_DE_analysis.pl –matrix isoforms.isoform.counts.matrix –output isoforms_DE –dispersion 0.1 –method edgeR

Some log readouts

-note, no biological replicates identified, so setting min reps = 2.

Got 4 samples, and got: 5 data fields.

Header: Sp_ds Sp_hs Sp_plat Sp_log

Next: TRINITY_DN639_c0_g1_i1 1.00 1.00 6.00 2.00

$VAR1 = { ‘Sp_ds’ => 1,

      'Sp_hs' => 2,
      
      'Sp_log' => 4,
      
      'Sp_plat' => 3
     
    };
    
    

$VAR1 = { ‘Sp_plat’ => [ ‘Sp_plat’ ],

      'Sp_log' => [
                    'Sp_log'
                  ],
                  
      'Sp_ds' => [
                   'Sp_ds'
                 ],
                 
      'Sp_hs' => [
                   'Sp_hs'
                 ]
    };
    
    

Contrasts to perform are:

$VAR1 = [ [ ‘Sp_ds’, ‘Sp_hs’ ],

      [
        'Sp_ds',
        'Sp_log'
      ],
      
      [
        'Sp_ds',
        'Sp_plat'
      ],
      
      [
        'Sp_hs',
        'Sp_log'
      ],
      
      [
        'Sp_hs',
        'Sp_plat'
      ],
      
      [
        'Sp_log',
        'Sp_plat'
      ]
    ];
    
    
    

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.Sp_ds.vs.Sp_hs.EdgeR.Rscript

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.Sp_ds.vs.Sp_log.EdgeR.Rscript

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.Sp_ds.vs.Sp_plat.EdgeR.Rscript

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.Sp_hs.vs.Sp_log.EdgeR.Rscript

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.Sp_hs.vs.Sp_plat.EdgeR.Rscript

CMD: R –vanilla -q < isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.Sp_log.vs.Sp_plat.EdgeR.Rscript

Additional directories/subdirectories/files files created follwing the above run

trinity2]$ ls -l

drwxrwxr-x. 2 bdash bdash 4096 Mar 25 11:35 isoforms_DE

trinity2]$ ls -l isoforms_DE/

-rw-rw-r–. 1 bdash bdash 232175 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 744943 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 56194 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1246 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.Sp_ds.vs.Sp_hs.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 236512 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 785584 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 58462 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1252 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.Sp_ds.vs.Sp_log.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 238730 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 750585 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 54153 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1258 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.Sp_ds.vs.Sp_plat.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 231199 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 743784 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 55135 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1252 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.Sp_hs.vs.Sp_log.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 235014 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 795142 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 58927 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1258 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.Sp_hs.vs.Sp_plat.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 240471 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 833522 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 62074 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 1264 Mar 25 11:35 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.Sp_log.vs.Sp_plat.EdgeR.Rscript

Analyze diffrentail expression of isoforms: Heatmaps and other results

isoforms_DE]$ analyze_diff_expr.pl –matrix isoforms.isoform.TMM.EXPR.matrix –output DE_isoforms

Some log readouts

** Found 568 features as differentially expressed.

CMD: /home/bdash/miniconda2/opt/trinity-2.5.1/Analysis/DifferentialExpression/PtR -m DE_isoforms.matrix –log2 –heatmap –min_colSums 0 –min_rowSums 0 –gene_dist euclidean –sample_dist euclidean –sample_cor_matrix –center_rows –save

CMD: R –vanilla -q < DE_isoforms.matrix.R

library(cluster)

library(Biobase)

Loading required package: BiocGenerics

Loading required package: parallel

Attaching package: ‘BiocGenerics’

………………….

Welcome to Bioconductor

…………………..

library(qvalue)

……………….

source(“/home/bdash/miniconda2/opt/trinity-2.5.1/Analysis/DifferentialExpression/R/heatmap.3.R”)

source(“/home/bdash/miniconda2/opt/trinity-2.5.1/Analysis/DifferentialExpression/R/misc_rnaseq_funcs.R”)

source(“/home/bdash/miniconda2/opt/trinity-2.5.1/Analysis/DifferentialExpression/R/pairs3.R”)

source(“/home/bdash/miniconda2/opt/trinity-2.5.1/Analysis/DifferentialExpression/R/vioplot2.R”)

Additional directories/subdirectories/files created following the above run

trinity2$ ls -l isoforms_DE/

-rw-rw-r–. 1 bdash bdash 107 Mar 25 11:42 DE_feature_counts.P0.001_C2.matrix

-rw-rw-r–. 1 bdash bdash 30267 Mar 25 11:42 DE_isoforms.matrix

-rw-rw-r–. 1 bdash bdash 53939 Mar 25 11:42 DE_isoforms.matrix.log2.centered.dat

-rw-rw-r–. 1 bdash bdash 36578 Mar 25 11:42 DE_isoforms.matrix.log2.centered.genes_vs_samples_heatmap.pdf

-rw-rw-r–. 1 bdash bdash 290 Mar 25 11:42 DE_isoforms.matrix.log2.centered.sample_cor.dat

-rw-rw-r–. 1 bdash bdash 5867 Mar 25 11:42 DE_isoforms.matrix.log2.centered.sample_cor_matrix.pdf

-rw-rw-r–. 1 bdash bdash 3887 Mar 25 11:42 DE_isoforms.matrix.R

-rw-rw-r–. 1 bdash bdash 1342120 Mar 25 11:42 DE_isoforms.matrix.RData

-rw-rw-r–. 1 bdash bdash 10031 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 5830 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results.P0.001_C2.Sp_ds-UP.subset

-rw-rw-r–. 1 bdash bdash 4268 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results.P0.001_C2.Sp_hs-UP.subset

-rw-rw-r–. 1 bdash bdash 24 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_hs.edgeR.DE_results.samples

-rw-rw-r–. 1 bdash bdash 28526 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 19319 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results.P0.001_C2.Sp_ds-UP.subset

-rw-rw-r–. 1 bdash bdash 9274 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results.P0.001_C2.Sp_log-UP.subset

-rw-rw-r–. 1 bdash bdash 26 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_log.edgeR.DE_results.samples

-rw-rw-r–. 1 bdash bdash 6892 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 2225 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_ds-UP.subset

-rw-rw-r–. 1 bdash bdash 4734 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_plat-UP.subset

-rw-rw-r–. 1 bdash bdash 28 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_ds_vs_Sp_plat.edgeR.DE_results.samples

-rw-rw-r–. 1 bdash bdash 21828 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 17739 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results.P0.001_C2.Sp_hs-UP.subset

-rw-rw-r–. 1 bdash bdash 4156 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results.P0.001_C2.Sp_log-UP.subset

-rw-rw-r–. 1 bdash bdash 26 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_log.edgeR.DE_results.samples

-rw-rw-r–. 1 bdash bdash 35385 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 17568 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_hs-UP.subset

-rw-rw-r–. 1 bdash bdash 17884 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_plat-UP.subset

-rw-rw-r–. 1 bdash bdash 28 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_hs_vs_Sp_plat.edgeR.DE_results.samples

-rw-rw-r–. 1 bdash bdash 52861 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. 1 bdash bdash 19495 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_log-UP.subset

-rw-rw-r–. 1 bdash bdash 33433 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results.P0.001_C2.Sp_plat-UP.subset

-rw-rw-r–. 1 bdash bdash 30 Mar 25 11:42 isoforms.isoform.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results.samples

library(pdftools)
pdf_convert('isoforms_DE/DE_isoforms.matrix.log2.centered.genes_vs_samples_heatmap.pdf', format = "jpeg", pages = NULL, filenames = NULL, dpi = 300, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
Converting page 1 to DE_isoforms.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg... done!
[1] "DE_isoforms.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg"
DE_genes.heatmap

DE_genes.heatmap

pdf_convert('isoforms_DE/DE_isoforms.matrix.log2.centered.sample_cor_matrix.pdf', format = "jpeg", pages = NULL, filenames = NULL, dpi = 300, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
Converting page 1 to DE_isoforms.matrix.log2.centered.sample_cor_matrix_1.jpeg... done!
[1] "DE_isoforms.matrix.log2.centered.sample_cor_matrix_1.jpeg"
DE_genes.cor_matrix

DE_genes.cor_matrix

LS0tDQp0aXRsZTogIlRyaW5pdHkgdG9vbHMgKFBhcnQgSUlJLUEpOiBBbmFseXNpcyBvZiBkZSBub3ZvIHRyYW5zY3JpcHQvaXNvZm9ybXMgYXNzZW1ibHkgdXNpbmcgZWRnZVIiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpkYXRlOiAiTWFyY2ggMTksIDIwMTkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBSZWZlcmVuY2UsIFJlc291cmNlcyBhbmQgRGF0YQ0KDQojIyMgTmF0dXJlIFByb3RvY29scyB2b2x1bWUgOCwgcGFnZXMgMTQ5NC0xNTEyICgyMDEzKQ0KDQojIyMgRGF0YTogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90cmluaXR5cm5hc2VxL2ZpbGVzL21pc2MvVHJpbml0eU5hdHVyZVByb3RvY29sVHV0b3JpYWwudGd6DQoNCiMjIyBNYWNoaW5lOiBDZW50T1MgTGludXggNyBvbiBWaXJ0dWFsIEJveCANCg0KDQojIyBTdGFydGluZyBkaXJlY3RvcnkgYW5kIHN1YmRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMgdHJpbml0eTIkIGxzIC1sDQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgMTQ5IE1hciAyNCAxNzo1OCBTcF9kcw0KDQotcnd4cnd4LS0tLiAxIGJkYXNoIGJkYXNoIDE3NTg0NjE3OSBNYXIgMjQgMTM6MDEgU3AuZHMuMU0ubGVmdC5mcQ0KDQotcnd4cnd4LS0tLiAxIGJkYXNoIGJkYXNoIDE3NTg0NjE3OSBNYXIgMjQgMTM6MDEgU3AuZHMuMU0ucmlnaHQuZnENCg0KZHJ3eHJ3eHIteC4gMyBiZGFzaCBiZGFzaCAgICAgICAxNDkgTWFyIDI0IDE4OjExIFNwX2hzDQoNCi1yd3hyd3gtLS0uIDEgYmRhc2ggYmRhc2ggMTc1NzM2MDQyIE1hciAyNCAxMzowMiBTcC5ocy4xTS5sZWZ0LmZxDQoNCi1yd3hyd3gtLS0uIDEgYmRhc2ggYmRhc2ggMTc1NzM2MDQyIE1hciAyNCAxMzowMiBTcC5ocy4xTS5yaWdodC5mcQ0KDQpkcnd4cnd4ci14LiAzIGJkYXNoIGJkYXNoICAgICAgIDE0OSBNYXIgMjQgMTg6MjggU3BfbG9nDQoNCi1yd3hyd3gtLS0uIDEgYmRhc2ggYmRhc2ggMTc1NzQxMjE1IE1hciAyNCAxMzowMyBTcC5sb2cuMU0ubGVmdC5mcQ0KDQotcnd4cnd4LS0tLiAxIGJkYXNoIGJkYXNoIDE3NTc0MTIxNSBNYXIgMjQgMTM6MDMgU3AubG9nLjFNLnJpZ2h0LmZxDQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgMTQ5IE1hciAyNCAxODoyMCBTcF9wbGF0DQoNCi1yd3hyd3gtLS0uIDEgYmRhc2ggYmRhc2ggMTc1ODk5NTMzIE1hciAyNCAxMzowMyBTcC5wbGF0LjFNLmxlZnQuZnENCg0KLXJ3eHJ3eC0tLS4gMSBiZGFzaCBiZGFzaCAxNzU4OTk1MzMgTWFyIDI0IDEzOjAzIFNwLnBsYXQuMU0ucmlnaHQuZnENCg0KZHJ3eHIteHIteC4gMiBiZGFzaCBiZGFzaCAgICAgIDQwOTYgTWFyIDI1IDExOjI3IHRyaW5pdHlfb3V0X2Rpcg0KDQoNCg0KIyMgQW5hbHlzaXMgb2YgZGVpZmZlcmVudGlhbCBleHByZXNzaW9uIChERSkgb2YgaXNvZm9ybXMgdXNpbmcgZWRnZVINCg0KQ29tYmluZSB0aGUgUlNFTS1jb21wdXRlZCBpc29mb3JtIGZyYWdtZW50IGNvdW50cyBpbnRvIGEgbWF0cml4IGZpbGUgZm9yIHRoZSBpc29mb3Jtcw0KDQojIyMgdHJpbml0eTIkIGFidW5kYW5jZV9lc3RpbWF0ZXNfdG9fbWF0cml4LnBsIC0tZXN0X21ldGhvZCBSU0VNIFNwX2RzL1JTRU0uaXNvZm9ybXMucmVzdWx0cyBTcF9ocy9SU0VNLmlzb2Zvcm1zLnJlc3VsdHMgU3BfcGxhdC9SU0VNLmlzb2Zvcm1zLnJlc3VsdHMgU3BfbG9nIGcvUlNFTS5pc29mb3Jtcy5yZXN1bHRzIC0tZ2VuZV90cmFuc19tYXAgdHJpbml0eV9vdXRfZGlyL1RyaW5pdHkuZmFzdGEuZ2VuZV90cmFuc19tYXAgLS1uYW1lX3NhbXBsZV9ieV9iYXNlZGlyIC0tb3V0X3ByZWZpeCBpc29mb3Jtcw0KDQojIyMgU29tZSBsb2cgcmVhZG91dHMgDQoNCi1yZWFkaW5nIGZpbGU6IFNwX2RzL1JTRU0uaXNvZm9ybXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiBTcF9ocy9SU0VNLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogU3BfcGxhdC9SU0VNLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogU3BfbG9nL1JTRU0uaXNvZm9ybXMucmVzdWx0cw0KDQoNCiogT3V0cHV0dGluZyBjb21iaW5lZCBtYXRyaXguDQoNCi9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi41LjEvdXRpbC9zdXBwb3J0X3NjcmlwdHMvcnVuX1RNTV9zY2FsZV9tYXRyaXgucGwgLS1tYXRyaXggaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0gPiBpc29mb3Jtcy5pc29mb3JtLlRNTS5FWFBSLm1hdHJpeENNRDogUiAtLXZhbmlsbGEgLXEgPCBfX3RtcF9ydW5UTU0uUiAxPiYyIA0KDQo+IGxpYnJhcnkoZWRnZVIpDQoNCkxvYWRpbmcgcmVxdWlyZWQgcGFja2FnZTogbGltbWENCg0KDQo+IHJuYXNlcU1hdHJpeCA9IHJlYWQudGFibGUoImlzb2Zvcm1zLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtIiwgaGVhZGVyPVQsIHJvdy5uYW1lcz0xLCBjb209JycsIGNoZWNrLm5hbWVzPUYpDQoNCj4gcm5hc2VxTWF0cml4ID0gYXMubWF0cml4KHJuYXNlcU1hdHJpeCkNCg0KPiBybmFzZXFNYXRyaXggPSByb3VuZChybmFzZXFNYXRyaXgpDQoNCj4gZXhwX3N0dWR5ID0gREdFTGlzdChjb3VudHM9cm5hc2VxTWF0cml4LCBncm91cD1mYWN0b3IoY29sbmFtZXMocm5hc2VxTWF0cml4KSkpDQoNCj4gZXhwX3N0dWR5ID0gY2FsY05vcm1GYWN0b3JzKGV4cF9zdHVkeSkNCg0KPiBleHBfc3R1ZHkkc2FtcGxlcyRlZmYubGliLnNpemUgPSBleHBfc3R1ZHkkc2FtcGxlcyRsaWIuc2l6ZSAqIGV4cF9zdHVkeSRzYW1wbGVzJG5vcm0uZmFjdG9ycw0KDQo+IHdyaXRlLnRhYmxlKGV4cF9zdHVkeSRzYW1wbGVzLCBmaWxlPSJpc29mb3Jtcy5pc29mb3JtLlRQTS5ub3RfY3Jvc3Nfbm9ybS5UTU1faW5mby50eHQiLCBxdW90ZT1GLCBzZXA9Ilx0Iiwgcm93Lm5hbWVzPUYpDQoNCj4gDQovaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNS4xL3V0aWwvc3VwcG9ydF9zY3JpcHRzL3J1bl9UTU1fc2NhbGVfbWF0cml4LnBsIC0tbWF0cml4IGlzb2Zvcm1zLmdlbmUuVFBNLm5vdF9jcm9zc19ub3JtID4gaXNvZm9ybXMuZ2VuZS5UTU0uRVhQUi5tYXRyaXhDTUQ6IFIgLS12YW5pbGxhIC1xIDwgX190bXBfcnVuVE1NLlIgMT4mMiANCg0KPiBsaWJyYXJ5KGVkZ2VSKQ0KDQpMb2FkaW5nIHJlcXVpcmVkIHBhY2thZ2U6IGxpbW1hDQoNCj4gcm5hc2VxTWF0cml4ID0gcmVhZC50YWJsZSgiaXNvZm9ybXMuZ2VuZS5UUE0ubm90X2Nyb3NzX25vcm0iLCBoZWFkZXI9VCwgcm93Lm5hbWVzPTEsIGNvbT0nJywgY2hlY2submFtZXM9RikNCg0KPiBybmFzZXFNYXRyaXggPSBhcy5tYXRyaXgocm5hc2VxTWF0cml4KQ0KDQo+IHJuYXNlcU1hdHJpeCA9IHJvdW5kKHJuYXNlcU1hdHJpeCkNCg0KPiBleHBfc3R1ZHkgPSBER0VMaXN0KGNvdW50cz1ybmFzZXFNYXRyaXgsIGdyb3VwPWZhY3Rvcihjb2xuYW1lcyhybmFzZXFNYXRyaXgpKSkNCg0KPiBleHBfc3R1ZHkgPSBjYWxjTm9ybUZhY3RvcnMoZXhwX3N0dWR5KQ0KDQo+IGV4cF9zdHVkeSRzYW1wbGVzJGVmZi5saWIuc2l6ZSA9IGV4cF9zdHVkeSRzYW1wbGVzJGxpYi5zaXplICogZXhwX3N0dWR5JHNhbXBsZXMkbm9ybS5mYWN0b3JzDQoNCj4gd3JpdGUudGFibGUoZXhwX3N0dWR5JHNhbXBsZXMsIGZpbGU9Imlzb2Zvcm1zLmdlbmUuVFBNLm5vdF9jcm9zc19ub3JtLlRNTV9pbmZvLnR4dCIsIHF1b3RlPUYsIHNlcD0iXHQiLCByb3cubmFtZXM9RikNCj4gDQoNCiMjIyBBZGRpdGlvbmFsIGZpbGVzIGluIHRoZSBEaXJlY3Rvcnkvc3ViZGlyZWN0b3J5IGZvbGxvd2luZyB0aGUgYWJvdmUgcnVuDQoNCg0KIyMjIyB0cmluaXR5MiQgbHMgLWwNCg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDM4NDIzMCBNYXIgMjUgMTE6MjggaXNvZm9ybXMuZ2VuZS5jb3VudHMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNDE5OTk1IE1hciAyNSAxMToyOCBpc29mb3Jtcy5nZW5lLlRNTS5FWFBSLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDM2MTMwNiBNYXIgMjUgMTE6MjggaXNvZm9ybXMuZ2VuZS5UUE0ubm90X2Nyb3NzX25vcm0NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgICAyMzQgTWFyIDI1IDExOjI4IGlzb2Zvcm1zLmdlbmUuVFBNLm5vdF9jcm9zc19ub3JtLlRNTV9pbmZvLnR4dA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDQzMTU5NiBNYXIgMjUgMTE6MjggaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNDc1MTgzIE1hciAyNSAxMToyOCBpc29mb3Jtcy5pc29mb3JtLlRNTS5FWFBSLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDQxMTk0NCBNYXIgMjUgMTE6MjggaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgICAyMzQgTWFyIDI1IDExOjI4IGlzb2Zvcm1zLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtLlRNTV9pbmZvLnR4dA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAgIDUyNiBNYXIgMjUgMTE6MjggX190bXBfcnVuVE1NLlINCg0KDQojIyMjIHRyaW5pdHkyJCBscyAtbCBTcF9kcy8NCg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDE0MjMwNTM5NiBNYXIgMjQgMTc6NTUgYm93dGllLmJhbQ0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAgICAgMCBNYXIgMjQgMTc6NTUgYm93dGllLmJhbS5vaw0KDQoNCiMjIyBhIGZpbGUgcmVhZG91dA0KDQojIyMjIHRyaW5pdHkyJGhlYWQgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4IA0KDQoJICAgICAgICAgICAgICAgIFNwX2RzCVNwX2hzCVNwX3BsYXQJU3BfbG9nDQoJDQpUUklOSVRZX0RONjM5X2MwX2cxX2kxCTEuMDAJMS4wMAk2LjAwCTIuMDANCg0KVFJJTklUWV9ETjMxNTRfYzBfZzFfaTIJMTAzLjI2CTEwMS41OAkxMDguNzIJNDMuNzMNCg0KVFJJTklUWV9ETjE2MDZfYzBfZzFfaTEJMC4wMAkwLjAwCTAuMDAJMC4wMA0KDQpUUklOSVRZX0RONDUzNF9jMF9nMV9pMQkwLjAwCTAuMDAJMC44OAkxLjU4DQoNClRSSU5JVFlfRE42OTRfYzBfZzFfaTEJMzE3LjAwCTIzNS4wMAkzNzcuMDAJNTA2LjAwDQoNClRSSU5JVFlfRE4zOTYyX2MwX2cyX2kxCTAuMDAJMC4wMAkwLjAwCTEuMDANCg0KVFJJTklUWV9ETjMzODNfYzBfZzJfaTEJMi4wMAkwLjAwCTMuMDAJMTAuMDANCg0KVFJJTklUWV9ETjI1MDZfYzBfZzFfaTIJMC4wMAkwLjAwCTEuODIJNC42MA0KDQpUUklOSVRZX0ROMTE5NV9jMF9nMV9pMQkxLjAwCTAuMDAJMC4wMAk0LjAwDQoNCg0KDQojIyMjIFNwX2hzLCBTcF9wbGF0IGFuZCBTcF9sb2cgZGlyZWN0b3JpZXMgd2lsbCBoYXZlIGNvbnRlbnRzIHNpbWlsYXIgdG8gdGhhdCBvZiBTcF9kcw0KDQoNCg0KDQoNCiMjIFJ1biBERSBhbmFseXNpcyA6IFZvbGNhbm8gcGxvdHMgYW5kIGFkZGl0aW9uYWwgcmVzdWx0cw0KDQoNCnRyaW5pdHkyJCBydW5fREVfYW5hbHlzaXMucGwgLS1tYXRyaXggaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4IC0tb3V0cHV0IGlzb2Zvcm1zX0RFIC0tZGlzcGVyc2lvbiAwLjEgLS1tZXRob2QgZWRnZVINCg0KDQojIyMgU29tZSBsb2cgcmVhZG91dHMNCg0KLW5vdGUsIG5vIGJpb2xvZ2ljYWwgcmVwbGljYXRlcyBpZGVudGlmaWVkLCBzbyBzZXR0aW5nIG1pbiByZXBzID0gMi4NCg0KR290IDQgc2FtcGxlcywgYW5kIGdvdDogNSBkYXRhIGZpZWxkcy4NCg0KSGVhZGVyOiBTcF9kcwlTcF9ocwlTcF9wbGF0CVNwX2xvZw0KDQpOZXh0OiBUUklOSVRZX0RONjM5X2MwX2cxX2kxCTEuMDAJMS4wMAk2LjAwCTIuMDANCg0KJFZBUjEgPSB7DQogICAgICAgICAgJ1NwX2RzJyA9PiAxLA0KICAgICAgICAgIA0KICAgICAgICAgICdTcF9ocycgPT4gMiwNCiAgICAgICAgICANCiAgICAgICAgICAnU3BfbG9nJyA9PiA0LA0KICAgICAgICAgIA0KICAgICAgICAgICdTcF9wbGF0JyA9PiAzDQogICAgICAgICANCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIA0KJFZBUjEgPSB7DQogICAgICAgICAgJ1NwX3BsYXQnID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAnU3BfcGxhdCcNCiAgICAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgJ1NwX2xvZycgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ1NwX2xvZycNCiAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICdTcF9kcycgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAnU3BfZHMnDQogICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgJ1NwX2hzJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICdTcF9ocycNCiAgICAgICAgICAgICAgICAgICAgIF0NCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIA0KQ29udHJhc3RzIHRvIHBlcmZvcm0gYXJlOg0KDQokVkFSMSA9IFsNCiAgICAgICAgICBbDQogICAgICAgICAgICAnU3BfZHMnLA0KICAgICAgICAgICAgJ1NwX2hzJw0KICAgICAgICAgIF0sDQogICAgICAgICAgDQogICAgICAgICAgWw0KICAgICAgICAgICAgJ1NwX2RzJywNCiAgICAgICAgICAgICdTcF9sb2cnDQogICAgICAgICAgXSwNCiAgICAgICAgICANCiAgICAgICAgICBbDQogICAgICAgICAgICAnU3BfZHMnLA0KICAgICAgICAgICAgJ1NwX3BsYXQnDQogICAgICAgICAgXSwNCiAgICAgICAgICANCiAgICAgICAgICBbDQogICAgICAgICAgICAnU3BfaHMnLA0KICAgICAgICAgICAgJ1NwX2xvZycNCiAgICAgICAgICBdLA0KICAgICAgICAgIA0KICAgICAgICAgIFsNCiAgICAgICAgICAgICdTcF9ocycsDQogICAgICAgICAgICAnU3BfcGxhdCcNCiAgICAgICAgICBdLA0KICAgICAgICAgIA0KICAgICAgICAgIFsNCiAgICAgICAgICAgICdTcF9sb2cnLA0KICAgICAgICAgICAgJ1NwX3BsYXQnDQogICAgICAgICAgXQ0KICAgICAgICBdOw0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KQ01EOiBSIC0tdmFuaWxsYSAtcSA8IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9ocy5TcF9kcy52cy5TcF9ocy5FZGdlUi5Sc2NyaXB0DQoNCkNNRDogUiAtLXZhbmlsbGEgLXEgPCBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfbG9nLlNwX2RzLnZzLlNwX2xvZy5FZGdlUi5Sc2NyaXB0DQoNCkNNRDogUiAtLXZhbmlsbGEgLXEgPCBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfcGxhdC5TcF9kcy52cy5TcF9wbGF0LkVkZ2VSLlJzY3JpcHQNCiANCkNNRDogUiAtLXZhbmlsbGEgLXEgPCBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfbG9nLlNwX2hzLnZzLlNwX2xvZy5FZGdlUi5Sc2NyaXB0DQoNCkNNRDogUiAtLXZhbmlsbGEgLXEgPCBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfcGxhdC5TcF9ocy52cy5TcF9wbGF0LkVkZ2VSLlJzY3JpcHQNCg0KQ01EOiBSIC0tdmFuaWxsYSAtcSA8IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5TcF9sb2cudnMuU3BfcGxhdC5FZGdlUi5Sc2NyaXB0DQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3Rvcmllcy9zdWJkaXJlY3Rvcmllcy9maWxlcyBmaWxlcyBjcmVhdGVkIGZvbGx3aW5nIHRoZSBhYm92ZSBydW4NCg0KDQojIyMjIHRyaW5pdHkyXSQgbHMgLWwNCg0KDQoqKmRyd3hyd3hyLXguIDIgYmRhc2ggYmRhc2ggICAgICA0MDk2IE1hciAyNSAxMTozNSBpc29mb3Jtc19ERSoqDQoNCg0KDQp0cmluaXR5Ml0kIGxzIC1sIGlzb2Zvcm1zX0RFLw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDIzMjE3NSBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2hzLmVkZ2VSLmNvdW50X21hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDc0NDk0MyBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2hzLmVkZ2VSLkRFX3Jlc3VsdHMNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgNTYxOTQgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9ocy5lZGdlUi5ERV9yZXN1bHRzLk1BX25fVm9sY2Fuby5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDEyNDYgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9ocy5TcF9kcy52cy5TcF9ocy5FZGdlUi5Sc2NyaXB0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggMjM2NTEyIE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfbG9nLmVkZ2VSLmNvdW50X21hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDc4NTU4NCBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2xvZy5lZGdlUi5ERV9yZXN1bHRzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDU4NDYyIE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfbG9nLmVkZ2VSLkRFX3Jlc3VsdHMuTUFfbl9Wb2xjYW5vLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgMTI1MiBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2xvZy5TcF9kcy52cy5TcF9sb2cuRWRnZVIuUnNjcmlwdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDIzODczMCBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX3BsYXQuZWRnZVIuY291bnRfbWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggNzUwNTg1IE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDU0MTUzIE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLk1BX25fVm9sY2Fuby5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDEyNTggTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9wbGF0LlNwX2RzLnZzLlNwX3BsYXQuRWRnZVIuUnNjcmlwdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDIzMTE5OSBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX2xvZy5lZGdlUi5jb3VudF9tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA3NDM3ODQgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9oc192c19TcF9sb2cuZWRnZVIuREVfcmVzdWx0cw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICA1NTEzNSBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX2xvZy5lZGdlUi5ERV9yZXN1bHRzLk1BX25fVm9sY2Fuby5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDEyNTIgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9oc192c19TcF9sb2cuU3BfaHMudnMuU3BfbG9nLkVkZ2VSLlJzY3JpcHQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAyMzUwMTQgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9oc192c19TcF9wbGF0LmVkZ2VSLmNvdW50X21hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDc5NTE0MiBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICA1ODkyNyBNYXIgMjUgMTE6MzUgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5NQV9uX1ZvbGNhbm8ucGRmDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAxMjU4IE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfcGxhdC5TcF9ocy52cy5TcF9wbGF0LkVkZ2VSLlJzY3JpcHQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAyNDA0NzEgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5lZGdlUi5jb3VudF9tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA4MzM1MjIgTWFyIDI1IDExOjM1IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDYyMDc0IE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfbG9nX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5NQV9uX1ZvbGNhbm8ucGRmDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAxMjY0IE1hciAyNSAxMTozNSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfbG9nX3ZzX1NwX3BsYXQuU3BfbG9nLnZzLlNwX3BsYXQuRWRnZVIuUnNjcmlwdA0KDQoNCg0KIyMgQW5hbHl6ZSBkaWZmcmVudGFpbCBleHByZXNzaW9uIG9mIGlzb2Zvcm1zOiBIZWF0bWFwcyBhbmQgb3RoZXIgcmVzdWx0cw0KDQojIyMgaXNvZm9ybXNfREVdJCBhbmFseXplX2RpZmZfZXhwci5wbCAtLW1hdHJpeCBpc29mb3Jtcy5pc29mb3JtLlRNTS5FWFBSLm1hdHJpeCAtLW91dHB1dCBERV9pc29mb3Jtcw0KDQojIyMjIFNvbWUgbG9nIHJlYWRvdXRzDQoNCioqIEZvdW5kIDU2OCBmZWF0dXJlcyBhcyBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQuDQoNCg0KQ01EOiAvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNS4xL0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUHRSIC1tIERFX2lzb2Zvcm1zLm1hdHJpeCAtLWxvZzIgLS1oZWF0bWFwIC0tbWluX2NvbFN1bXMgMCAtLW1pbl9yb3dTdW1zIDAgLS1nZW5lX2Rpc3QgZXVjbGlkZWFuIC0tc2FtcGxlX2Rpc3QgZXVjbGlkZWFuIC0tc2FtcGxlX2Nvcl9tYXRyaXggLS1jZW50ZXJfcm93cyAtLXNhdmUgDQoNCkNNRDogUiAtLXZhbmlsbGEgLXEgPCBERV9pc29mb3Jtcy5tYXRyaXguUg0KDQo+IGxpYnJhcnkoY2x1c3RlcikNCg0KPiBsaWJyYXJ5KEJpb2Jhc2UpDQoNCkxvYWRpbmcgcmVxdWlyZWQgcGFja2FnZTogQmlvY0dlbmVyaWNzDQoNCkxvYWRpbmcgcmVxdWlyZWQgcGFja2FnZTogcGFyYWxsZWwNCg0KQXR0YWNoaW5nIHBhY2thZ2U6IMOi4oKsy5xCaW9jR2VuZXJpY3PDouKCrOKEog0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCldlbGNvbWUgdG8gQmlvY29uZHVjdG9yDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCj4gbGlicmFyeShxdmFsdWUpDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjUuMS9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvaGVhdG1hcC4zLlIiKQ0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjUuMS9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvbWlzY19ybmFzZXFfZnVuY3MuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNS4xL0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi9wYWlyczMuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNS4xL0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi92aW9wbG90Mi5SIikNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yaWVzL3N1YmRpcmVjdG9yaWVzL2ZpbGVzIGNyZWF0ZWQgZm9sbG93aW5nIHRoZSBhYm92ZSBydW4NCg0KDQp0cmluaXR5MiQgbHMgLWwgaXNvZm9ybXNfREUvDQoNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMTA3IE1hciAyNSAxMTo0MiBERV9mZWF0dXJlX2NvdW50cy5QMC4wMDFfQzIubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAzMDI2NyBNYXIgMjUgMTE6NDIgREVfaXNvZm9ybXMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICA1MzkzOSBNYXIgMjUgMTE6NDIgREVfaXNvZm9ybXMubWF0cml4LmxvZzIuY2VudGVyZWQuZGF0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAzNjU3OCBNYXIgMjUgMTE6NDIgREVfaXNvZm9ybXMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAyOTAgTWFyIDI1IDExOjQyIERFX2lzb2Zvcm1zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLnNhbXBsZV9jb3IuZGF0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNTg2NyBNYXIgMjUgMTE6NDIgREVfaXNvZm9ybXMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXgucGRmDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMzg4NyBNYXIgMjUgMTE6NDIgREVfaXNvZm9ybXMubWF0cml4LlINCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAxMzQyMTIwIE1hciAyNSAxMTo0MiBERV9pc29mb3Jtcy5tYXRyaXguUkRhdGENCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDEwMDMxIE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfaHMuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuREUuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNTgzMCBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2hzLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLlNwX2RzLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDQyNjggTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9ocy5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5TcF9ocy1VUC5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDI0IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfaHMuZWRnZVIuREVfcmVzdWx0cy5zYW1wbGVzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAyODUyNiBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX2xvZy5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5ERS5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDE5MzE5IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfbG9nLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLlNwX2RzLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDkyNzQgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9sb2cuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuU3BfbG9nLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAgMjYgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9kc192c19TcF9sb2cuZWRnZVIuREVfcmVzdWx0cy5zYW1wbGVzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNjg5MiBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuREUuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMjIyNSBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuU3BfZHMtVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNDczNCBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2RzX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuU3BfcGxhdC1VUC5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDI4IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfZHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLnNhbXBsZXMNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDIxODI4IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfbG9nLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLkRFLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgMTc3MzkgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9oc192c19TcF9sb2cuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuU3BfaHMtVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNDE1NiBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX2xvZy5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5TcF9sb2ctVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICAyNiBNYXIgMjUgMTE6NDIgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LlNwX2hzX3ZzX1NwX2xvZy5lZGdlUi5ERV9yZXN1bHRzLnNhbXBsZXMNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDM1Mzg1IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5ERS5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDE3NTY4IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5TcF9ocy1VUC5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDE3ODg0IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfaHNfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5TcF9wbGF0LVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAgMjggTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9oc192c19TcF9wbGF0LmVkZ2VSLkRFX3Jlc3VsdHMuc2FtcGxlcw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgNTI4NjEgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5ERS5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDE5NDk1IE1hciAyNSAxMTo0MiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguU3BfbG9nX3ZzX1NwX3BsYXQuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuU3BfbG9nLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgMzM0MzMgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5TcF9wbGF0LVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAgMzAgTWFyIDI1IDExOjQyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5TcF9sb2dfdnNfU3BfcGxhdC5lZGdlUi5ERV9yZXN1bHRzLnNhbXBsZXMNCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShwZGZ0b29scykNCmBgYA0KDQoNCmBgYHtyfQ0KcGRmX2NvbnZlcnQoJ2lzb2Zvcm1zX0RFL0RFX2lzb2Zvcm1zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmdlbmVzX3ZzX3NhbXBsZXNfaGVhdG1hcC5wZGYnLCBmb3JtYXQgPSAianBlZyIsIHBhZ2VzID0gTlVMTCwgZmlsZW5hbWVzID0gTlVMTCwgZHBpID0gMzAwLCBhbnRpYWxpYXMgPSBUUlVFLCBvcHcgPSAiIiwgdXB3ID0gIiIsIHZlcmJvc2UgPSBUUlVFKQ0KYGBgDQoNCiFbREVfZ2VuZXMuaGVhdG1hcF0oREVfaXNvZm9ybXMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwXzEuanBlZykNCg0KDQpgYGB7cn0NCnBkZl9jb252ZXJ0KCdpc29mb3Jtc19ERS9ERV9pc29mb3Jtcy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yX21hdHJpeC5wZGYnLCBmb3JtYXQgPSAianBlZyIsIHBhZ2VzID0gTlVMTCwgZmlsZW5hbWVzID0gTlVMTCwgZHBpID0gMzAwLCBhbnRpYWxpYXMgPSBUUlVFLCBvcHcgPSAiIiwgdXB3ID0gIiIsIHZlcmJvc2UgPSBUUlVFKQ0KYGBgDQoNCiFbREVfZ2VuZXMuY29yX21hdHJpeF0oREVfaXNvZm9ybXMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXhfMS5qcGVnKQ0KDQoNCg0KDQoNCg0KDQo=