Workflow Overview


wayfinder

Objectives

  • List some applications of scRNA-Seq.
  • Compare and contrast the capabilities and challenges in scRNA-Seq vs bulk RNA-Seq approaches.
  • Introduce a specific experimental model to guide discussion and learning.
  • Outline the abstract approach to single-cell sequencing and consider the 10x Genomics platform in more detail.
  • Consider common challenges in executing these initial steps.



Overview of bulk RNA-seq and scRNA-Seq

Next Generation Sequencing (NGS) enables many powerful experimental designs and analysis approaches including variant identification, chromatin accessibility, gene expression, and more. Before we dive into the complexities of single-cell RNA-Seq analysis, it’s beneficial to review the new perspectives afforded by a scRNA-Seq single cell approach and helpful to consider scRNA-Seq alongside a traditional bulk RNA-Seq approach.

Bulk RNA-Seq approach
Bulk RNA-seq typically involves comparing the expression levels of genes between sets of tissues, e.g. untreated and treated mice. This enables researchers to characterize distinct expression patterns for a specific gene and also expression changes across functionally related genes or pathways. This is valuable because it provides an overall snapshot of the average expression program across the sample. However, considering the sample a single homogeneous population of cells can obscure subtle changes or patterns in expression.


Single-cell RNA-Seq approach

Instead of looking at the whole forest, that is to say, the average of the gene expression in a tissue or a biofluid, single cell illuminates expression for a collection of individual cells (i.e. you can now see consider individual trees). This enables similar perspectives to bulk (e.g. insight into biological mechanisms and distinct response to interventions) but also new views informed by cellular heterogeneity:

  1. What kinds of cells are present in this sample?
  2. How does the cell population structure change between groups/conditions?
  3. What are the expression patterns between cell types or between groups/conditions?
  4. How do cells change over time and how might we affect that development?



Consider a specific scRNA-Seq experiment

These concepts can be abstract. Acknowledging that the basic concepts are broadly applicable, it’s helpful to ground the conversation in a specific scRNA-Seq experiment.

Consider a specific experiment

In this workshop we will be focusing on an experiment conducted at UM on a mouse model where a soft tissue injury is followed by an aberrant injury response that generates bone tissue. For more details on this experiment, it’s original analysis and the biology of heterotopic ossification, see the full paper [1].

  1. A simplified version of the experiment:
  1. A sample of mouse tissue is extracted from a healthy mouse.
  2. The researcher induces a burn at the sample site.
  3. The researchers re-sample tissue from the site at several time points.
  4. Each sample undergoes scRNA-Seq prep and analysis. (This is replicated across four mice.)
  1. The scRNA-Seq analysis of this sample can reveal the population of cell types present and also the gene expression patterns of each cell time over time.



How scRNA-Seq works

It’s also useful to orient on how scRNA-Seq works at an abstract level. There are many different platforms and protocols, but many have steps similar to below.

Single cell protocol (from 30k feet)
  1. Sample tissue (or biofluid) is collected.
  2. Tissue is dissociated into a suspension of healthy, intact cells
  3. Cells are physically isolated.
  4. Cell transcripts converted to cDNA labeled with their cell of origin.
  5. cDNAs from all cells is pooled
  6. cDNAs undergo library prep and are sequenced
  7. The resulting transcript sequences can be partitioned into (putative) cells computationally.



10x Genomics 3’ gene expression

It’s useful to elaborate how transcripts are labeled with their cell of origin because this will help us understand how downstream QC and analysis works. The specifics of the steps depend on the platform and the specific library prep protocol. We will focus on the 10x Genomics 3’ gene expression approach[2].

A 10x Genomics single cell protocol (from 10k feet)
  1. 10x Genomics uses microfluidics to combine an isolated cell with a manufactured oligo-bead in an aqueous droplet in an oil emulsion. The oil isolates each droplet, effectively creating a reaction vessel for each cell-bead dyad.
  2. Ideally, each droplet contains reaction enzymes (carried in the aqueous solution), a single bead and a single healthy, intact cell. The cell is lysed to release the mRNA transcripts into the droplet.
  3. The beads are covered with a lawn of millions of oligos. Each oligo is designed to interact with poly-A tailed mRNAs and the enzymes to produce a complementary DNA molecule (cDNA).
  4. Each cDNA contains:
  • the sequence of an individual mRNA transcript (from the cell)
  • flanking sequence added for downstream library prep
  • a 12bp Unique Molecular Identifier (UMI): the UMIs are unique for each of the oligos on the bead ensuring each UMI represents a single mRNA. (This enables reliable de-duplication following sequencing.)
  • 16 bp barcode sequence: all barcodes are identical for a given bead, so the barcode sequence acts as a molecular label for each transcript; each barcode represent a distinct cell of origin for that mRNA.



Consider (just) two droplets
  • Each droplet converts mRNAs into cDNAs that contain the oligo sequence and the mRNA sequence.
  • Each mRNA sequence will get a distinct UMI, so one UMI = one mRNA.
  • For a single droplet, the cell barcodes will all match. Cell barcodes will be distinct across droplets.



From droplets to matrix
  1. Once mRNA transcripts have been converted to barcode-labeled cDNA the oil emulsion can be broken and the cDNA molecules are pooled together.
  2. cDNA molecules undergo several conventional library prep steps to enable sequencing.
  3. The sequencer calls bases for each sequence. For a large sequencing run, this might contain many samples, several experiments, and even multiple experiment types.
  4. The resulting 10x FASTQ files have a specific structure.
  • Read2 represents the mRNA sequence.
  • Read1 represents the barcode and UMI
  1. Specialized software bins each distinct barcode into a putative cell and aligns the mRNA sequence against a genome build.
  2. Alignments for features (genes) are quantified across all barcodes to create a feature barcode matrix.



Common problems and challenges

Some droplets don’t work as intended
  1. Interpreting the sequencing outputs is simplest when each droplet contains a single bead and a single healthy cell. The system is optimized for this outcome and typically the majority of droplets will follow this pattern. However, in each run there are always a few complicating edge cases to consider.
  2. Sometimes a droplet contains a bead but no cell. This is actually common but it’s impact is slight because in the absence of mRNA, the enzymes won’t produce cDNA. In effect, the droplet appears empty and is discarded.
  3. Sometimes two beads land in the same droplet with a cell. In theory, the cells mRNA would appear to come from two droplets (i.e. two cells) each with half the expected expression levels. In practice this rarely happens because the microfluidics are tuned to avoid this.
  4. Sometimes two cells join with a single bead in a droplet creating a doublet. This happens when some of the cells are not fully dissociated from each other. In this case, the mRNAs from two cells will receive the same label; the expression programs are merged and the overall expected expression is roughly doubled.
  5. Sometimes the stress of the protocol induces cells to start apoptosis. This confounds analysis because the expression programs aren’t about the model biology but instead artifacts from the experimental platform.
  6. Sometimes dissociated cells become so stressed they start to break down in the suspension. When that happens, the mRNAs from the popped cell’s combine together in the aqueous flow to create a soup of ambient RNA. This appears as a droplet with extremely low expression.



Contrasting bulk RNA-seq with scRNA-Seq

Bulk and single-cell approaches are fundamentally complementary approaches where bulk RNA-Seq provides a “forest-level” view while scRNA-Seq shows the individual trees. Compared to bulk RNA-Seq, scRNA-Seq provides powerful new perspectives. But it isn’t without challenges or downsides.

Bulk vs. Single-Cell
  1. Single-cell is less mature than bulk.
  2. Single-cell sample prep is more complex than bulk.
  3. Single-cell typically sees only the subset of highly expressed genes.
  4. Single cell analysis is typically more complex.
  5. Single cell analysis costs more than bulk analysis.



Summary

  • scRNA-seq offers a powerful and nuanced approach to studying gene expression at the cellular level. This technique can illuminate biological mechanisms of healthy tissue or disease as well as extend our understanding of cellular heterogeneity, responses to interventions, and the cell state dynamics.
  • scRNA-Seq experiments are typically more complex and often more expensive than bulk RNA-Seq.
scRNA-Seq steps in summary
  1. A sample of tissue is extracted
  2. Tissue is dissociated into a clean suspension of healthy cells
  3. A reaction creates a cDNA molecule which combines a barcode label with mRNA sequence.
  4. cDNAs are pooled together, library prep’ed and sequenced
  5. Computationally connect all the mRNAs back to a distinct cell of origin
  6. Align the mRNA sequences to create a count matrix across all the features and all the cells
  7. Bioinformatically separate the healthy cells from the experimental artifacts

The last three steps are complex and also computationally demanding. In 10x Genomics experiments, they are typically expedited by the tool Cell Ranger which we cover in detail in the next lesson.



References

  1. Sorkin, Michael et al. “Regulation of heterotopic ossification by monocytes in a mouse model of aberrant wound healing.” Nature communications vol. 11,1 722. 5 Feb. 2020.
    https://pubmed.ncbi.nlm.nih.gov/32024825
  2. 10x Genomics 3’ gene expression


    Back to introduction Top of this lesson Next lesson
LS0tCnRpdGxlOiAiT3JpZW50aW5nIG9uIHNjUk5BLVNlcSIKYXV0aG9yOiAiVU0gQmlvaW5mb3JtYXRpY3MgQ29yZSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgICAgICAgaHRtbF9kb2N1bWVudDoKICAgICAgICAgICAgaW5jbHVkZXM6CiAgICAgICAgICAgICAgICBpbl9oZWFkZXI6IGhlYWRlci5odG1sCiAgICAgICAgICAgIHRoZW1lOiBwYXBlcgogICAgICAgICAgICB0b2M6IHRydWUKICAgICAgICAgICAgdG9jX2RlcHRoOiA0CiAgICAgICAgICAgIHRvY19mbG9hdDogdHJ1ZQogICAgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlCiAgICAgICAgICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICAgICAgICAgIG1hcmtkb3duOiBHRk0KICAgICAgICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHksIHRkIHsKICAgZm9udC1zaXplOiAxOHB4Owp9CmNvZGUucnsKICBmb250LXNpemU6IDEycHg7Cn0KcHJlIHsKICBmb250LXNpemU6IDEycHgKfQoKdGFibGUuZmlnLCB0aC5maWcsIHRkLmZpZyB7CiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICBwYWRkaW5nOiAxNXB4Owp9CiAgCjwvc3R5bGU+CgojIFdvcmtmbG93IE92ZXJ2aWV3IHsudW5saXN0ZWQgLnVubnVtYmVyZWR9Cgo8YnIvPgo8aW1nIHNyYz0iaW1hZ2VzL3dheWZpbmRlci93YXlmaW5kZXIucG5nIiBhbHQ9IndheWZpbmRlciIgc3R5bGU9ImhlaWdodDogNDAwcHg7Ii8+Cjxici8+Cjxici8+CgojIE9iamVjdGl2ZXMKCi0gTGlzdCBzb21lIGFwcGxpY2F0aW9ucyBvZiBzY1JOQS1TZXEuCi0gQ29tcGFyZSBhbmQgY29udHJhc3QgdGhlIGNhcGFiaWxpdGllcyBhbmQgY2hhbGxlbmdlcyBpbiBzY1JOQS1TZXEgdnMgYnVsayBSTkEtU2VxIGFwcHJvYWNoZXMuCi0gSW50cm9kdWNlIGEgc3BlY2lmaWMgZXhwZXJpbWVudGFsIG1vZGVsIHRvIGd1aWRlIGRpc2N1c3Npb24gYW5kIGxlYXJuaW5nLgotIE91dGxpbmUgdGhlIGFic3RyYWN0IGFwcHJvYWNoIHRvIHNpbmdsZS1jZWxsIHNlcXVlbmNpbmcgYW5kIGNvbnNpZGVyIHRoZSAxMHggR2Vub21pY3MgcGxhdGZvcm0gaW4gbW9yZSBkZXRhaWwuCi0gQ29uc2lkZXIgY29tbW9uIGNoYWxsZW5nZXMgaW4gZXhlY3V0aW5nIHRoZXNlIGluaXRpYWwgc3RlcHMuCgo8YnIvPgo8YnIvPgoKIyBPdmVydmlldyBvZiBidWxrIFJOQS1zZXEgYW5kIHNjUk5BLVNlcQoKTmV4dCBHZW5lcmF0aW9uIFNlcXVlbmNpbmcgKE5HUykgZW5hYmxlcyBtYW55IHBvd2VyZnVsIGV4cGVyaW1lbnRhbCBkZXNpZ25zIGFuZAphbmFseXNpcyBhcHByb2FjaGVzIGluY2x1ZGluZyB2YXJpYW50IGlkZW50aWZpY2F0aW9uLCBjaHJvbWF0aW4gYWNjZXNzaWJpbGl0eSwgCmdlbmUgZXhwcmVzc2lvbiwgYW5kIG1vcmUuIEJlZm9yZSB3ZSBkaXZlIGludG8gdGhlIGNvbXBsZXhpdGllcyBvZiBzaW5nbGUtY2VsbApSTkEtU2VxIGFuYWx5c2lzLCBpdCdzIGJlbmVmaWNpYWwgdG8gcmV2aWV3IHRoZSBuZXcgcGVyc3BlY3RpdmVzIGFmZm9yZGVkIGJ5CmEgc2NSTkEtU2VxIHNpbmdsZSBjZWxsIGFwcHJvYWNoIGFuZCBoZWxwZnVsIHRvIGNvbnNpZGVyIHNjUk5BLVNlcSBhbG9uZ3NpZGUgYQp0cmFkaXRpb25hbCBidWxrIFJOQS1TZXEgYXBwcm9hY2guCgo8dGFibGUgY2xhc3M9J2ZpZyc+PHRyPjx0aCBjbGFzcz0nZmlnJz5CdWxrIFJOQS1TZXEgYXBwcm9hY2g8L3RoPjwvdHI+Cjx0cj48dGQgY2xhc3M9J2ZpZyc+IVtdKGltYWdlcy8wMEEtT3JpZW50aW5nT25TY1JOQVNlcS9idWxrUk5BLVNlcS1jYXBhYmlsaXRpZXMucG5nKTwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4KQnVsayBSTkEtc2VxIHR5cGljYWxseSBpbnZvbHZlcyBjb21wYXJpbmcgdGhlIGV4cHJlc3Npb24gbGV2ZWxzIG9mIGdlbmVzIGJldHdlZW4Kc2V0cyBvZiB0aXNzdWVzLCBlLmcuIHVudHJlYXRlZCBhbmQgdHJlYXRlZCBtaWNlLiBUaGlzIGVuYWJsZXMgcmVzZWFyY2hlcnMgdG8gCmNoYXJhY3Rlcml6ZSBkaXN0aW5jdCBleHByZXNzaW9uIHBhdHRlcm5zIGZvciBhIHNwZWNpZmljIGdlbmUgYW5kIGFsc28gCmV4cHJlc3Npb24gY2hhbmdlcyBhY3Jvc3MgZnVuY3Rpb25hbGx5IHJlbGF0ZWQgZ2VuZXMgb3IgcGF0aHdheXMuIFRoaXMgaXMgCnZhbHVhYmxlIGJlY2F1c2UgaXQgcHJvdmlkZXMgYW4gb3ZlcmFsbCBzbmFwc2hvdCBvZiB0aGUgYXZlcmFnZSBleHByZXNzaW9uIApwcm9ncmFtIGFjcm9zcyB0aGUgc2FtcGxlLiBIb3dldmVyLCBjb25zaWRlcmluZyB0aGUgc2FtcGxlIGEgc2luZ2xlIGhvbW9nZW5lb3VzCnBvcHVsYXRpb24gb2YgY2VsbHMgY2FuIG9ic2N1cmUgc3VidGxlIGNoYW5nZXMgb3IgcGF0dGVybnMgaW4gZXhwcmVzc2lvbi4KPC90ZD48L3RyPgo8L3RhYmxlPgo8YnIvPgo8YnIvPgo8dGFibGUgY2xhc3M9J2ZpZyc+PHRyPjx0aCBjbGFzcz0nZmlnJz5TaW5nbGUtY2VsbCBSTkEtU2VxIGFwcHJvYWNoPC90aD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPiFbXShpbWFnZXMvMDBBLU9yaWVudGluZ09uU2NSTkFTZXEvc2NSTkEtU2VxLWNhcGFiaWxpdGllcy5wbmcpPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPgpJbnN0ZWFkIG9mIGxvb2tpbmcgYXQgdGhlIHdob2xlIGZvcmVzdCwgdGhhdCBpcyB0byBzYXksIHRoZSBhdmVyYWdlIG9mIHRoZSBnZW5lIApleHByZXNzaW9uIGluIGEgdGlzc3VlIG9yIGEgYmlvZmx1aWQsIHNpbmdsZSBjZWxsIGlsbHVtaW5hdGVzIGV4cHJlc3Npb24gZm9yIGEgCmNvbGxlY3Rpb24gb2YgaW5kaXZpZHVhbCBjZWxscyAoaS5lLiB5b3UgY2FuIG5vdyBzZWUgY29uc2lkZXIgaW5kaXZpZHVhbCB0cmVlcykuClRoaXMgZW5hYmxlcyBzaW1pbGFyIHBlcnNwZWN0aXZlcyB0byBidWxrIChlLmcuIGluc2lnaHQgaW50byBiaW9sb2dpY2FsIAptZWNoYW5pc21zIGFuZCBkaXN0aW5jdCByZXNwb25zZSB0byBpbnRlcnZlbnRpb25zKSBidXQgYWxzbyBuZXcgdmlld3MgaW5mb3JtZWQKYnkgY2VsbHVsYXIgaGV0ZXJvZ2VuZWl0eToKCjEuIFdoYXQga2luZHMgb2YgY2VsbHMgYXJlIHByZXNlbnQgaW4gdGhpcyBzYW1wbGU/IAoxLiBIb3cgZG9lcyB0aGUgY2VsbCBwb3B1bGF0aW9uIHN0cnVjdHVyZSBjaGFuZ2UgYmV0d2VlbiBncm91cHMvY29uZGl0aW9ucz8KMS4gV2hhdCBhcmUgdGhlIGV4cHJlc3Npb24gcGF0dGVybnMgYmV0d2VlbiBjZWxsIHR5cGVzIG9yIGJldHdlZW4gZ3JvdXBzL2NvbmRpdGlvbnM/CjEuIEhvdyBkbyBjZWxscyBjaGFuZ2Ugb3ZlciB0aW1lIGFuZCBob3cgbWlnaHQgd2UgYWZmZWN0IHRoYXQgZGV2ZWxvcG1lbnQ/Cgo8L3RkPjwvdHI+CjwvdGFibGU+Cgo8YnIvPgo8YnIvPgoKIyBDb25zaWRlciBhIHNwZWNpZmljIHNjUk5BLVNlcSBleHBlcmltZW50CgpUaGVzZSBjb25jZXB0cyBjYW4gYmUgYWJzdHJhY3QuIEFja25vd2xlZGdpbmcgdGhhdCB0aGUgYmFzaWMgY29uY2VwdHMgYXJlCmJyb2FkbHkgYXBwbGljYWJsZSwgaXQncyBoZWxwZnVsIHRvIGdyb3VuZCB0aGUgY29udmVyc2F0aW9uIGluIGEgc3BlY2lmaWMgCnNjUk5BLVNlcSBleHBlcmltZW50LgoKPHRhYmxlIGNsYXNzPSdmaWcnPjx0cj48dGggY2xhc3M9J2ZpZyc+Q29uc2lkZXIgYSBzcGVjaWZpYyBleHBlcmltZW50PC90aD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPiFbXShpbWFnZXMvMDBBLU9yaWVudGluZ09uU2NSTkFTZXEvc3BlY2lmaWMtZXhwZXJpbWVudC5wbmcpPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPgpJbiB0aGlzIHdvcmtzaG9wIHdlIHdpbGwgYmUgZm9jdXNpbmcgb24gYW4gZXhwZXJpbWVudCBjb25kdWN0ZWQgYXQgVU0gb24gYSBtb3VzZSAKbW9kZWwgd2hlcmUgYSBzb2Z0IHRpc3N1ZSBpbmp1cnkgaXMgZm9sbG93ZWQgYnkgYW4gYWJlcnJhbnQgaW5qdXJ5IHJlc3BvbnNlCnRoYXQgZ2VuZXJhdGVzIGJvbmUgdGlzc3VlLiBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgZXhwZXJpbWVudCwgaXQncyBvcmlnaW5hbAphbmFseXNpcyBhbmQgdGhlIGJpb2xvZ3kgb2YgaGV0ZXJvdG9waWMgb3NzaWZpY2F0aW9uLCBzZWUgdGhlIGZ1bGwgcGFwZXIgW1sxXV0oI3JlZmVyZW5jZXMpLgoKCkEpIEEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBleHBlcmltZW50OgoKMS4gQSBzYW1wbGUgb2YgbW91c2UgdGlzc3VlIGlzIGV4dHJhY3RlZCBmcm9tIGEgaGVhbHRoeSBtb3VzZS4KMS4gVGhlIHJlc2VhcmNoZXIgaW5kdWNlcyBhIGJ1cm4gYXQgdGhlIHNhbXBsZSBzaXRlLgoxLiBUaGUgcmVzZWFyY2hlcnMgcmUtc2FtcGxlIHRpc3N1ZSBmcm9tIHRoZSBzaXRlIGF0IHNldmVyYWwgdGltZSBwb2ludHMuCjEuIEVhY2ggc2FtcGxlIHVuZGVyZ29lcyBzY1JOQS1TZXEgcHJlcCBhbmQgYW5hbHlzaXMuCihUaGlzIGlzIHJlcGxpY2F0ZWQgYWNyb3NzIGZvdXIgbWljZS4pCgpCKSBUaGUgc2NSTkEtU2VxIGFuYWx5c2lzIG9mIHRoaXMgc2FtcGxlIGNhbiByZXZlYWwgdGhlIHBvcHVsYXRpb24gb2YgY2VsbCB0eXBlcwpwcmVzZW50IGFuZCBhbHNvIHRoZSBnZW5lIGV4cHJlc3Npb24gcGF0dGVybnMgb2YgZWFjaCBjZWxsIHRpbWUgb3ZlciB0aW1lLgoKPC90ZD48L3RyPgo8L3RhYmxlPgoKCjxici8+Cjxici8+CgojIEhvdyBzY1JOQS1TZXEgd29ya3MKCkl0J3MgYWxzbyB1c2VmdWwgdG8gb3JpZW50IG9uIGhvdyBzY1JOQS1TZXEgd29ya3MgYXQgYW4gYWJzdHJhY3QgbGV2ZWwuIFRoZXJlIAphcmUgbWFueSBkaWZmZXJlbnQgcGxhdGZvcm1zIGFuZCBwcm90b2NvbHMsIGJ1dCBtYW55IGhhdmUgc3RlcHMgc2ltaWxhciB0byBiZWxvdy4KCjx0YWJsZSBjbGFzcz0nZmlnJz48dHI+PHRoIGNsYXNzPSdmaWcnPlNpbmdsZSBjZWxsIHByb3RvY29sIChmcm9tIDMwayBmZWV0KTwvdGg+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4hW10oaW1hZ2VzLzAwQS1PcmllbnRpbmdPblNjUk5BU2VxL3NjUk5BLVNlcS1mcm9tLTMway5wbmcpPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPgoKQSkgU2FtcGxlIHRpc3N1ZSAob3IgYmlvZmx1aWQpIGlzIGNvbGxlY3RlZC4gPGJyLz4KQikgVGlzc3VlIGlzIGRpc3NvY2lhdGVkIGludG8gYSBzdXNwZW5zaW9uIG9mICoqaGVhbHRoeSwgaW50YWN0KiogY2VsbHMKQykgQ2VsbHMgYXJlIHBoeXNpY2FsbHkgaXNvbGF0ZWQuCkQpIENlbGwgdHJhbnNjcmlwdHMgY29udmVydGVkIHRvIGNETkEgbGFiZWxlZCB3aXRoIHRoZWlyIGNlbGwgb2Ygb3JpZ2luLgpFKSBjRE5BcyBmcm9tIGFsbCBjZWxscyBpcyBwb29sZWQKRikgY0ROQXMgdW5kZXJnbyBsaWJyYXJ5IHByZXAgYW5kIGFyZSBzZXF1ZW5jZWQKRykgVGhlIHJlc3VsdGluZyB0cmFuc2NyaXB0IHNlcXVlbmNlcyBjYW4gYmUgcGFydGl0aW9uZWQgaW50byAocHV0YXRpdmUpIGNlbGxzIGNvbXB1dGF0aW9uYWxseS4gCgo8L3RkPjwvdHI+CjwvdGFibGU+Cgo8YnIvPgo8YnIvPgoKIyMgMTB4IEdlbm9taWNzIDMnIGdlbmUgZXhwcmVzc2lvbgoKSXQncyB1c2VmdWwgdG8gZWxhYm9yYXRlIGhvdyB0cmFuc2NyaXB0cyBhcmUgbGFiZWxlZCB3aXRoIHRoZWlyIGNlbGwgb2Ygb3JpZ2luCmJlY2F1c2UgdGhpcyB3aWxsIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgZG93bnN0cmVhbSBRQyBhbmQgYW5hbHlzaXMgd29ya3MuIFRoZQpzcGVjaWZpY3Mgb2YgdGhlIHN0ZXBzIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gYW5kIHRoZSBzcGVjaWZpYyBsaWJyYXJ5IHByZXAgCnByb3RvY29sLiBXZSB3aWxsIGZvY3VzIG9uIHRoZSAqKjEweCBHZW5vbWljcyAzJyBnZW5lIGV4cHJlc3Npb24qKiBhcHByb2FjaFtbMl1dKCNyZWZlcmVuY2VzKS4KCjx0YWJsZSBjbGFzcz0nZmlnJz48dHI+PHRoIGNsYXNzPSdmaWcnPkEgMTB4IEdlbm9taWNzIHNpbmdsZSBjZWxsIHByb3RvY29sIChmcm9tIDEwayBmZWV0KTwvdGg+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4hW10oaW1hZ2VzLzAwQS1PcmllbnRpbmdPblNjUk5BU2VxLzEweC1nZW5vbWljcy1zY1JOQS1TZXEtZnJvbS0xMGsucG5nKTwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4KCkEpIDEweCBHZW5vbWljcyB1c2VzIG1pY3JvZmx1aWRpY3MgdG8gY29tYmluZSBhbiBpc29sYXRlZCBjZWxsIHdpdGggYSAKbWFudWZhY3R1cmVkIG9saWdvLWJlYWQgaW4gYW4gYXF1ZW91cyBkcm9wbGV0IGluIGFuIG9pbCBlbXVsc2lvbi4gVGhlIG9pbCAKaXNvbGF0ZXMgZWFjaCBkcm9wbGV0LCBlZmZlY3RpdmVseSBjcmVhdGluZyBhIHJlYWN0aW9uIHZlc3NlbCBmb3IgZWFjaCBjZWxsLWJlYWQgCmR5YWQuCkIpIElkZWFsbHksIGVhY2ggZHJvcGxldCBjb250YWlucyByZWFjdGlvbiBlbnp5bWVzIChjYXJyaWVkIGluIHRoZSBhcXVlb3VzIApzb2x1dGlvbiksIGEgc2luZ2xlIGJlYWQgYW5kIGEgc2luZ2xlIGhlYWx0aHksIGludGFjdCBjZWxsLiBUaGUgY2VsbCBpcyBseXNlZCB0bwpyZWxlYXNlIHRoZSBtUk5BIHRyYW5zY3JpcHRzIGludG8gdGhlIGRyb3BsZXQuCkMpIFRoZSBiZWFkcyBhcmUgY292ZXJlZCB3aXRoIGEgbGF3biBvZiBtaWxsaW9ucyBvZiBvbGlnb3MuIEVhY2ggb2xpZ28gaXMgCmRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggcG9seS1BIHRhaWxlZCBtUk5BcyBhbmQgdGhlIGVuenltZXMgdG8gcHJvZHVjZSBhIApjb21wbGVtZW50YXJ5IEROQSBtb2xlY3VsZSAoY0ROQSkuCkQpIEVhY2ggY0ROQSBjb250YWluczoKICAtIHRoZSBzZXF1ZW5jZSBvZiBhbiBpbmRpdmlkdWFsIG1STkEgdHJhbnNjcmlwdCAoZnJvbSB0aGUgY2VsbCkKICAtIGZsYW5raW5nIHNlcXVlbmNlIGFkZGVkIGZvciBkb3duc3RyZWFtIGxpYnJhcnkgcHJlcAogIC0gYSAxMmJwIFVuaXF1ZSBNb2xlY3VsYXIgSWRlbnRpZmllciAoVU1JKTogdGhlIFVNSXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBvZiB0aGUKICAgIG9saWdvcyBvbiB0aGUgYmVhZCBlbnN1cmluZyAqKmVhY2ggVU1JIHJlcHJlc2VudHMgYSBzaW5nbGUgbVJOQSoqLgogICAgKFRoaXMgZW5hYmxlcyByZWxpYWJsZSBkZS1kdXBsaWNhdGlvbiBmb2xsb3dpbmcgc2VxdWVuY2luZy4pCiAgLSAxNiBicCBiYXJjb2RlIHNlcXVlbmNlOiBhbGwgYmFyY29kZXMgYXJlIGlkZW50aWNhbCBmb3IgYSBnaXZlbiBiZWFkLCBzbyB0aGUKICAgIGJhcmNvZGUgc2VxdWVuY2UgYWN0cyBhcyBhIG1vbGVjdWxhciBsYWJlbCBmb3IgZWFjaCB0cmFuc2NyaXB0OyAKICAgICoqZWFjaCBiYXJjb2RlIHJlcHJlc2VudCBhIGRpc3RpbmN0IGNlbGwgb2Ygb3JpZ2luIGZvciB0aGF0IG1STkEqKi4KPC90ZD48L3RyPgo8L3RhYmxlPgoKPGJyLz4KPGJyLz4KCjx0YWJsZSBjbGFzcz0nZmlnJz48dHI+PHRoIGNsYXNzPSdmaWcnPkNvbnNpZGVyIChqdXN0KSB0d28gZHJvcGxldHM8L3RoPjwvdHI+Cjx0cj48dGQgY2xhc3M9J2ZpZyc+IVtdKGltYWdlcy8wMEEtT3JpZW50aW5nT25TY1JOQVNlcS90d28tZHJvcGxldHMucG5nKTwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4KCi0gRWFjaCBkcm9wbGV0IGNvbnZlcnRzIG1STkFzIGludG8gY0ROQXMgdGhhdCBjb250YWluIHRoZSBvbGlnbyBzZXF1ZW5jZSBhbmQgdGhlIAptUk5BIHNlcXVlbmNlLgotIEVhY2ggbVJOQSBzZXF1ZW5jZSB3aWxsIGdldCBhIGRpc3RpbmN0IFVNSSwgc28gb25lIFVNSSA9IG9uZSBtUk5BLgotIEZvciBhIHNpbmdsZSBkcm9wbGV0LCB0aGUgY2VsbCBiYXJjb2RlcyB3aWxsIGFsbCBtYXRjaC4gQ2VsbCBiYXJjb2RlcyB3aWxsIGJlIAogIGRpc3RpbmN0IGFjcm9zcyBkcm9wbGV0cy4KCjwvdGQ+PC90cj4KPC90YWJsZT4KCjxici8+Cjxici8+CgoKPHRhYmxlIGNsYXNzPSdmaWcnPjx0cj48dGggY2xhc3M9J2ZpZyc+RnJvbSBkcm9wbGV0cyB0byBtYXRyaXg8L3RoPjwvdHI+Cjx0cj48dGQgY2xhc3M9J2ZpZyc+IVtdKGltYWdlcy8wMEEtT3JpZW50aW5nT25TY1JOQVNlcS9kcm9wbGV0cy10by1tYXRyaXgucG5nKTwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4KCkEpIE9uY2UgbVJOQSB0cmFuc2NyaXB0cyBoYXZlIGJlZW4gY29udmVydGVkIHRvIGJhcmNvZGUtbGFiZWxlZCBjRE5BIHRoZSBvaWwKZW11bHNpb24gY2FuIGJlIGJyb2tlbiBhbmQgdGhlIGNETkEgbW9sZWN1bGVzIGFyZSBwb29sZWQgdG9nZXRoZXIuCkIpIGNETkEgbW9sZWN1bGVzIHVuZGVyZ28gc2V2ZXJhbCBjb252ZW50aW9uYWwgbGlicmFyeSBwcmVwIHN0ZXBzIHRvIGVuYWJsZQpzZXF1ZW5jaW5nLgpDKSBUaGUgc2VxdWVuY2VyIGNhbGxzIGJhc2VzIGZvciBlYWNoIHNlcXVlbmNlLiBGb3IgYSBsYXJnZSBzZXF1ZW5jaW5nIHJ1biwgdGhpcwptaWdodCBjb250YWluIG1hbnkgc2FtcGxlcywgc2V2ZXJhbCBleHBlcmltZW50cywgYW5kIGV2ZW4gbXVsdGlwbGUgZXhwZXJpbWVudCAKdHlwZXMuCkQpIFRoZSByZXN1bHRpbmcgMTB4IEZBU1RRIGZpbGVzIGhhdmUgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuIAotIFJlYWQyIHJlcHJlc2VudHMgdGhlIG1STkEgc2VxdWVuY2UuCi0gUmVhZDEgcmVwcmVzZW50cyB0aGUgYmFyY29kZSBhbmQgVU1JCkUpIFNwZWNpYWxpemVkIHNvZnR3YXJlIGJpbnMgZWFjaCBkaXN0aW5jdCBiYXJjb2RlIGludG8gYSBwdXRhdGl2ZSBjZWxsIGFuZAphbGlnbnMgdGhlIG1STkEgc2VxdWVuY2UgYWdhaW5zdCBhIGdlbm9tZSBidWlsZC4KRikgQWxpZ25tZW50cyBmb3IgZmVhdHVyZXMgKGdlbmVzKSBhcmUgcXVhbnRpZmllZCBhY3Jvc3MgYWxsIGJhcmNvZGVzIHRvIGNyZWF0ZQphIGZlYXR1cmUgYmFyY29kZSBtYXRyaXguCjwvdGQ+PC90cj4KPC90YWJsZT4KCjxici8+Cjxici8+CgojIENvbW1vbiBwcm9ibGVtcyBhbmQgY2hhbGxlbmdlcwoKPHRhYmxlIGNsYXNzPSdmaWcnPjx0cj48dGggY2xhc3M9J2ZpZyc+U29tZSBkcm9wbGV0cyBkb24ndCB3b3JrIGFzIGludGVuZGVkPC90aD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPiFbXShpbWFnZXMvMDBBLU9yaWVudGluZ09uU2NSTkFTZXEvcHJvYmxlbS1kcm9wbGV0cy5wbmcpPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPgoKQSkgSW50ZXJwcmV0aW5nIHRoZSBzZXF1ZW5jaW5nIG91dHB1dHMgaXMgc2ltcGxlc3Qgd2hlbiBlYWNoIGRyb3BsZXQgY29udGFpbnMgYSAKc2luZ2xlIGJlYWQgYW5kIGEgc2luZ2xlIGhlYWx0aHkgY2VsbC4gVGhlIHN5c3RlbSBpcyBvcHRpbWl6ZWQgZm9yIHRoaXMgb3V0Y29tZQphbmQgdHlwaWNhbGx5IHRoZSBtYWpvcml0eSBvZiBkcm9wbGV0cyB3aWxsIGZvbGxvdyB0aGlzIHBhdHRlcm4uIEhvd2V2ZXIsIGluIAplYWNoIHJ1biB0aGVyZSBhcmUgYWx3YXlzIGEgZmV3IGNvbXBsaWNhdGluZyBlZGdlIGNhc2VzIHRvIGNvbnNpZGVyLiAKQikgU29tZXRpbWVzIGEgZHJvcGxldCBjb250YWlucyBhIGJlYWQgYnV0IG5vIGNlbGwuIFRoaXMgaXMgYWN0dWFsbHkgY29tbW9uIGJ1dAppdCdzIGltcGFjdCBpcyBzbGlnaHQgYmVjYXVzZSBpbiB0aGUgYWJzZW5jZSBvZiBtUk5BLCB0aGUgZW56eW1lcyB3b24ndCBwcm9kdWNlCmNETkEuIEluIGVmZmVjdCwgdGhlIGRyb3BsZXQgYXBwZWFycyBlbXB0eSBhbmQgaXMgZGlzY2FyZGVkLgpDKSBTb21ldGltZXMgdHdvIGJlYWRzIGxhbmQgaW4gdGhlIHNhbWUgZHJvcGxldCB3aXRoIGEgY2VsbC4gSW4gdGhlb3J5LCB0aGUgCmNlbGxzIG1STkEgd291bGQgYXBwZWFyIHRvIGNvbWUgZnJvbSB0d28gZHJvcGxldHMgKGkuZS4gdHdvIGNlbGxzKSBlYWNoIHdpdGggCmhhbGYgdGhlIGV4cGVjdGVkIGV4cHJlc3Npb24gbGV2ZWxzLiBJbiBwcmFjdGljZSB0aGlzIHJhcmVseSBoYXBwZW5zIGJlY2F1c2UgdGhlCm1pY3JvZmx1aWRpY3MgYXJlIHR1bmVkIHRvIGF2b2lkIHRoaXMuCkQpIFNvbWV0aW1lcyB0d28gY2VsbHMgam9pbiB3aXRoIGEgc2luZ2xlIGJlYWQgaW4gYSBkcm9wbGV0IGNyZWF0aW5nIGEgCioqZG91YmxldCoqLiBUaGlzIGhhcHBlbnMgd2hlbiBzb21lIG9mIHRoZSBjZWxscyBhcmUgbm90IGZ1bGx5IGRpc3NvY2lhdGVkIGZyb20gCmVhY2ggb3RoZXIuIEluIHRoaXMgY2FzZSwgdGhlIG1STkFzIGZyb20gdHdvIGNlbGxzIHdpbGwgcmVjZWl2ZSB0aGUgc2FtZSBsYWJlbDsgCnRoZSBleHByZXNzaW9uIHByb2dyYW1zIGFyZSBtZXJnZWQgYW5kIHRoZSBvdmVyYWxsIGV4cGVjdGVkIGV4cHJlc3Npb24gaXMgCnJvdWdobHkgZG91YmxlZC4KRSkgU29tZXRpbWVzIHRoZSBzdHJlc3Mgb2YgdGhlIHByb3RvY29sIGluZHVjZXMgY2VsbHMgdG8gc3RhcnQgYXBvcHRvc2lzLiBUaGlzIApjb25mb3VuZHMgYW5hbHlzaXMgYmVjYXVzZSB0aGUgZXhwcmVzc2lvbiBwcm9ncmFtcyBhcmVuJ3QgYWJvdXQgdGhlIG1vZGVsIApiaW9sb2d5IGJ1dCBpbnN0ZWFkIGFydGlmYWN0cyBmcm9tIHRoZSBleHBlcmltZW50YWwgcGxhdGZvcm0uCkYpIFNvbWV0aW1lcyBkaXNzb2NpYXRlZCBjZWxscyBiZWNvbWUgc28gc3RyZXNzZWQgdGhleSBzdGFydCB0byBicmVhayBkb3duIGluIAp0aGUgc3VzcGVuc2lvbi4gV2hlbiB0aGF0IGhhcHBlbnMsIHRoZSBtUk5BcyBmcm9tIHRoZSBwb3BwZWQgY2VsbCdzIGNvbWJpbmUKdG9nZXRoZXIgaW4gdGhlIGFxdWVvdXMgZmxvdyB0byBjcmVhdGUgYSBzb3VwIG9mIGFtYmllbnQgUk5BLiBUaGlzIGFwcGVhcnMgYXMgYSAKZHJvcGxldCB3aXRoIGV4dHJlbWVseSBsb3cgZXhwcmVzc2lvbi4KPC90ZD48L3RyPgo8L3RhYmxlPgoKPGJyLz4KPGJyLz4KCiMjIENvbnRyYXN0aW5nIGJ1bGsgUk5BLXNlcSB3aXRoIHNjUk5BLVNlcQoKQnVsayBhbmQgc2luZ2xlLWNlbGwgYXBwcm9hY2hlcyBhcmUgZnVuZGFtZW50YWxseSBjb21wbGVtZW50YXJ5IGFwcHJvYWNoZXMgd2hlcmUKYnVsayBSTkEtU2VxIHByb3ZpZGVzIGEgImZvcmVzdC1sZXZlbCIgdmlldyB3aGlsZSBzY1JOQS1TZXEgc2hvd3MgdGhlIGluZGl2aWR1YWwgCnRyZWVzLiBDb21wYXJlZCB0byBidWxrIFJOQS1TZXEsIHNjUk5BLVNlcSBwcm92aWRlcyBwb3dlcmZ1bCBuZXcgcGVyc3BlY3RpdmVzLiAKQnV0IGl0IGlzbid0IHdpdGhvdXQgY2hhbGxlbmdlcyBvciBkb3duc2lkZXMuCgo8dGFibGUgY2xhc3M9J2ZpZyc+PHRyPjx0aCBjbGFzcz0nZmlnJz5CdWxrIHZzLiBTaW5nbGUtQ2VsbDwvdGg+PC90cj4KPHRyPjx0ZCBjbGFzcz0nZmlnJz4hW10oaW1hZ2VzLzAwQS1PcmllbnRpbmdPblNjUk5BU2VxL2J1bGtfdl9zYy5wbmcpPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSdmaWcnPgoKMS4gU2luZ2xlLWNlbGwgaXMgbGVzcyBtYXR1cmUgdGhhbiBidWxrLgoxLiBTaW5nbGUtY2VsbCBzYW1wbGUgcHJlcCBpcyBtb3JlIGNvbXBsZXggdGhhbiBidWxrLgoxLiBTaW5nbGUtY2VsbCB0eXBpY2FsbHkgc2VlcyBvbmx5IHRoZSBzdWJzZXQgb2YgaGlnaGx5IGV4cHJlc3NlZCBnZW5lcy4KMS4gU2luZ2xlIGNlbGwgYW5hbHlzaXMgaXMgdHlwaWNhbGx5IG1vcmUgY29tcGxleC4KMS4gU2luZ2xlIGNlbGwgYW5hbHlzaXMgY29zdHMgbW9yZSB0aGFuIGJ1bGsgYW5hbHlzaXMuCgo8L3RkPjwvdHI+CjwvdGFibGU+Cgo8YnIvPgo8YnIvPgoKCiMgU3VtbWFyeQoKLSBzY1JOQS1zZXEgb2ZmZXJzIGEgcG93ZXJmdWwgYW5kIG51YW5jZWQgYXBwcm9hY2ggdG8gc3R1ZHlpbmcgZ2VuZSBleHByZXNzaW9uIGF0CnRoZSBjZWxsdWxhciBsZXZlbC4gVGhpcyB0ZWNobmlxdWUgY2FuIGlsbHVtaW5hdGUgYmlvbG9naWNhbCBtZWNoYW5pc21zIG9mIApoZWFsdGh5IHRpc3N1ZSBvciBkaXNlYXNlIGFzIHdlbGwgYXMgZXh0ZW5kIG91ciB1bmRlcnN0YW5kaW5nIG9mIGNlbGx1bGFyCmhldGVyb2dlbmVpdHksIHJlc3BvbnNlcyB0byBpbnRlcnZlbnRpb25zLCBhbmQgdGhlIGNlbGwgc3RhdGUgZHluYW1pY3MuCi0gc2NSTkEtU2VxIGV4cGVyaW1lbnRzIGFyZSB0eXBpY2FsbHkgbW9yZSBjb21wbGV4IGFuZCBvZnRlbiBtb3JlIGV4cGVuc2l2ZSB0aGFuCmJ1bGsgUk5BLVNlcS4KCjx0YWJsZSBjbGFzcz0nZmlnJz48dHI+PHRoIGNsYXNzPSdmaWcnPnNjUk5BLVNlcSBzdGVwcyBpbiBzdW1tYXJ5PC90aD48L3RyPgogIDx0cj48dGQgY2xhc3M9J2ZpZyc+IVtdKGltYWdlcy8wMEEtT3JpZW50aW5nT25TY1JOQVNlcS9zdW1tYXJ5LnBuZyk8L3RkPjwvdHI+Cjx0cj48dGQgY2xhc3M9J2ZpZyc+CgpBKSBBIHNhbXBsZSBvZiB0aXNzdWUgaXMgZXh0cmFjdGVkCkIpIFRpc3N1ZSBpcyBkaXNzb2NpYXRlZCBpbnRvIGEgY2xlYW4gc3VzcGVuc2lvbiBvZiBoZWFsdGh5IGNlbGxzCkMpIEEgcmVhY3Rpb24gY3JlYXRlcyBhIGNETkEgbW9sZWN1bGUgd2hpY2ggY29tYmluZXMgYSBiYXJjb2RlIGxhYmVsIHdpdGggbVJOQSBzZXF1ZW5jZS4gCkQpIGNETkFzIGFyZSBwb29sZWQgdG9nZXRoZXIsIGxpYnJhcnkgcHJlcCdlZCBhbmQgc2VxdWVuY2VkCkUpIENvbXB1dGF0aW9uYWxseSBjb25uZWN0IGFsbCB0aGUgbVJOQXMgYmFjayB0byBhIGRpc3RpbmN0IGNlbGwgb2Ygb3JpZ2luCkYpIEFsaWduIHRoZSBtUk5BIHNlcXVlbmNlcyB0byBjcmVhdGUgYSBjb3VudCBtYXRyaXggYWNyb3NzIGFsbCB0aGUgZmVhdHVyZXMgYW5kIGFsbCB0aGUgY2VsbHMKRykgQmlvaW5mb3JtYXRpY2FsbHkgc2VwYXJhdGUgdGhlIGhlYWx0aHkgY2VsbHMgZnJvbSB0aGUgZXhwZXJpbWVudGFsIGFydGlmYWN0cwoKVGhlIGxhc3QgdGhyZWUgc3RlcHMgYXJlIGNvbXBsZXggYW5kIGFsc28gY29tcHV0YXRpb25hbGx5IGRlbWFuZGluZy4gSW4gMTB4IApHZW5vbWljcyBleHBlcmltZW50cywgdGhleSBhcmUgdHlwaWNhbGx5IGV4cGVkaXRlZCBieSB0aGUgdG9vbCAqKkNlbGwgUmFuZ2VyKiogd2hpY2gKd2UgY292ZXIgaW4gZGV0YWlsIGluIHRoZSBuZXh0IGxlc3Nvbi4KCjwvdGQ+PC90cj4KPC90YWJsZT4KCjxici8+Cjxici8+CgojIFJlZmVyZW5jZXMKCjEuIFNvcmtpbiwgTWljaGFlbCBldCBhbC4gKirigJxSZWd1bGF0aW9uIG9mIGhldGVyb3RvcGljIG9zc2lmaWNhdGlvbiBieSBtb25vY3l0ZXMgaW4gYSBtb3VzZSBtb2RlbCBvZiBhYmVycmFudCB3b3VuZCBoZWFsaW5nLuKAnSoqCiAgIE5hdHVyZSBjb21tdW5pY2F0aW9ucyB2b2wuIDExLDEgNzIyLiA1IEZlYi4gMjAyMC48YnIvPgogICBbaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8zMjAyNDgyNV0oaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8zMjAyNDgyNSl7dGFyZ2V0PSJfYmxhbmsifQoyLiBbMTB4IEdlbm9taWNzIDMnIGdlbmUgZXhwcmVzc2lvbl0oaHR0cHM6Ly93d3cuMTB4Z2Vub21pY3MuY29tL3N1cHBvcnQvc2luZ2xlLWNlbGwtZ2VuZS1leHByZXNzaW9uL2RvY3VtZW50YXRpb24vc3RlcHMvZXhwZXJpbWVudGFsLWRlc2lnbi1hbmQtcGxhbm5pbmcvZ2V0dGluZy1zdGFydGVkLXNpbmdsZS1jZWxsLTMtZ2VuZS1leHByZXNzaW9uKXt0YXJnZXQ9Il9ibGFuayJ9Cjxici8+Cjxici8+Cjxoci8+CnwgW0JhY2sgdG8gaW50cm9kdWN0aW9uXSh3b3Jrc2hvcF9pbnRyby5odG1sKSB8IFtUb3Agb2YgdGhpcyBsZXNzb25dKCN0b3ApIHwgW05leHQgbGVzc29uXSgwMS1HZXR0aW5nU3RhcnRlZC5odG1sKSB8CnwgOi0tLSB8IDotLS0tOiB8IC0tLTogfAoKCg==