{"data":{"id":"10.5061/dryad.g4f4qrg3j","type":"dois","attributes":{"doi":"10.5061/dryad.g4f4qrg3j","prefix":"10.5061","suffix":"dryad.g4f4qrg3j","identifiers":[],"alternateIdentifiers":[],"creators":[{"name":"Hu, Yakun","nameType":"Personal","givenName":"Yakun","familyName":"Hu","affiliation":["University at Buffalo, State University of New York"],"nameIdentifiers":[{"schemeUri":"https://orcid.org","nameIdentifier":"https://orcid.org/0009-0003-8959-9039","nameIdentifierScheme":"ORCID"}]},{"name":"Xu, Sumei","nameType":"Personal","givenName":"Sumei","familyName":"Xu","affiliation":["Xiangya Hospital Central South University"],"nameIdentifiers":[]},{"name":"Falls, Zackary","nameType":"Personal","givenName":"Zackary","familyName":"Falls","affiliation":["University at Buffalo, State University of New York"],"nameIdentifiers":[]},{"name":"Samudrala, Ram","nameType":"Personal","givenName":"Ram","familyName":"Samudrala","affiliation":["University at Buffalo, State University of New York"],"nameIdentifiers":[]}],"titles":[{"title":"Code and data from: Multiscale analysis and optimal glioma therapeutic candidate discovery using the CANDO platform"}],"publisher":"Dryad","container":{},"publicationYear":2026,"subjects":[{"subject":"FOS: Health sciences","schemeUri":"https://web-archive.oecd.org/2012-06-15/138575-38235147.pdf","subjectScheme":"fos"},{"subject":"FOS: Health sciences","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"FOS: Biological sciences","schemeUri":"https://web-archive.oecd.org/2012-06-15/138575-38235147.pdf","subjectScheme":"fos"},{"subject":"FOS: Biological sciences","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"FOS: Basic medicine","schemeUri":"https://web-archive.oecd.org/2012-06-15/138575-38235147.pdf","subjectScheme":"fos"},{"subject":"FOS: Basic medicine","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"FOS: Computer and information sciences","schemeUri":"https://web-archive.oecd.org/2012-06-15/138575-38235147.pdf","subjectScheme":"fos"},{"subject":"FOS: Computer and information sciences","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"Glioma","schemeUri":"https://github.com/PLOS/plos-thesaurus","subjectScheme":"PLOS Subject Area Thesaurus"},{"subject":"Drug research and development","schemeUri":"https://github.com/PLOS/plos-thesaurus","subjectScheme":"PLOS Subject Area Thesaurus"},{"subject":"Computational biology","schemeUri":"https://github.com/PLOS/plos-thesaurus","subjectScheme":"PLOS Subject Area Thesaurus"},{"subject":"polypharmacology"},{"subject":"Virtual screening"}],"contributors":[{"name":"University at Buffalo, State University of New York","nameType":"Personal","givenName":"State University of New York","familyName":"University at Buffalo","affiliation":[],"contributorType":"Sponsor","nameIdentifiers":[]}],"dates":[{"date":"2025-10-22T01:04:59Z","dateType":"Created"},{"date":"2025-10-22T01:07:12Z","dateType":"Submitted"},{"date":"2026-06-02T00:00:00Z","dateType":"Issued"},{"date":"2026-06-02T00:00:00Z","dateType":"Available"}],"language":"en","types":{"ris":"DATA","bibtex":"misc","citeproc":"dataset","schemaOrg":"Dataset","resourceType":"dataset","resourceTypeGeneral":"Dataset"},"relatedIdentifiers":[{"relationType":"IsCitedBy","relatedIdentifier":"10.1101/2025.05.19.654757","relatedIdentifierType":"DOI"},{"relationType":"IsCitedBy","relatedIdentifier":"10.1186/s13321-026-01191-9","relatedIdentifierType":"DOI"}],"relatedItems":[],"sizes":["1964368769 bytes"],"formats":[],"version":"6","rightsList":[{"rights":"Creative Commons Zero v1.0 Universal","rightsUri":"https://creativecommons.org/publicdomain/zero/1.0/legalcode","schemeUri":"https://spdx.org/licenses/","rightsIdentifier":"cc0-1.0","rightsIdentifierScheme":"SPDX"}],"descriptions":[{"description":"Glioma is a highly malignant brain tumor with limited treatment options.\n This dataset accompanies our study and contains the computed resources\n used with the Computational Analysis of Novel Drug Opportunities (CANDO)\n platform for multiscale therapeutic discovery to predict new glioma\n therapies. It includes the compound–protein interaction scores used to\n generate proteome-scale interaction signatures; ranked similarity and\n consensus lists (generated by the accompanying scripts) that model\n compound behavior across targets; and all benchmarking outputs measuring\n recovery of approved drugs at multiple cutoffs with several metrics and\n random-control comparisons across all indications. Compounds ranked highly\n by consensus but not previously associated with glioma are provided as new\n predictions together with literature corroboration tags, yielding 23\n potential treatments (e.g., vitamin D, taxanes, vinca alkaloids,\n topoisomerase inhibitors, folic acid; investigational compounds include\n ginsenosides, chrysin, resiniferatoxin, cryptotanshinone). We also provide\n top-target tables and functional-annotation summaries highlighting\n proteins with the strongest predicted interactions to these compounds,\n including vitamin D3 receptor, thyroid hormone receptor,\n acetylcholinesterase, cyclin-dependent kinase 2, tubulin alpha chain,\n dihydrofolate reductase, and thymidylate synthase. Collectively, the files\n enable reproduction of our rankings and benchmarks, extension to\n alternative libraries or indications, and reuse for target/pathway\n interrogation using the same multitarget, multiscale framework that\n supported candidate identification in the paper. ","descriptionType":"Abstract"},{"description":"# Code and data from: Multiscale analysis and optimal glioma therapeutic\n candidate discovery using the CANDO platform Our Dryad repository provides\n the Python scripts and data files required to reproduce the results of our\n study.  Experimental data for this study were generated by running CANDO’s\n benchmarking and prediction functions on existing datasets derived from\n DrugBank, CTD, and AlphaFold mapping files. Specifically, we used the\n approved compound list drugbank-v2.9-approved.tsv and the matrix file\n rd_ecfp4-int-dice-alphafold-homo_sapien-coach-c0.0-p0.0-CxP-approved.tsv\n for canbenchmark.py, and the full compound list drugbank-v2.9.tsv together\n with the matrix file filtered-alphafold-CxP-rd_ecfp4-v2.9-all.tsv for\n canpredict_compounds_and_top_targets.py. ### System requirements All\n scripts have been tested on Windows 11 Version 10.0.26100 and Python\n version 3.12.8. Most modern computers and Python version 3 users should be\n able to run the scripts. ### Installation Download cando.py and learn how\n to install the program from the CANDO tutorial:\n [https://github.com/ram-compbio/CANDO/blob/master/CANDO_tutorial.ipynb](https://github.com/ram-compbio/CANDO/blob/master/CANDO_tutorial.ipynb). The tutorial also provides documentation on specific functions mentioned in this tutorial and serves as a useful reference. Change the value of the variables cmpd_map, ind_map, and matrix_file in each supporting Python script (canbenchmark.py and canpredict_compounds_and_top_targets.py) to match the location of your data files on your machine. ### Core CANDO scripts: **canbenchmark.py**: Implements the benchmarking procedure described in *Methods 2.5 (“Benchmarking”)*.\\ This script evaluates the accuracy of the CANDO platform by comparing ranked similarity and consensus lists against known drug-indication associations, computing AIA, nAIA, IA, nIA, NDCG, and nNDCG metrics. It reproduces the benchmarking results shown in Figure 2 and *Benchmarking_Glioma.xlsx and Benchmarking_Glioma.csv* by reading the specified compound-proteome matrix (`matrix_file`), compound-indication mappings (`cmpd_map`, `ind_map`), and running `canbenchmark`, `canbenchmark_ndcg`, and `canbenchmark_new`. **canpredict_compounds_and_top_targets.py**: Reproduces the drug-prediction and top-target analyses detailed in *Methods 2.6–2.7 (“Generating drug predictions” and “Analyzing top targets and associated pathways”)*.\\ The script applies the CANDO platform to the glioma indication (MeSH:D005910), ranks compounds based on interaction-signature similarity, generates the top 100 putative glioma drug candidates, and outputs the top 100 predicted protein targets for each of the 24 high-corroboration compounds used in downstream overlap and Jaccard analyses (Figures 3–5, Tables 1–2). Set `cmpd_map`, `ind_map`, and `matrix_file` in `canbenchmark.py` and `canpredict_compounds_and_top_targets.py` to match local data paths. **random_control.py**: Implements the random-matrix generation procedure referenced in *Methods 2.5 (“Benchmarking”)*.\\ It shuffles the compound–protein interaction matrix to create randomized controls for benchmarking, reproducing the random-control distributions compared against experimental results in Figure 2. Generate 3 randomized matrices, run canbenchmark.py with them, and average the results to obtain control AIA, IA, NDCG, and related values.  **cando.py**: Core module providing all CANDO platform functions described in *Methods 2.3–2.5 (“Scoring compound-protein interactions,” “Calculating ranked compound similarity lists,” and “Benchmarking”)*.\\ It includes routines for reading compound-proteome matrices, computing all-against-all interaction-signature similarities using cosine distance, ranking compounds, generating consensus lists, and computing benchmarking metrics used by the above driver scripts. ### **Core CANDO data files:** **filtered-alphafold-CxP-rd_ecfp4-v2.9-all.tsv**: Comprehensive compound–proteome interaction matrix generated using the BANDOCK protocol (*Methods 2.3*), containing interaction scores between all 13,457 DrugBank-derived compounds and 20,295 AlphaFold2-predicted *Homo sapiens* proteins. * **Columns:** Each column corresponds to a protein target (UniProt identifier). * **Rows:** Each row represents a compound (DrugBank identifier). - **Values:** BANDOCK interaction scores (0 – 1) computed as the product of COACH binding-site confidence and Sorenson-Dice chemical similarity.\\ Used as the default full-library input for `canpredict_compounds_and_top_targets.py` to generate drug-prediction and top-target analyses. **rd_ecfp4-int-dice-alphafold-homo_sapien-coach-c0.0-p0.0-CxP-approved.tsv**: Subset of the above interaction matrix restricted to 2,449 approved DrugBank compounds and the same AlphaFold2 *Homo sapiens* protein library. * **Structure:** Identical row/column format and scoring metric as the full matrix. * **Purpose:** Used by `canbenchmark.py` for benchmarking performance of the CANDO pipeline against known drug-indication associations (Figures 2A–2D). **drugbank-v2.9-approved.tsv**: Mapping file of all approved DrugBank compounds included in the CANDO benchmarking dataset (*Methods 2.2*). **Columns:** * **CANDO_ID** — Internal CANDO compound identifier. * **DRUGBANK_ID** — DrugBank accession for the compound. * **GENERIC_NAME** — Non-proprietary compound name. * **DRUG_GROUPS** — Drug status/group labels (includes “approved”). - **Purpose:** Imported by `canbenchmark.py` to define the approved compound subset for benchmarking analyses. **drugbank-v2.9.tsv**: Comprehensive compound metadata file containing all approved, experimental, and investigational DrugBank entries used in the full compound-proteome matrix (*Methods 2.2*). * **Columns:** Same as **drugbank-v2.9-approved.tsv**.  * **Purpose:** Input for `canpredict_compounds_and_top_targets.py` to identify and rank candidate drugs from the full compound library. **drugbank2ctd-v2.9.tsv** Drug-indication mapping file linking DrugBank compound identifiers to Comparative Toxicogenomics Database (CTD) disease indications (*Methods 2.2, 2.5*). **Columns:** * **CANDO_ID** — Internal CANDO compound identifier. * **INDICATION_NAME** — Disease/indication name from CTD. * **MESH_ID** — MeSH identifier for the indication. * **INDICATION_ID** — CTD indication identifier. - **Purpose:** Used by both `canbenchmark.py` and `canpredict_compounds_and_top_targets.py` to associate compounds with disease indications (e.g., glioma = MESH:D005910) for benchmarking and prediction tasks. ### Overlap analyses scripts and data: These scripts were used to perform overlap analyses evaluating the alignment between predicted protein targets from the CANDO platform and curated glioma “gold standard” protein libraries (from UniProt, GeneCards, and literature sources compiled in Table 2 of the manuscript). Together, they quantify the overlap, frequency distributions, and Jaccard coefficients between predicted and known glioma-associated proteins across top, random, and bottom-ranked drug predictions, and visualize these results through summary tables and publication-ready figures. summary.py: Generates the master summary table (`summary.xlsx`) containing overlap statistics between each gold standard set and predicted targets from the *top 24*, *random 24*, and *bottom 24* drug predictions. For each comparison, it calculates the number of targets in each set, intersection and union sizes, overlap frequency, and Jaccard coefficients across rank and score thresholds. This summary file serves as the input for all subsequent visualization scripts. overlap_frequency_ranks.py: Produces line graphs showing the frequency of overlap (percentage of gold standard proteins captured) as a function of rank cutoff (≤10–100) for each gold standard dataset. This allows visualization of how overlap increases with ranking depth across top, random, and bottom prediction sets. jc_line_graph_ranks.py: Computes and plots the **Jaccard coefficient** (intersection / union) as a function of rank cutoff for each gold standard reference. This assesses the relative agreement between predicted and known targets across rank thresholds, and exports the results to `jc_vs_rank_cutoff.xlsx`. histograms.py: Generates histogram-based bar plots showing the relative frequency of gold standard proteins occurring within rank bins (1–20, 21–40, …, 81–100) across the top, random, and bottom prediction groups. This provides a distributional view of target enrichment at different ranking levels and exports supporting data to `histograms_raw_data.xlsx`. JC_comparison_graph.py: Compares Jaccard coefficients across multiple disease indications using aggregated overlap data (`JC_comparison_data_rank_leq10.xlsx`). It creates side-by-side bar plots comparing JC values between top 24 and top 100 predicted targets for glioma and other disease indications. random_control.py: Generates randomized control matrices by shuffling compound–protein similarity data within each compound entry. These randomized matrices serve as negative controls for benchmarking overlap analyses against non-biological random expectations. #### **summary.xlsx** This file compiles the computed overlap statistics between predicted and gold-standard protein sets, generated by `summary.py` and subsequently used by the visualization scripts (`overlap_frequency_ranks.py`, `jc_line_graph_ranks.py`). Columns: * **Experiment:** Text label describing the comparison (e.g., “GS from UniProt vs. targets from top24 (rank≤50)”). * **Targets in GS:** Number of proteins in the gold standard dataset. * **Targets in actual / control:** Number of predicted proteins in the evaluated drug set (top, random, or bottom). * **Overlap (intersection):** Number of shared proteins between the predicted set and the gold standard. * **Overlap (frequency):** Proportion of gold-standard proteins captured by the predictions. * **Union:** Total number of unique proteins across both sets. * **JC:** Jaccard coefficient (intersection / union), quantifying overlap similarity. #### **Predicted target files:** These files share identical structure and were used to compare CANDO-predicted protein targets across top, random, and bottom-ranked drug prediction sets. * **Targets_from_top_24_predictions.xlsx** * **Targets_from_random_24_predictions.xlsx** * **Bottom_24_predictions_filtered_n_geq4.xlsx** Columns: * **rank:** Integer rank assigned to each predicted protein target (1 = highest). * **score:** Similarity score between the compound and protein target. * **id:** UniProt identifier of the predicted protein target. #### **Gold standard reference files:** These files contain curated lists of glioma-associated proteins used as “gold standards” for overlap benchmarking. * **Gold_standard_from_Table_2.xlsx** * **Gold_standard_from_Uniprot.xlsx** * **Gold_standard_from_Genecard.xlsx** Columns: * **id:** UniProt identifier of the known glioma-associated protein. #### **Jaccard comparison file:** Contains precomputed overlap and union values used to calculate Jaccard coefficients across disease indications. * **JC_comparison_data_rank_leq10.xlsx** Columns: * **Top 24 Overlap / Top 24 Union:** Counts of overlapping and total proteins for the top 24 predictions per indication. * **Top 100 Overlap / Top 100 Union:** Counts of overlapping and total proteins for the top 100 predictions per indication. ### Tanimoto.zip: This Dryad package contains the scripts and outputs used to benchmark a 2D ligand-similarity pipeline within the CANDO platform. In this workflow, drug–drug similarity scores are computed using the Tanimoto coefficient (based on ECFP4 circular fingerprints) to produce a compound–compound similarity matrix, which is then used as input for CANDO benchmarking across all indications and for glioma-specific analyses. The deposited code also includes the variant used to suppress near-duplicate analog relationships and the fusion implementation that combines ligand- and proteomic-signature–based similarities. Collectively, these files reproduce the ligand, filtered-ligand, and fusion benchmarking results reported and discussed in our manuscript, and enable comparison against the proteomic pipeline under the same benchmarking framework. #### ECFP4_Tanimoto_matrix.py Python script to generate an **NxN ECFP4/Tanimoto similarity matrix** for the approved-drug library. 1) Loads RDKit molecules from MOL2 (`Chem.MolFromMol2File(..., sanitize=True, removeHs=True)`). 2) Computes **ECFP4** as a Morgan fingerprint (radius=2) bit vector (2048 bits). 3) Computes row-wise Tanimoto similarities with `DataStructs.BulkTanimotoSimilarity`. **Inputs:** * Approved drug list (`drugbank-v2.9-approved.tsv`). * MOL2 structure directory (files named by `CANDO_ID`, e.g., `1234.mol2`). **Outputs:** * `ecfp4_tanimoto_matrix.tsv` (tab-delimited, no header; diagonal set to 1.0). #### ecfp4_tanimoto_matrix.tsv The unfiltered ECFP4/Tanimoto similarity matrix generated by `ECFP4_Tanimoto_matrix.py`. **Structure:** * Square NxN matrix of **Tanimoto similarity** values (diagonal = 1.0). Row/column ordering matches the approved-drug list order used during matrix generation (drugbank-v2.9-approved.tsv).\\ **Usage:** * Input to CANDO as a `read_dists` file to benchmark the unfiltered ligand-similarity pipeline (loaded with `similarity=True`). #### ECFP4_Tanimoto_matrix_unique_98.py Python script to generate a “uniqueness-filtered” ECFP4/Tanimoto similarity matrix where the most extreme similarities (top 2% per row) are suppressed (set to 0). Computes the unfiltered similarity row with `BulkTanimotoSimilarity`. For each query compound *i*, computes the **98th percentile** of similarities to all other compounds (`np.quantile(..., 0.98)`, excluding self), and sets similarities ≥ that cutoff to 0.0 (while keeping self-similarity at 1.0). \\ **Inputs:** Same as the unfiltered generator (approved TSV + MOL2 directory). \\ \\ \\**Outputs: ** * `ecfp4_tanimoto_matrix_unique_98.tsv` (same format as the unfiltered matrix). #### ecfp4_tanimoto_matrix_unique_98.tsv The **filtered** ECFP4/Tanimoto similarity matrix generated by `ECFP4_Tanimoto_matrix_unique_98.py`, with per-row similarities in the **≥98th percentile** set to 0.0. **Usage**:  * Input to CANDO as `read_dists` for the **Tan_filter** ligand-similarity benchmark (the “near-duplicate analog suppression” condition). #### ECFP4_Tanimoto_benchmark.py Python script to run CANDO benchmarking using an ECFP4/Tanimoto `read_dists` matrix (unfiltered or filtered). Initializes a CANDO object with `compute_distance=False`, loads the matrix via `read_dists=...`, and treats values as similarities (`similarity=True`). \\ **Usage:** * Produces similarity-list benchmarking metrics via CANDO’s benchmarking functions (e.g., `canbenchmark`, `canbenchmark_ndcg`) and can be paired with consensus benchmarking via `canbenchmark_new` in `cando.py`. #### data_fusion_MUL.py Python script implementing the **fusion pipeline** used in the paper (product of proteomic- and ligand-derived similarity signals). Builds separate CANDO objects for (1) Tanimoto, (2) proteomic-signature distances, and (3) a fused object seeded from the Tanimoto `read_dists`. Convert distances to similarities: s = 1 - d; fuse: s_fused = s_tan * s_prot; convert back: d_fused = 1 - s_fused.\\ **Inputs:** * Ligand `read_dists` matrix (unfiltered `ecfp4_tanimoto_matrix.tsv`). * Proteomic compound–protein interaction signature matrix (CANDO matrix input, see above). * Drug and indication mapping files (`C_MAP`, `I_MAP`). **Output:** A fused similarity list per compound (used for downstream benchmarking in the same framework as the constituent pipelines). #### Tanimoto_Distributions.xlsx A summary table of **binned pairwise ECFP4/Tanimoto similarities** for three populations: **all-vs-all**, **glioma-vs-all**, and **glioma-vs-glioma**. For each similarity bin (e.g., 0.0–0.1, 0.1–0.2, …), the sheet reports the **proportion** and **count** of compound pairs in that bin for each population. These distributions support interpretation of glioma benchmarking behavior by showing whether glioma drugs are relatively **more  structurally diverse** than the broader library (i.e., high-similarity “analog-heavy” pairs are depleted in the glioma–glioma pool). #### Expanded_Benchmarking_results.xlsx This file contains benchmarking results comparing experimental CANDO performance against randomized control distributions across multiple recovery metrics and ranking cutoffs. In response to reviewer feedback, we expanded benchmarking analyses to include ECFP4/Tanimoto ligand-similarity benchmarking, a filtered Tanimoto pipeline suppressing near-duplicate analog relationships, and a fusion approach integrating ligand- and proteomic-signature similarities. Together, these analyses provide benchmarking context beyond random controls and enable comparison of proteomic, ligand-based, and combined approaches within the same framework. Expanded_Benchmarking_results.zip folder contains the unformatted CSV format this Excel file. #### License This project is licensed under the [CC0 1.0 Universal (Public Domain Dedication)](https://creativecommons.org/publicdomain/zero/1.0/).\\ You may freely use, modify, and distribute this work without restriction.","descriptionType":"TechnicalInfo"}],"geoLocations":[],"fundingReferences":[{"schemeUri":"https://ror.org","awardTitle":"Director’s Pioneer Award","funderName":"Office of the Director","awardNumber":"DP1OD006779","funderIdentifier":"https://ror.org/00fj8a872","funderIdentifierType":"ROR"},{"awardUri":"https://reporter.nih.gov/project-details/10933753","schemeUri":"https://ror.org","awardTitle":"NIH Clinical and Translational Sciences (NCATS) Award ","funderName":"National Center for Advancing Translational Sciences","awardNumber":"UL1TR001412","funderIdentifier":"https://ror.org/04pw6fb54","funderIdentifierType":"ROR"},{"schemeUri":"https://ror.org","awardTitle":"T15 Award","funderName":"United States National Library of Medicine","awardNumber":"T15LM012495","funderIdentifier":"https://ror.org/0060t0j89","funderIdentifierType":"ROR"},{"schemeUri":"https://ror.org","awardTitle":"R25 Award","funderName":"United States National Library of Medicine","awardNumber":"R25LM014213","funderIdentifier":"https://ror.org/0060t0j89","funderIdentifierType":"ROR"},{"schemeUri":"https://ror.org","awardTitle":"NCATS ASPIRE Design Challenge Award","funderName":"National Center for Advancing Translational Sciences","awardNumber":"UL1TR001412","funderIdentifier":"https://ror.org/04pw6fb54","funderIdentifierType":"ROR"},{"schemeUri":"https://ror.org","awardTitle":"NCATS ASPIRE Reduction-to-Practice Award","funderName":"National Center for Advancing Translational Sciences","funderIdentifier":"https://ror.org/04pw6fb54","funderIdentifierType":"ROR"},{"schemeUri":"https://ror.org","funderName":"National Institute of Standards and Technology","awardNumber":"60NANB22D168","funderIdentifier":"https://ror.org/05xpvk416","funderIdentifierType":"ROR"},{"awardUri":"https://reporter.nih.gov/project-details/11141205","schemeUri":"https://ror.org","awardTitle":"Mentored Research Scientist Development Award ","funderName":"National Institute on Drug Abuse","awardNumber":"K01DA056690","funderIdentifier":"https://ror.org/00fq5cm18","funderIdentifierType":"ROR"}],"xml":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJlc291cmNlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00L21ldGFkYXRhLnhzZCI+CiAgPGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTA2MS9EUllBRC5HNEY0UVJHM0o8L2lkZW50aWZpZXI+CiAgPGNyZWF0b3JzPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZSBuYW1lVHlwZT0iUGVyc29uYWwiPkh1LCBZYWt1bjwvY3JlYXRvck5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZy8iPjAwMDktMDAwMy04OTU5LTkwMzk8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24gYWZmaWxpYXRpb25JZGVudGlmaWVyPSJodHRwczovL3Jvci5vcmcvMDF5NjRteTQzIiBhZmZpbGlhdGlvbklkZW50aWZpZXJTY2hlbWU9IlJPUiIgc2NoZW1lVVJJPSJodHRwczovL3Jvci5vcmciPlVuaXZlcnNpdHkgYXQgQnVmZmFsbywgU3RhdGUgVW5pdmVyc2l0eSBvZiBOZXcgWW9yazwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lIG5hbWVUeXBlPSJQZXJzb25hbCI+WHUsIFN1bWVpPC9jcmVhdG9yTmFtZT4KICAgICAgPGFmZmlsaWF0aW9uIGFmZmlsaWF0aW9uSWRlbnRpZmllcj0iaHR0cHM6Ly9yb3Iub3JnLzA1YzF5ZmoxNCIgYWZmaWxpYXRpb25JZGVudGlmaWVyU2NoZW1lPSJST1IiIHNjaGVtZVVSST0iaHR0cHM6Ly9yb3Iub3JnIj5YaWFuZ3lhIEhvc3BpdGFsIENlbnRyYWwgU291dGggVW5pdmVyc2l0eTwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lIG5hbWVUeXBlPSJQZXJzb25hbCI+RmFsbHMsIFphY2thcnk8L2NyZWF0b3JOYW1lPgogICAgICA8YWZmaWxpYXRpb24gYWZmaWxpYXRpb25JZGVudGlmaWVyPSJodHRwczovL3Jvci5vcmcvMDF5NjRteTQzIiBhZmZpbGlhdGlvbklkZW50aWZpZXJTY2hlbWU9IlJPUiIgc2NoZW1lVVJJPSJodHRwczovL3Jvci5vcmciPlVuaXZlcnNpdHkgYXQgQnVmZmFsbywgU3RhdGUgVW5pdmVyc2l0eSBvZiBOZXcgWW9yazwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lIG5hbWVUeXBlPSJQZXJzb25hbCI+U2FtdWRyYWxhLCBSYW08L2NyZWF0b3JOYW1lPgogICAgICA8YWZmaWxpYXRpb24gYWZmaWxpYXRpb25JZGVudGlmaWVyPSJodHRwczovL3Jvci5vcmcvMDF5NjRteTQzIiBhZmZpbGlhdGlvbklkZW50aWZpZXJTY2hlbWU9IlJPUiIgc2NoZW1lVVJJPSJodHRwczovL3Jvci5vcmciPlVuaXZlcnNpdHkgYXQgQnVmZmFsbywgU3RhdGUgVW5pdmVyc2l0eSBvZiBOZXcgWW9yazwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgPC9jcmVhdG9ycz4KICA8dGl0bGVzPgogICAgPHRpdGxlPgogICAgICBDb2RlIGFuZCBkYXRhIGZyb206IE11bHRpc2NhbGUgYW5hbHlzaXMgYW5kIG9wdGltYWwgZ2xpb21hIHRoZXJhcGV1dGljCiAgICAgIGNhbmRpZGF0ZSBkaXNjb3ZlcnkgdXNpbmcgdGhlIENBTkRPIHBsYXRmb3JtCiAgICA8L3RpdGxlPgogIDwvdGl0bGVzPgogIDxwdWJsaXNoZXIgcHVibGlzaGVySWRlbnRpZmllcj0iaHR0cHM6Ly9yb3Iub3JnLzAweDZoNW45NSIgcHVibGlzaGVySWRlbnRpZmllclNjaGVtZT0iUk9SIiBzY2hlbWVVUkk9Imh0dHBzOi8vcm9yLm9yZy8iPkRyeWFkPC9wdWJsaXNoZXI+CiAgPHJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVHZW5lcmFsPSJEYXRhc2V0Ij5kYXRhc2V0PC9yZXNvdXJjZVR5cGU+CiAgPHB1YmxpY2F0aW9uWWVhcj4yMDI2PC9wdWJsaWNhdGlvblllYXI+CiAgPHN1YmplY3RzPgogICAgPHN1YmplY3Qgc3ViamVjdFNjaGVtZT0iZm9zIiBzY2hlbWVVUkk9Imh0dHBzOi8vd2ViLWFyY2hpdmUub2VjZC5vcmcvMjAxMi0wNi0xNS8xMzg1NzUtMzgyMzUxNDcucGRmIj5GT1M6IEhlYWx0aCBzY2llbmNlczwvc3ViamVjdD4KICAgIDxzdWJqZWN0IHN1YmplY3RTY2hlbWU9ImZvcyIgc2NoZW1lVVJJPSJodHRwczovL3dlYi1hcmNoaXZlLm9lY2Qub3JnLzIwMTItMDYtMTUvMTM4NTc1LTM4MjM1MTQ3LnBkZiI+Rk9TOiBCaW9sb2dpY2FsIHNjaWVuY2VzPC9zdWJqZWN0PgogICAgPHN1YmplY3Qgc3ViamVjdFNjaGVtZT0iZm9zIiBzY2hlbWVVUkk9Imh0dHBzOi8vd2ViLWFyY2hpdmUub2VjZC5vcmcvMjAxMi0wNi0xNS8xMzg1NzUtMzgyMzUxNDcucGRmIj5GT1M6IEJhc2ljIG1lZGljaW5lPC9zdWJqZWN0PgogICAgPHN1YmplY3Qgc3ViamVjdFNjaGVtZT0iZm9zIiBzY2hlbWVVUkk9Imh0dHBzOi8vd2ViLWFyY2hpdmUub2VjZC5vcmcvMjAxMi0wNi0xNS8xMzg1NzUtMzgyMzUxNDcucGRmIj5GT1M6IENvbXB1dGVyIGFuZCBpbmZvcm1hdGlvbiBzY2llbmNlczwvc3ViamVjdD4KICAgIDxzdWJqZWN0IHN1YmplY3RTY2hlbWU9IlBMT1MgU3ViamVjdCBBcmVhIFRoZXNhdXJ1cyIgc2NoZW1lVVJJPSJodHRwczovL2dpdGh1Yi5jb20vUExPUy9wbG9zLXRoZXNhdXJ1cyI+R2xpb21hPC9zdWJqZWN0PgogICAgPHN1YmplY3Qgc3ViamVjdFNjaGVtZT0iUExPUyBTdWJqZWN0IEFyZWEgVGhlc2F1cnVzIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ2l0aHViLmNvbS9QTE9TL3Bsb3MtdGhlc2F1cnVzIj5EcnVnIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudDwvc3ViamVjdD4KICAgIDxzdWJqZWN0IHN1YmplY3RTY2hlbWU9IlBMT1MgU3ViamVjdCBBcmVhIFRoZXNhdXJ1cyIgc2NoZW1lVVJJPSJodHRwczovL2dpdGh1Yi5jb20vUExPUy9wbG9zLXRoZXNhdXJ1cyI+Q29tcHV0YXRpb25hbCBiaW9sb2d5PC9zdWJqZWN0PgogICAgPHN1YmplY3Q+cG9seXBoYXJtYWNvbG9neTwvc3ViamVjdD4KICAgIDxzdWJqZWN0PlZpcnR1YWwgc2NyZWVuaW5nPC9zdWJqZWN0PgogIDwvc3ViamVjdHM+CiAgPGZ1bmRpbmdSZWZlcmVuY2VzPgogICAgPGZ1bmRpbmdSZWZlcmVuY2U+CiAgICAgIDxmdW5kZXJOYW1lPk9mZmljZSBvZiB0aGUgRGlyZWN0b3I8L2Z1bmRlck5hbWU+CiAgICAgIDxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJST1IiPmh0dHBzOi8vcm9yLm9yZy8wMGZqOGE4NzI8L2Z1bmRlcklkZW50aWZpZXI+CiAgICAgIDxhd2FyZE51bWJlcj5EUDFPRDAwNjc3OTwvYXdhcmROdW1iZXI+CiAgICAgIDxhd2FyZFRpdGxlPkRpcmVjdG9y4oCZcyBQaW9uZWVyIEF3YXJkPC9hd2FyZFRpdGxlPgogICAgPC9mdW5kaW5nUmVmZXJlbmNlPgogICAgPGZ1bmRpbmdSZWZlcmVuY2U+CiAgICAgIDxmdW5kZXJOYW1lPk5hdGlvbmFsIENlbnRlciBmb3IgQWR2YW5jaW5nIFRyYW5zbGF0aW9uYWwgU2NpZW5jZXM8L2Z1bmRlck5hbWU+CiAgICAgIDxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJST1IiPmh0dHBzOi8vcm9yLm9yZy8wNHB3NmZiNTQ8L2Z1bmRlcklkZW50aWZpZXI+CiAgICAgIDxhd2FyZE51bWJlciBhd2FyZFVSST0iaHR0cHM6Ly9yZXBvcnRlci5uaWguZ292L3Byb2plY3QtZGV0YWlscy8xMDkzMzc1MyI+VUwxVFIwMDE0MTI8L2F3YXJkTnVtYmVyPgogICAgICA8YXdhcmRUaXRsZT5OSUggQ2xpbmljYWwgYW5kIFRyYW5zbGF0aW9uYWwgU2NpZW5jZXMgKE5DQVRTKSBBd2FyZCA8L2F3YXJkVGl0bGU+CiAgICA8L2Z1bmRpbmdSZWZlcmVuY2U+CiAgICA8ZnVuZGluZ1JlZmVyZW5jZT4KICAgICAgPGZ1bmRlck5hbWU+VW5pdGVkIFN0YXRlcyBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lPC9mdW5kZXJOYW1lPgogICAgICA8ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iUk9SIj5odHRwczovL3Jvci5vcmcvMDA2MHQwajg5PC9mdW5kZXJJZGVudGlmaWVyPgogICAgICA8YXdhcmROdW1iZXI+VDE1TE0wMTI0OTU8L2F3YXJkTnVtYmVyPgogICAgICA8YXdhcmRUaXRsZT5UMTUgQXdhcmQ8L2F3YXJkVGl0bGU+CiAgICA8L2Z1bmRpbmdSZWZlcmVuY2U+CiAgICA8ZnVuZGluZ1JlZmVyZW5jZT4KICAgICAgPGZ1bmRlck5hbWU+VW5pdGVkIFN0YXRlcyBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lPC9mdW5kZXJOYW1lPgogICAgICA8ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iUk9SIj5odHRwczovL3Jvci5vcmcvMDA2MHQwajg5PC9mdW5kZXJJZGVudGlmaWVyPgogICAgICA8YXdhcmROdW1iZXI+UjI1TE0wMTQyMTM8L2F3YXJkTnVtYmVyPgogICAgICA8YXdhcmRUaXRsZT5SMjUgQXdhcmQ8L2F3YXJkVGl0bGU+CiAgICA8L2Z1bmRpbmdSZWZlcmVuY2U+CiAgICA8ZnVuZGluZ1JlZmVyZW5jZT4KICAgICAgPGZ1bmRlck5hbWU+TmF0aW9uYWwgQ2VudGVyIGZvciBBZHZhbmNpbmcgVHJhbnNsYXRpb25hbCBTY2llbmNlczwvZnVuZGVyTmFtZT4KICAgICAgPGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IlJPUiI+aHR0cHM6Ly9yb3Iub3JnLzA0cHc2ZmI1NDwvZnVuZGVySWRlbnRpZmllcj4KICAgICAgPGF3YXJkTnVtYmVyPlVMMVRSMDAxNDEyPC9hd2FyZE51bWJlcj4KICAgICAgPGF3YXJkVGl0bGU+TkNBVFMgQVNQSVJFIERlc2lnbiBDaGFsbGVuZ2UgQXdhcmQ8L2F3YXJkVGl0bGU+CiAgICA8L2Z1bmRpbmdSZWZlcmVuY2U+CiAgICA8ZnVuZGluZ1JlZmVyZW5jZT4KICAgICAgPGZ1bmRlck5hbWU+TmF0aW9uYWwgQ2VudGVyIGZvciBBZHZhbmNpbmcgVHJhbnNsYXRpb25hbCBTY2llbmNlczwvZnVuZGVyTmFtZT4KICAgICAgPGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IlJPUiI+aHR0cHM6Ly9yb3Iub3JnLzA0cHc2ZmI1NDwvZnVuZGVySWRlbnRpZmllcj4KICAgICAgPGF3YXJkVGl0bGU+TkNBVFMgQVNQSVJFIFJlZHVjdGlvbi10by1QcmFjdGljZSBBd2FyZDwvYXdhcmRUaXRsZT4KICAgIDwvZnVuZGluZ1JlZmVyZW5jZT4KICAgIDxmdW5kaW5nUmVmZXJlbmNlPgogICAgICA8ZnVuZGVyTmFtZT5OYXRpb25hbCBJbnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5PC9mdW5kZXJOYW1lPgogICAgICA8ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iUk9SIj5odHRwczovL3Jvci5vcmcvMDV4cHZrNDE2PC9mdW5kZXJJZGVudGlmaWVyPgogICAgICA8YXdhcmROdW1iZXI+NjBOQU5CMjJEMTY4PC9hd2FyZE51bWJlcj4KICAgICAgPGF3YXJkVGl0bGUvPgogICAgPC9mdW5kaW5nUmVmZXJlbmNlPgogICAgPGZ1bmRpbmdSZWZlcmVuY2U+CiAgICAgIDxmdW5kZXJOYW1lPk5hdGlvbmFsIEluc3RpdHV0ZSBvbiBEcnVnIEFidXNlPC9mdW5kZXJOYW1lPgogICAgICA8ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iUk9SIj5odHRwczovL3Jvci5vcmcvMDBmcTVjbTE4PC9mdW5kZXJJZGVudGlmaWVyPgogICAgICA8YXdhcmROdW1iZXIgYXdhcmRVUkk9Imh0dHBzOi8vcmVwb3J0ZXIubmloLmdvdi9wcm9qZWN0LWRldGFpbHMvMTExNDEyMDUiPkswMURBMDU2NjkwPC9hd2FyZE51bWJlcj4KICAgICAgPGF3YXJkVGl0bGU+TWVudG9yZWQgUmVzZWFyY2ggU2NpZW50aXN0IERldmVsb3BtZW50IEF3YXJkIDwvYXdhcmRUaXRsZT4KICAgIDwvZnVuZGluZ1JlZmVyZW5jZT4KICA8L2Z1bmRpbmdSZWZlcmVuY2VzPgogIDxjb250cmlidXRvcnM+CiAgICA8Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJTcG9uc29yIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5Vbml2ZXJzaXR5IGF0IEJ1ZmZhbG8sIFN0YXRlIFVuaXZlcnNpdHkgb2YgTmV3IFlvcms8L2NvbnRyaWJ1dG9yTmFtZT4KICAgIDwvY29udHJpYnV0b3I+CiAgPC9jb250cmlidXRvcnM+CiAgPGRhdGVzPgogICAgPGRhdGUgZGF0ZVR5cGU9IkNyZWF0ZWQiPjIwMjUtMTAtMjJUMDE6MDQ6NTlaPC9kYXRlPgogICAgPGRhdGUgZGF0ZVR5cGU9IlN1Ym1pdHRlZCI+MjAyNS0xMC0yMlQwMTowNzoxMlo8L2RhdGU+CiAgICA8ZGF0ZSBkYXRlVHlwZT0iSXNzdWVkIj4yMDI2LTA2LTAyVDAwOjAwOjAwWjwvZGF0ZT4KICAgIDxkYXRlIGRhdGVUeXBlPSJBdmFpbGFibGUiPjIwMjYtMDYtMDJUMDA6MDA6MDBaPC9kYXRlPgogIDwvZGF0ZXM+CiAgPGxhbmd1YWdlPmVuPC9sYW5ndWFnZT4KICA8cmVsYXRlZElkZW50aWZpZXJzPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSXNDaXRlZEJ5IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+aHR0cHM6Ly9kb2kub3JnLzEwLjExMDEvMjAyNS4wNS4xOS42NTQ3NTc8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSXNDaXRlZEJ5IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+aHR0cHM6Ly9kb2kub3JnLzEwLjExODYvczEzMzIxLTAyNi0wMTE5MS05PC9yZWxhdGVkSWRlbnRpZmllcj4KICA8L3JlbGF0ZWRJZGVudGlmaWVycz4KICA8c2l6ZXM+CiAgICA8c2l6ZT4xOTY0MzY4NzY5IGJ5dGVzPC9zaXplPgogIDwvc2l6ZXM+CiAgPHZlcnNpb24+NjwvdmVyc2lvbj4KICA8cmlnaHRzTGlzdD4KICAgIDxyaWdodHMgcmlnaHRzVVJJPSJodHRwczovL3NwZHgub3JnL2xpY2Vuc2VzL0NDMC0xLjAuaHRtbCI+Q3JlYXRpdmUgQ29tbW9ucyBaZXJvIHYxLjAgVW5pdmVyc2FsPC9yaWdodHM+CiAgPC9yaWdodHNMaXN0PgogIDxkZXNjcmlwdGlvbnM+CiAgICA8ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJBYnN0cmFjdCI+CiAgICAgIEdsaW9tYSBpcyBhIGhpZ2hseSBtYWxpZ25hbnQgYnJhaW4gdHVtb3Igd2l0aCBsaW1pdGVkIHRyZWF0bWVudCBvcHRpb25zLgogICAgICBUaGlzIGRhdGFzZXQgYWNjb21wYW5pZXMgb3VyIHN0dWR5IGFuZCBjb250YWlucyB0aGUgY29tcHV0ZWQgcmVzb3VyY2VzCiAgICAgIHVzZWQgd2l0aCB0aGUgQ29tcHV0YXRpb25hbCBBbmFseXNpcyBvZiBOb3ZlbCBEcnVnIE9wcG9ydHVuaXRpZXMgKENBTkRPKQogICAgICBwbGF0Zm9ybSBmb3IgbXVsdGlzY2FsZSB0aGVyYXBldXRpYyBkaXNjb3ZlcnkgdG8gcHJlZGljdCBuZXcgZ2xpb21hCiAgICAgIHRoZXJhcGllcy4gSXQgaW5jbHVkZXMgdGhlIGNvbXBvdW5k4oCTcHJvdGVpbiBpbnRlcmFjdGlvbiBzY29yZXMgdXNlZCB0bwogICAgICBnZW5lcmF0ZSBwcm90ZW9tZS1zY2FsZSBpbnRlcmFjdGlvbiBzaWduYXR1cmVzOyByYW5rZWQgc2ltaWxhcml0eSBhbmQKICAgICAgY29uc2Vuc3VzIGxpc3RzIChnZW5lcmF0ZWQgYnkgdGhlIGFjY29tcGFueWluZyBzY3JpcHRzKSB0aGF0IG1vZGVsCiAgICAgIGNvbXBvdW5kIGJlaGF2aW9yIGFjcm9zcyB0YXJnZXRzOyBhbmQgYWxsIGJlbmNobWFya2luZyBvdXRwdXRzIG1lYXN1cmluZwogICAgICByZWNvdmVyeSBvZiBhcHByb3ZlZCBkcnVncyBhdCBtdWx0aXBsZSBjdXRvZmZzIHdpdGggc2V2ZXJhbCBtZXRyaWNzIGFuZAogICAgICByYW5kb20tY29udHJvbCBjb21wYXJpc29ucyBhY3Jvc3MgYWxsIGluZGljYXRpb25zLiBDb21wb3VuZHMgcmFua2VkIGhpZ2hseQogICAgICBieSBjb25zZW5zdXMgYnV0IG5vdCBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aCBnbGlvbWEgYXJlIHByb3ZpZGVkIGFzIG5ldwogICAgICBwcmVkaWN0aW9ucyB0b2dldGhlciB3aXRoIGxpdGVyYXR1cmUgY29ycm9ib3JhdGlvbiB0YWdzLCB5aWVsZGluZyAyMwogICAgICBwb3RlbnRpYWwgdHJlYXRtZW50cyAoZS5nLiwgdml0YW1pbiBELCB0YXhhbmVzLCB2aW5jYSBhbGthbG9pZHMsCiAgICAgIHRvcG9pc29tZXJhc2UgaW5oaWJpdG9ycywgZm9saWMgYWNpZDsgaW52ZXN0aWdhdGlvbmFsIGNvbXBvdW5kcyBpbmNsdWRlCiAgICAgIGdpbnNlbm9zaWRlcywgY2hyeXNpbiwgcmVzaW5pZmVyYXRveGluLCBjcnlwdG90YW5zaGlub25lKS4gV2UgYWxzbyBwcm92aWRlCiAgICAgIHRvcC10YXJnZXQgdGFibGVzIGFuZCBmdW5jdGlvbmFsLWFubm90YXRpb24gc3VtbWFyaWVzIGhpZ2hsaWdodGluZwogICAgICBwcm90ZWlucyB3aXRoIHRoZSBzdHJvbmdlc3QgcHJlZGljdGVkIGludGVyYWN0aW9ucyB0byB0aGVzZSBjb21wb3VuZHMsCiAgICAgIGluY2x1ZGluZyB2aXRhbWluIEQzIHJlY2VwdG9yLCB0aHlyb2lkIGhvcm1vbmUgcmVjZXB0b3IsCiAgICAgIGFjZXR5bGNob2xpbmVzdGVyYXNlLCBjeWNsaW4tZGVwZW5kZW50IGtpbmFzZSAyLCB0dWJ1bGluIGFscGhhIGNoYWluLAogICAgICBkaWh5ZHJvZm9sYXRlIHJlZHVjdGFzZSwgYW5kIHRoeW1pZHlsYXRlIHN5bnRoYXNlLiBDb2xsZWN0aXZlbHksIHRoZSBmaWxlcwogICAgICBlbmFibGUgcmVwcm9kdWN0aW9uIG9mIG91ciByYW5raW5ncyBhbmQgYmVuY2htYXJrcywgZXh0ZW5zaW9uIHRvCiAgICAgIGFsdGVybmF0aXZlIGxpYnJhcmllcyBvciBpbmRpY2F0aW9ucywgYW5kIHJldXNlIGZvciB0YXJnZXQvcGF0aHdheQogICAgICBpbnRlcnJvZ2F0aW9uIHVzaW5nIHRoZSBzYW1lIG11bHRpdGFyZ2V0LCBtdWx0aXNjYWxlIGZyYW1ld29yayB0aGF0CiAgICAgIHN1cHBvcnRlZCBjYW5kaWRhdGUgaWRlbnRpZmljYXRpb24gaW4gdGhlIHBhcGVyLiZhbXA7bmJzcDsKICAgIDwvZGVzY3JpcHRpb24+CiAgICA8ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJUZWNobmljYWxJbmZvIj4KICAgICAgIyBDb2RlIGFuZCBkYXRhIGZyb206IE11bHRpc2NhbGUgYW5hbHlzaXMgYW5kIG9wdGltYWwgZ2xpb21hIHRoZXJhcGV1dGljCiAgICAgIGNhbmRpZGF0ZSBkaXNjb3ZlcnkgdXNpbmcgdGhlIENBTkRPIHBsYXRmb3JtIE91ciBEcnlhZCByZXBvc2l0b3J5IHByb3ZpZGVzCiAgICAgIHRoZSBQeXRob24gc2NyaXB0cyBhbmQgZGF0YSBmaWxlcyByZXF1aXJlZCB0byByZXByb2R1Y2UgdGhlIHJlc3VsdHMgb2Ygb3VyCiAgICAgIHN0dWR5LsKgIEV4cGVyaW1lbnRhbCBkYXRhIGZvciB0aGlzIHN0dWR5IHdlcmUgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgQ0FORE/igJlzCiAgICAgIGJlbmNobWFya2luZyBhbmQgcHJlZGljdGlvbiBmdW5jdGlvbnMgb24gZXhpc3RpbmcgZGF0YXNldHMgZGVyaXZlZCBmcm9tCiAgICAgIERydWdCYW5rLCBDVEQsIGFuZCBBbHBoYUZvbGQgbWFwcGluZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCB3ZSB1c2VkIHRoZQogICAgICBhcHByb3ZlZCBjb21wb3VuZCBsaXN0IGRydWdiYW5rLXYyLjktYXBwcm92ZWQudHN2IGFuZCB0aGUgbWF0cml4IGZpbGUKICAgICAgcmRfZWNmcDQtaW50LWRpY2UtYWxwaGFmb2xkLWhvbW9fc2FwaWVuLWNvYWNoLWMwLjAtcDAuMC1DeFAtYXBwcm92ZWQudHN2CiAgICAgIGZvciBjYW5iZW5jaG1hcmsucHksIGFuZCB0aGUgZnVsbCBjb21wb3VuZCBsaXN0IGRydWdiYW5rLXYyLjkudHN2IHRvZ2V0aGVyCiAgICAgIHdpdGggdGhlIG1hdHJpeCBmaWxlIGZpbHRlcmVkLWFscGhhZm9sZC1DeFAtcmRfZWNmcDQtdjIuOS1hbGwudHN2IGZvcgogICAgICBjYW5wcmVkaWN0X2NvbXBvdW5kc19hbmRfdG9wX3RhcmdldHMucHkuICMjIyBTeXN0ZW0gcmVxdWlyZW1lbnRzIEFsbAogICAgICBzY3JpcHRzIGhhdmUgYmVlbiB0ZXN0ZWQgb24gV2luZG93cyAxMSBWZXJzaW9uIDEwLjAuMjYxMDAgYW5kIFB5dGhvbgogICAgICB2ZXJzaW9uIDMuMTIuOC4gTW9zdCBtb2Rlcm4gY29tcHV0ZXJzIGFuZCBQeXRob24gdmVyc2lvbiAzIHVzZXJzIHNob3VsZCBiZQogICAgICBhYmxlIHRvIHJ1biB0aGUgc2NyaXB0cy4gIyMjIEluc3RhbGxhdGlvbiBEb3dubG9hZCBjYW5kby5weSBhbmQgbGVhcm4gaG93CiAgICAgIHRvIGluc3RhbGwgdGhlIHByb2dyYW0gZnJvbSB0aGUgQ0FORE8gdHV0b3JpYWw6CiAgICAgIFtodHRwczovL2dpdGh1Yi5jb20vcmFtLWNvbXBiaW8vQ0FORE8vYmxvYi9tYXN0ZXIvQ0FORE9fdHV0b3JpYWwuaXB5bmJdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYW0tY29tcGJpby9DQU5ETy9ibG9iL21hc3Rlci9DQU5ET190dXRvcmlhbC5pcHluYikuIFRoZSB0dXRvcmlhbCBhbHNvIHByb3ZpZGVzIGRvY3VtZW50YXRpb24gb24gc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZCBpbiB0aGlzIHR1dG9yaWFsIGFuZCBzZXJ2ZXMgYXMgYSB1c2VmdWwgcmVmZXJlbmNlLiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZXMgY21wZF9tYXAsIGluZF9tYXAsIGFuZCBtYXRyaXhfZmlsZSBpbiBlYWNoIHN1cHBvcnRpbmcgUHl0aG9uIHNjcmlwdCAoY2FuYmVuY2htYXJrLnB5IGFuZCBjYW5wcmVkaWN0X2NvbXBvdW5kc19hbmRfdG9wX3RhcmdldHMucHkpIHRvIG1hdGNoIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGRhdGEgZmlsZXMgb24geW91ciBtYWNoaW5lLiAjIyMgQ29yZSBDQU5ETyBzY3JpcHRzOiAqKmNhbmJlbmNobWFyay5weSoqOiBJbXBsZW1lbnRzIHRoZSBiZW5jaG1hcmtpbmcgcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiAqTWV0aG9kcyAyLjUgKOKAnEJlbmNobWFya2luZ+KAnSkqLlwgVGhpcyBzY3JpcHQgZXZhbHVhdGVzIHRoZSBhY2N1cmFjeSBvZiB0aGUgQ0FORE8gcGxhdGZvcm0gYnkgY29tcGFyaW5nIHJhbmtlZCBzaW1pbGFyaXR5IGFuZCBjb25zZW5zdXMgbGlzdHMgYWdhaW5zdCBrbm93biBkcnVnLWluZGljYXRpb24gYXNzb2NpYXRpb25zLCBjb21wdXRpbmcgQUlBLCBuQUlBLCBJQSwgbklBLCBORENHLCBhbmQgbk5EQ0cgbWV0cmljcy4gSXQgcmVwcm9kdWNlcyB0aGUgYmVuY2htYXJraW5nIHJlc3VsdHMgc2hvd24gaW4gRmlndXJlIDIgYW5kICpCZW5jaG1hcmtpbmdfR2xpb21hLnhsc3ggYW5kwqBCZW5jaG1hcmtpbmdfR2xpb21hLmNzdiogYnkgcmVhZGluZyB0aGUgc3BlY2lmaWVkIGNvbXBvdW5kLXByb3Rlb21lIG1hdHJpeCAoYG1hdHJpeF9maWxlYCksIGNvbXBvdW5kLWluZGljYXRpb24gbWFwcGluZ3MgKGBjbXBkX21hcGAsIGBpbmRfbWFwYCksIGFuZCBydW5uaW5nIGBjYW5iZW5jaG1hcmtgLCBgY2FuYmVuY2htYXJrX25kY2dgLCBhbmQgYGNhbmJlbmNobWFya19uZXdgLiAqKmNhbnByZWRpY3RfY29tcG91bmRzX2FuZF90b3BfdGFyZ2V0cy5weSoqOiBSZXByb2R1Y2VzIHRoZSBkcnVnLXByZWRpY3Rpb24gYW5kIHRvcC10YXJnZXQgYW5hbHlzZXMgZGV0YWlsZWQgaW4gKk1ldGhvZHMgMi424oCTMi43ICjigJxHZW5lcmF0aW5nIGRydWcgcHJlZGljdGlvbnPigJ0gYW5kIOKAnEFuYWx5emluZyB0b3AgdGFyZ2V0cyBhbmQgYXNzb2NpYXRlZCBwYXRod2F5c+KAnSkqLlwgVGhlIHNjcmlwdCBhcHBsaWVzIHRoZSBDQU5ETyBwbGF0Zm9ybSB0byB0aGUgZ2xpb21hIGluZGljYXRpb24gKE1lU0g6RDAwNTkxMCksIHJhbmtzIGNvbXBvdW5kcyBiYXNlZCBvbiBpbnRlcmFjdGlvbi1zaWduYXR1cmUgc2ltaWxhcml0eSwgZ2VuZXJhdGVzIHRoZSB0b3AgMTAwIHB1dGF0aXZlIGdsaW9tYSBkcnVnIGNhbmRpZGF0ZXMsIGFuZCBvdXRwdXRzIHRoZSB0b3AgMTAwIHByZWRpY3RlZCBwcm90ZWluIHRhcmdldHMgZm9yIGVhY2ggb2YgdGhlIDI0IGhpZ2gtY29ycm9ib3JhdGlvbiBjb21wb3VuZHMgdXNlZCBpbiBkb3duc3RyZWFtIG92ZXJsYXAgYW5kIEphY2NhcmQgYW5hbHlzZXMgKEZpZ3VyZXMgM+KAkzUsIFRhYmxlcyAx4oCTMikuIFNldCBgY21wZF9tYXBgLCBgaW5kX21hcGAsIGFuZCBgbWF0cml4X2ZpbGVgIGluIGBjYW5iZW5jaG1hcmsucHlgIGFuZCBgY2FucHJlZGljdF9jb21wb3VuZHNfYW5kX3RvcF90YXJnZXRzLnB5YCB0byBtYXRjaCBsb2NhbCBkYXRhIHBhdGhzLiAqKnJhbmRvbV9jb250cm9sLnB5Kio6IEltcGxlbWVudHMgdGhlIHJhbmRvbS1tYXRyaXggZ2VuZXJhdGlvbiBwcm9jZWR1cmUgcmVmZXJlbmNlZCBpbiAqTWV0aG9kcyAyLjUgKOKAnEJlbmNobWFya2luZ+KAnSkqLlwgSXQgc2h1ZmZsZXMgdGhlIGNvbXBvdW5k4oCTcHJvdGVpbiBpbnRlcmFjdGlvbiBtYXRyaXggdG8gY3JlYXRlIHJhbmRvbWl6ZWQgY29udHJvbHMgZm9yIGJlbmNobWFya2luZywgcmVwcm9kdWNpbmcgdGhlIHJhbmRvbS1jb250cm9sIGRpc3RyaWJ1dGlvbnMgY29tcGFyZWQgYWdhaW5zdCBleHBlcmltZW50YWwgcmVzdWx0cyBpbiBGaWd1cmUgMi4gR2VuZXJhdGUgMyByYW5kb21pemVkIG1hdHJpY2VzLCBydW4gY2FuYmVuY2htYXJrLnB5IHdpdGggdGhlbSwgYW5kIGF2ZXJhZ2UgdGhlIHJlc3VsdHMgdG8gb2J0YWluIGNvbnRyb2wgQUlBLCBJQSwgTkRDRywgYW5kIHJlbGF0ZWQgdmFsdWVzLsKgICoqY2FuZG8ucHkqKjogQ29yZSBtb2R1bGUgcHJvdmlkaW5nIGFsbCBDQU5ETyBwbGF0Zm9ybSBmdW5jdGlvbnMgZGVzY3JpYmVkIGluICpNZXRob2RzIDIuM+KAkzIuNSAo4oCcU2NvcmluZyBjb21wb3VuZC1wcm90ZWluIGludGVyYWN0aW9ucyzigJ0g4oCcQ2FsY3VsYXRpbmcgcmFua2VkIGNvbXBvdW5kIHNpbWlsYXJpdHkgbGlzdHMs4oCdIGFuZCDigJxCZW5jaG1hcmtpbmfigJ0pKi5cIEl0IGluY2x1ZGVzIHJvdXRpbmVzIGZvciByZWFkaW5nIGNvbXBvdW5kLXByb3Rlb21lIG1hdHJpY2VzLCBjb21wdXRpbmcgYWxsLWFnYWluc3QtYWxsIGludGVyYWN0aW9uLXNpZ25hdHVyZSBzaW1pbGFyaXRpZXMgdXNpbmcgY29zaW5lIGRpc3RhbmNlLCByYW5raW5nIGNvbXBvdW5kcywgZ2VuZXJhdGluZyBjb25zZW5zdXMgbGlzdHMsIGFuZCBjb21wdXRpbmcgYmVuY2htYXJraW5nIG1ldHJpY3MgdXNlZCBieSB0aGUgYWJvdmUgZHJpdmVyIHNjcmlwdHMuICMjIyAqKkNvcmUgQ0FORE8gZGF0YSBmaWxlczoqKiAqKmZpbHRlcmVkLWFscGhhZm9sZC1DeFAtcmRfZWNmcDQtdjIuOS1hbGwudHN2Kio6IENvbXByZWhlbnNpdmUgY29tcG91bmTigJNwcm90ZW9tZSBpbnRlcmFjdGlvbiBtYXRyaXggZ2VuZXJhdGVkIHVzaW5nIHRoZSBCQU5ET0NLIHByb3RvY29sICgqTWV0aG9kcyAyLjMqKSwgY29udGFpbmluZyBpbnRlcmFjdGlvbiBzY29yZXMgYmV0d2VlbiBhbGwgMTMsNDU3IERydWdCYW5rLWRlcml2ZWQgY29tcG91bmRzIGFuZCAyMCwyOTUgQWxwaGFGb2xkMi1wcmVkaWN0ZWQgKkhvbW8gc2FwaWVucyogcHJvdGVpbnMuICogKipDb2x1bW5zOioqIEVhY2ggY29sdW1uIGNvcnJlc3BvbmRzIHRvIGEgcHJvdGVpbiB0YXJnZXQgKFVuaVByb3QgaWRlbnRpZmllcikuICogKipSb3dzOioqIEVhY2ggcm93IHJlcHJlc2VudHMgYSBjb21wb3VuZCAoRHJ1Z0JhbmsgaWRlbnRpZmllcikuIC0gKipWYWx1ZXM6KiogQkFORE9DSyBpbnRlcmFjdGlvbiBzY29yZXMgKDAg4oCTIDEpIGNvbXB1dGVkIGFzIHRoZSBwcm9kdWN0IG9mIENPQUNIIGJpbmRpbmctc2l0ZSBjb25maWRlbmNlIGFuZCBTb3JlbnNvbi1EaWNlIGNoZW1pY2FsIHNpbWlsYXJpdHkuXCBVc2VkIGFzIHRoZSBkZWZhdWx0IGZ1bGwtbGlicmFyeSBpbnB1dCBmb3IgYGNhbnByZWRpY3RfY29tcG91bmRzX2FuZF90b3BfdGFyZ2V0cy5weWAgdG8gZ2VuZXJhdGUgZHJ1Zy1wcmVkaWN0aW9uIGFuZCB0b3AtdGFyZ2V0IGFuYWx5c2VzLiAqKnJkX2VjZnA0LWludC1kaWNlLWFscGhhZm9sZC1ob21vX3NhcGllbi1jb2FjaC1jMC4wLXAwLjAtQ3hQLWFwcHJvdmVkLnRzdioqOiBTdWJzZXQgb2YgdGhlIGFib3ZlIGludGVyYWN0aW9uIG1hdHJpeCByZXN0cmljdGVkIHRvIDIsNDQ5IGFwcHJvdmVkIERydWdCYW5rIGNvbXBvdW5kcyBhbmQgdGhlIHNhbWUgQWxwaGFGb2xkMiAqSG9tbyBzYXBpZW5zKiBwcm90ZWluIGxpYnJhcnkuICogKipTdHJ1Y3R1cmU6KiogSWRlbnRpY2FsIHJvdy9jb2x1bW4gZm9ybWF0IGFuZCBzY29yaW5nIG1ldHJpYyBhcyB0aGUgZnVsbCBtYXRyaXguICogKipQdXJwb3NlOioqIFVzZWQgYnkgYGNhbmJlbmNobWFyay5weWAgZm9yIGJlbmNobWFya2luZyBwZXJmb3JtYW5jZSBvZiB0aGUgQ0FORE8gcGlwZWxpbmUgYWdhaW5zdCBrbm93biBkcnVnLWluZGljYXRpb24gYXNzb2NpYXRpb25zIChGaWd1cmVzIDJB4oCTMkQpLiAqKmRydWdiYW5rLXYyLjktYXBwcm92ZWQudHN2Kio6IE1hcHBpbmcgZmlsZSBvZiBhbGwgYXBwcm92ZWQgRHJ1Z0JhbmsgY29tcG91bmRzIGluY2x1ZGVkIGluIHRoZSBDQU5ETyBiZW5jaG1hcmtpbmcgZGF0YXNldCAoKk1ldGhvZHMgMi4yKikuICoqQ29sdW1uczoqKiAqICoqQ0FORE9fSUQqKiDigJQgSW50ZXJuYWwgQ0FORE8gY29tcG91bmQgaWRlbnRpZmllci4gKiAqKkRSVUdCQU5LX0lEKiog4oCUIERydWdCYW5rIGFjY2Vzc2lvbiBmb3IgdGhlIGNvbXBvdW5kLiAqICoqR0VORVJJQ19OQU1FKiog4oCUIE5vbi1wcm9wcmlldGFyeSBjb21wb3VuZCBuYW1lLiAqICoqRFJVR19HUk9VUFMqKiDigJQgRHJ1ZyBzdGF0dXMvZ3JvdXAgbGFiZWxzIChpbmNsdWRlcyDigJxhcHByb3ZlZOKAnSkuIC0gKipQdXJwb3NlOioqIEltcG9ydGVkIGJ5IGBjYW5iZW5jaG1hcmsucHlgIHRvIGRlZmluZSB0aGUgYXBwcm92ZWQgY29tcG91bmQgc3Vic2V0IGZvciBiZW5jaG1hcmtpbmcgYW5hbHlzZXMuICoqZHJ1Z2JhbmstdjIuOS50c3YqKjogQ29tcHJlaGVuc2l2ZSBjb21wb3VuZCBtZXRhZGF0YSBmaWxlIGNvbnRhaW5pbmcgYWxsIGFwcHJvdmVkLCBleHBlcmltZW50YWwsIGFuZCBpbnZlc3RpZ2F0aW9uYWwgRHJ1Z0JhbmsgZW50cmllcyB1c2VkIGluIHRoZSBmdWxsIGNvbXBvdW5kLXByb3Rlb21lIG1hdHJpeCAoKk1ldGhvZHMgMi4yKikuICogKipDb2x1bW5zOioqIFNhbWUgYXPCoCoqZHJ1Z2JhbmstdjIuOS1hcHByb3ZlZC50c3YqKi7CoCAqICoqUHVycG9zZToqKiBJbnB1dCBmb3IgYGNhbnByZWRpY3RfY29tcG91bmRzX2FuZF90b3BfdGFyZ2V0cy5weWAgdG8gaWRlbnRpZnkgYW5kIHJhbmsgY2FuZGlkYXRlIGRydWdzIGZyb20gdGhlIGZ1bGwgY29tcG91bmQgbGlicmFyeS4gKipkcnVnYmFuazJjdGQtdjIuOS50c3YqKiBEcnVnLWluZGljYXRpb24gbWFwcGluZyBmaWxlIGxpbmtpbmcgRHJ1Z0JhbmsgY29tcG91bmQgaWRlbnRpZmllcnMgdG8gQ29tcGFyYXRpdmUgVG94aWNvZ2Vub21pY3MgRGF0YWJhc2UgKENURCkgZGlzZWFzZSBpbmRpY2F0aW9ucyAoKk1ldGhvZHMgMi4yLCAyLjUqKS4gKipDb2x1bW5zOioqICogKipDQU5ET19JRCoqIOKAlCBJbnRlcm5hbCBDQU5ETyBjb21wb3VuZCBpZGVudGlmaWVyLiAqICoqSU5ESUNBVElPTl9OQU1FKiog4oCUIERpc2Vhc2UvaW5kaWNhdGlvbiBuYW1lIGZyb20gQ1RELiAqICoqTUVTSF9JRCoqIOKAlCBNZVNIIGlkZW50aWZpZXIgZm9yIHRoZSBpbmRpY2F0aW9uLiAqICoqSU5ESUNBVElPTl9JRCoqIOKAlCBDVEQgaW5kaWNhdGlvbiBpZGVudGlmaWVyLiAtICoqUHVycG9zZToqKiBVc2VkIGJ5IGJvdGggYGNhbmJlbmNobWFyay5weWAgYW5kIGBjYW5wcmVkaWN0X2NvbXBvdW5kc19hbmRfdG9wX3RhcmdldHMucHlgIHRvIGFzc29jaWF0ZSBjb21wb3VuZHMgd2l0aCBkaXNlYXNlIGluZGljYXRpb25zIChlLmcuLCBnbGlvbWEgPSBNRVNIOkQwMDU5MTApIGZvciBiZW5jaG1hcmtpbmcgYW5kIHByZWRpY3Rpb24gdGFza3MuICMjIyBPdmVybGFwIGFuYWx5c2VzIHNjcmlwdHMgYW5kIGRhdGE6IFRoZXNlIHNjcmlwdHMgd2VyZSB1c2VkIHRvIHBlcmZvcm0gb3ZlcmxhcCBhbmFseXNlcyBldmFsdWF0aW5nIHRoZSBhbGlnbm1lbnQgYmV0d2VlbiBwcmVkaWN0ZWQgcHJvdGVpbiB0YXJnZXRzIGZyb20gdGhlIENBTkRPIHBsYXRmb3JtIGFuZCBjdXJhdGVkIGdsaW9tYSDigJxnb2xkIHN0YW5kYXJk4oCdIHByb3RlaW4gbGlicmFyaWVzIChmcm9tIFVuaVByb3QsIEdlbmVDYXJkcywgYW5kIGxpdGVyYXR1cmUgc291cmNlcyBjb21waWxlZCBpbiBUYWJsZSAyIG9mIHRoZSBtYW51c2NyaXB0KS4gVG9nZXRoZXIsIHRoZXkgcXVhbnRpZnkgdGhlIG92ZXJsYXAsIGZyZXF1ZW5jeSBkaXN0cmlidXRpb25zLCBhbmQgSmFjY2FyZCBjb2VmZmljaWVudHMgYmV0d2VlbiBwcmVkaWN0ZWQgYW5kIGtub3duIGdsaW9tYS1hc3NvY2lhdGVkIHByb3RlaW5zIGFjcm9zcyB0b3AsIHJhbmRvbSwgYW5kIGJvdHRvbS1yYW5rZWQgZHJ1ZyBwcmVkaWN0aW9ucywgYW5kIHZpc3VhbGl6ZSB0aGVzZSByZXN1bHRzIHRocm91Z2ggc3VtbWFyeSB0YWJsZXMgYW5kIHB1YmxpY2F0aW9uLXJlYWR5IGZpZ3VyZXMuIHN1bW1hcnkucHk6IEdlbmVyYXRlcyB0aGUgbWFzdGVyIHN1bW1hcnkgdGFibGUgKGBzdW1tYXJ5Lnhsc3hgKSBjb250YWluaW5nIG92ZXJsYXAgc3RhdGlzdGljcyBiZXR3ZWVuIGVhY2ggZ29sZCBzdGFuZGFyZCBzZXQgYW5kIHByZWRpY3RlZCB0YXJnZXRzIGZyb20gdGhlICp0b3AgMjQqLCAqcmFuZG9tIDI0KiwgYW5kICpib3R0b20gMjQqIGRydWcgcHJlZGljdGlvbnMuIEZvciBlYWNoIGNvbXBhcmlzb24sIGl0IGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiB0YXJnZXRzIGluIGVhY2ggc2V0LCBpbnRlcnNlY3Rpb24gYW5kIHVuaW9uIHNpemVzLCBvdmVybGFwIGZyZXF1ZW5jeSwgYW5kIEphY2NhcmQgY29lZmZpY2llbnRzIGFjcm9zcyByYW5rIGFuZCBzY29yZSB0aHJlc2hvbGRzLiBUaGlzIHN1bW1hcnkgZmlsZSBzZXJ2ZXMgYXMgdGhlIGlucHV0IGZvciBhbGwgc3Vic2VxdWVudCB2aXN1YWxpemF0aW9uIHNjcmlwdHMuIG92ZXJsYXBfZnJlcXVlbmN5X3JhbmtzLnB5OiBQcm9kdWNlcyBsaW5lIGdyYXBocyBzaG93aW5nIHRoZSBmcmVxdWVuY3kgb2Ygb3ZlcmxhcCAocGVyY2VudGFnZSBvZiBnb2xkIHN0YW5kYXJkIHByb3RlaW5zIGNhcHR1cmVkKSBhcyBhIGZ1bmN0aW9uIG9mIHJhbmsgY3V0b2ZmICjiiaQxMOKAkzEwMCkgZm9yIGVhY2ggZ29sZCBzdGFuZGFyZCBkYXRhc2V0LiBUaGlzIGFsbG93cyB2aXN1YWxpemF0aW9uIG9mIGhvdyBvdmVybGFwIGluY3JlYXNlcyB3aXRoIHJhbmtpbmcgZGVwdGggYWNyb3NzIHRvcCwgcmFuZG9tLCBhbmQgYm90dG9tIHByZWRpY3Rpb24gc2V0cy4gamNfbGluZV9ncmFwaF9yYW5rcy5weTogQ29tcHV0ZXMgYW5kIHBsb3RzIHRoZSAqKkphY2NhcmQgY29lZmZpY2llbnQqKiAoaW50ZXJzZWN0aW9uIC8gdW5pb24pIGFzIGEgZnVuY3Rpb24gb2YgcmFuayBjdXRvZmYgZm9yIGVhY2ggZ29sZCBzdGFuZGFyZCByZWZlcmVuY2UuIFRoaXMgYXNzZXNzZXMgdGhlIHJlbGF0aXZlIGFncmVlbWVudCBiZXR3ZWVuIHByZWRpY3RlZCBhbmQga25vd24gdGFyZ2V0cyBhY3Jvc3MgcmFuayB0aHJlc2hvbGRzLCBhbmQgZXhwb3J0cyB0aGUgcmVzdWx0cyB0byBgamNfdnNfcmFua19jdXRvZmYueGxzeGAuIGhpc3RvZ3JhbXMucHk6IEdlbmVyYXRlcyBoaXN0b2dyYW0tYmFzZWQgYmFyIHBsb3RzIHNob3dpbmcgdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZiBnb2xkIHN0YW5kYXJkIHByb3RlaW5zIG9jY3VycmluZyB3aXRoaW4gcmFuayBiaW5zICgx4oCTMjAsIDIx4oCTNDAsIOKApiwgODHigJMxMDApIGFjcm9zcyB0aGUgdG9wLCByYW5kb20sIGFuZCBib3R0b20gcHJlZGljdGlvbiBncm91cHMuIFRoaXMgcHJvdmlkZXMgYSBkaXN0cmlidXRpb25hbCB2aWV3IG9mIHRhcmdldCBlbnJpY2htZW50IGF0IGRpZmZlcmVudCByYW5raW5nIGxldmVscyBhbmQgZXhwb3J0cyBzdXBwb3J0aW5nIGRhdGEgdG8gYGhpc3RvZ3JhbXNfcmF3X2RhdGEueGxzeGAuIEpDX2NvbXBhcmlzb25fZ3JhcGgucHk6IENvbXBhcmVzIEphY2NhcmQgY29lZmZpY2llbnRzIGFjcm9zcyBtdWx0aXBsZSBkaXNlYXNlIGluZGljYXRpb25zIHVzaW5nIGFnZ3JlZ2F0ZWQgb3ZlcmxhcCBkYXRhIChgSkNfY29tcGFyaXNvbl9kYXRhX3JhbmtfbGVxMTAueGxzeGApLiBJdCBjcmVhdGVzIHNpZGUtYnktc2lkZSBiYXIgcGxvdHMgY29tcGFyaW5nIEpDIHZhbHVlcyBiZXR3ZWVuIHRvcCAyNCBhbmQgdG9wIDEwMCBwcmVkaWN0ZWQgdGFyZ2V0cyBmb3IgZ2xpb21hIGFuZCBvdGhlciBkaXNlYXNlIGluZGljYXRpb25zLiByYW5kb21fY29udHJvbC5weTogR2VuZXJhdGVzIHJhbmRvbWl6ZWQgY29udHJvbCBtYXRyaWNlcyBieSBzaHVmZmxpbmcgY29tcG91bmTigJNwcm90ZWluIHNpbWlsYXJpdHkgZGF0YSB3aXRoaW4gZWFjaCBjb21wb3VuZCBlbnRyeS4gVGhlc2UgcmFuZG9taXplZCBtYXRyaWNlcyBzZXJ2ZSBhcyBuZWdhdGl2ZSBjb250cm9scyBmb3IgYmVuY2htYXJraW5nIG92ZXJsYXAgYW5hbHlzZXMgYWdhaW5zdCBub24tYmlvbG9naWNhbCByYW5kb20gZXhwZWN0YXRpb25zLiAjIyMjICoqc3VtbWFyeS54bHN4KiogVGhpcyBmaWxlIGNvbXBpbGVzIHRoZSBjb21wdXRlZCBvdmVybGFwIHN0YXRpc3RpY3MgYmV0d2VlbiBwcmVkaWN0ZWQgYW5kIGdvbGQtc3RhbmRhcmQgcHJvdGVpbiBzZXRzLCBnZW5lcmF0ZWQgYnkgYHN1bW1hcnkucHlgIGFuZCBzdWJzZXF1ZW50bHkgdXNlZCBieSB0aGUgdmlzdWFsaXphdGlvbiBzY3JpcHRzIChgb3ZlcmxhcF9mcmVxdWVuY3lfcmFua3MucHlgLCBgamNfbGluZV9ncmFwaF9yYW5rcy5weWApLiBDb2x1bW5zOiAqICoqRXhwZXJpbWVudDoqKiBUZXh0IGxhYmVsIGRlc2NyaWJpbmcgdGhlIGNvbXBhcmlzb24gKGUuZy4sIOKAnEdTIGZyb20gVW5pUHJvdCB2cy4gdGFyZ2V0cyBmcm9tIHRvcDI0IChyYW5r4omkNTAp4oCdKS4gKiAqKlRhcmdldHMgaW4gR1M6KiogTnVtYmVyIG9mIHByb3RlaW5zIGluIHRoZSBnb2xkIHN0YW5kYXJkIGRhdGFzZXQuICogKipUYXJnZXRzIGluIGFjdHVhbCAvIGNvbnRyb2w6KiogTnVtYmVyIG9mIHByZWRpY3RlZCBwcm90ZWlucyBpbiB0aGUgZXZhbHVhdGVkIGRydWcgc2V0ICh0b3AsIHJhbmRvbSwgb3IgYm90dG9tKS4gKiAqKk92ZXJsYXAgKGludGVyc2VjdGlvbik6KiogTnVtYmVyIG9mIHNoYXJlZCBwcm90ZWlucyBiZXR3ZWVuIHRoZSBwcmVkaWN0ZWQgc2V0IGFuZCB0aGUgZ29sZCBzdGFuZGFyZC4gKiAqKk92ZXJsYXAgKGZyZXF1ZW5jeSk6KiogUHJvcG9ydGlvbiBvZiBnb2xkLXN0YW5kYXJkIHByb3RlaW5zIGNhcHR1cmVkIGJ5IHRoZSBwcmVkaWN0aW9ucy4gKiAqKlVuaW9uOioqIFRvdGFsIG51bWJlciBvZiB1bmlxdWUgcHJvdGVpbnMgYWNyb3NzIGJvdGggc2V0cy4gKiAqKkpDOioqIEphY2NhcmQgY29lZmZpY2llbnQgKGludGVyc2VjdGlvbiAvIHVuaW9uKSwgcXVhbnRpZnlpbmcgb3ZlcmxhcCBzaW1pbGFyaXR5LiAjIyMjICoqUHJlZGljdGVkIHRhcmdldCBmaWxlczoqKiBUaGVzZSBmaWxlcyBzaGFyZSBpZGVudGljYWwgc3RydWN0dXJlIGFuZCB3ZXJlIHVzZWQgdG8gY29tcGFyZSBDQU5ETy1wcmVkaWN0ZWQgcHJvdGVpbiB0YXJnZXRzIGFjcm9zcyB0b3AsIHJhbmRvbSwgYW5kIGJvdHRvbS1yYW5rZWQgZHJ1ZyBwcmVkaWN0aW9uIHNldHMuICogKipUYXJnZXRzX2Zyb21fdG9wXzI0X3ByZWRpY3Rpb25zLnhsc3gqKiAqICoqVGFyZ2V0c19mcm9tX3JhbmRvbV8yNF9wcmVkaWN0aW9ucy54bHN4KiogKiAqKkJvdHRvbV8yNF9wcmVkaWN0aW9uc19maWx0ZXJlZF9uX2dlcTQueGxzeCoqIENvbHVtbnM6ICogKipyYW5rOioqIEludGVnZXIgcmFuayBhc3NpZ25lZCB0byBlYWNoIHByZWRpY3RlZCBwcm90ZWluIHRhcmdldCAoMSA9IGhpZ2hlc3QpLiAqICoqc2NvcmU6KiogU2ltaWxhcml0eSBzY29yZSBiZXR3ZWVuIHRoZSBjb21wb3VuZCBhbmQgcHJvdGVpbiB0YXJnZXQuICogKippZDoqKiBVbmlQcm90IGlkZW50aWZpZXIgb2YgdGhlIHByZWRpY3RlZCBwcm90ZWluIHRhcmdldC4gIyMjIyAqKkdvbGQgc3RhbmRhcmQgcmVmZXJlbmNlIGZpbGVzOioqIFRoZXNlIGZpbGVzIGNvbnRhaW4gY3VyYXRlZCBsaXN0cyBvZiBnbGlvbWEtYXNzb2NpYXRlZCBwcm90ZWlucyB1c2VkIGFzIOKAnGdvbGQgc3RhbmRhcmRz4oCdIGZvciBvdmVybGFwIGJlbmNobWFya2luZy4gKiAqKkdvbGRfc3RhbmRhcmRfZnJvbV9UYWJsZV8yLnhsc3gqKiAqICoqR29sZF9zdGFuZGFyZF9mcm9tX1VuaXByb3QueGxzeCoqICogKipHb2xkX3N0YW5kYXJkX2Zyb21fR2VuZWNhcmQueGxzeCoqIENvbHVtbnM6ICogKippZDoqKiBVbmlQcm90IGlkZW50aWZpZXIgb2YgdGhlIGtub3duIGdsaW9tYS1hc3NvY2lhdGVkIHByb3RlaW4uICMjIyMgKipKYWNjYXJkIGNvbXBhcmlzb24gZmlsZToqKiBDb250YWlucyBwcmVjb21wdXRlZCBvdmVybGFwIGFuZCB1bmlvbiB2YWx1ZXMgdXNlZCB0byBjYWxjdWxhdGUgSmFjY2FyZCBjb2VmZmljaWVudHMgYWNyb3NzIGRpc2Vhc2UgaW5kaWNhdGlvbnMuICogKipKQ19jb21wYXJpc29uX2RhdGFfcmFua19sZXExMC54bHN4KiogQ29sdW1uczogKiAqKlRvcCAyNCBPdmVybGFwIC8gVG9wIDI0IFVuaW9uOioqIENvdW50cyBvZiBvdmVybGFwcGluZyBhbmQgdG90YWwgcHJvdGVpbnMgZm9yIHRoZSB0b3AgMjQgcHJlZGljdGlvbnMgcGVyIGluZGljYXRpb24uICogKipUb3AgMTAwIE92ZXJsYXAgLyBUb3AgMTAwIFVuaW9uOioqIENvdW50cyBvZiBvdmVybGFwcGluZyBhbmQgdG90YWwgcHJvdGVpbnMgZm9yIHRoZSB0b3AgMTAwIHByZWRpY3Rpb25zIHBlciBpbmRpY2F0aW9uLiAjIyMgVGFuaW1vdG8uemlwOiBUaGlzIERyeWFkIHBhY2thZ2UgY29udGFpbnMgdGhlIHNjcmlwdHMgYW5kIG91dHB1dHMgdXNlZCB0byBiZW5jaG1hcmsgYSAyRCBsaWdhbmQtc2ltaWxhcml0eSBwaXBlbGluZSB3aXRoaW4gdGhlIENBTkRPIHBsYXRmb3JtLiBJbiB0aGlzIHdvcmtmbG93LCBkcnVn4oCTZHJ1ZyBzaW1pbGFyaXR5IHNjb3JlcyBhcmUgY29tcHV0ZWQgdXNpbmcgdGhlIFRhbmltb3RvIGNvZWZmaWNpZW50IChiYXNlZCBvbiBFQ0ZQNCBjaXJjdWxhciBmaW5nZXJwcmludHMpIHRvIHByb2R1Y2UgYSBjb21wb3VuZOKAk2NvbXBvdW5kIHNpbWlsYXJpdHkgbWF0cml4LCB3aGljaCBpcyB0aGVuIHVzZWQgYXMgaW5wdXQgZm9yIENBTkRPIGJlbmNobWFya2luZyBhY3Jvc3MgYWxsIGluZGljYXRpb25zIGFuZCBmb3IgZ2xpb21hLXNwZWNpZmljIGFuYWx5c2VzLiBUaGUgZGVwb3NpdGVkIGNvZGUgYWxzbyBpbmNsdWRlcyB0aGUgdmFyaWFudCB1c2VkIHRvIHN1cHByZXNzIG5lYXItZHVwbGljYXRlIGFuYWxvZyByZWxhdGlvbnNoaXBzIGFuZCB0aGUgZnVzaW9uIGltcGxlbWVudGF0aW9uIHRoYXQgY29tYmluZXMgbGlnYW5kLSBhbmQgcHJvdGVvbWljLXNpZ25hdHVyZeKAk2Jhc2VkIHNpbWlsYXJpdGllcy4gQ29sbGVjdGl2ZWx5LCB0aGVzZSBmaWxlcyByZXByb2R1Y2UgdGhlIGxpZ2FuZCwgZmlsdGVyZWQtbGlnYW5kLCBhbmQgZnVzaW9uIGJlbmNobWFya2luZyByZXN1bHRzIHJlcG9ydGVkIGFuZCBkaXNjdXNzZWQgaW4gb3VyIG1hbnVzY3JpcHQsIGFuZCBlbmFibGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBwcm90ZW9taWMgcGlwZWxpbmUgdW5kZXIgdGhlIHNhbWUgYmVuY2htYXJraW5nIGZyYW1ld29yay4gIyMjIyBFQ0ZQNF9UYW5pbW90b19tYXRyaXgucHkgUHl0aG9uIHNjcmlwdCB0byBnZW5lcmF0ZSBhbiAqKk54TiBFQ0ZQNC9UYW5pbW90byBzaW1pbGFyaXR5IG1hdHJpeCoqIGZvciB0aGUgYXBwcm92ZWQtZHJ1ZyBsaWJyYXJ5LiAxKSBMb2FkcyBSREtpdCBtb2xlY3VsZXMgZnJvbSBNT0wyIChgQ2hlbS5Nb2xGcm9tTW9sMkZpbGUoLi4uLCBzYW5pdGl6ZT1UcnVlLCByZW1vdmVIcz1UcnVlKWApLiAyKSBDb21wdXRlcyAqKkVDRlA0KiogYXMgYSBNb3JnYW4gZmluZ2VycHJpbnQgKHJhZGl1cz0yKSBiaXQgdmVjdG9yICgyMDQ4IGJpdHMpLiAzKSBDb21wdXRlcyByb3ctd2lzZSBUYW5pbW90byBzaW1pbGFyaXRpZXMgd2l0aCBgRGF0YVN0cnVjdHMuQnVsa1Rhbmltb3RvU2ltaWxhcml0eWAuICoqSW5wdXRzOioqICogQXBwcm92ZWQgZHJ1ZyBsaXN0IChgZHJ1Z2JhbmstdjIuOS1hcHByb3ZlZC50c3ZgKS4gKiBNT0wyIHN0cnVjdHVyZSBkaXJlY3RvcnkgKGZpbGVzIG5hbWVkIGJ5IGBDQU5ET19JRGAsIGUuZy4sIGAxMjM0Lm1vbDJgKS4gKipPdXRwdXRzOioqICogYGVjZnA0X3Rhbmltb3RvX21hdHJpeC50c3ZgICh0YWItZGVsaW1pdGVkLCBubyBoZWFkZXI7IGRpYWdvbmFsIHNldCB0byAxLjApLiAjIyMjIGVjZnA0X3Rhbmltb3RvX21hdHJpeC50c3YgVGhlIHVuZmlsdGVyZWQgRUNGUDQvVGFuaW1vdG8gc2ltaWxhcml0eSBtYXRyaXggZ2VuZXJhdGVkIGJ5IGBFQ0ZQNF9UYW5pbW90b19tYXRyaXgucHlgLiAqKlN0cnVjdHVyZToqKiAqIFNxdWFyZSBOeE4gbWF0cml4IG9mICoqVGFuaW1vdG8gc2ltaWxhcml0eSoqIHZhbHVlcyAoZGlhZ29uYWwgPSAxLjApLiBSb3cvY29sdW1uIG9yZGVyaW5nIG1hdGNoZXMgdGhlIGFwcHJvdmVkLWRydWcgbGlzdCBvcmRlciB1c2VkIGR1cmluZyBtYXRyaXggZ2VuZXJhdGlvbiAoZHJ1Z2JhbmstdjIuOS1hcHByb3ZlZC50c3YpLlwgKipVc2FnZToqKiAqIElucHV0IHRvIENBTkRPIGFzIGEgYHJlYWRfZGlzdHNgIGZpbGUgdG8gYmVuY2htYXJrIHRoZSB1bmZpbHRlcmVkIGxpZ2FuZC1zaW1pbGFyaXR5IHBpcGVsaW5lIChsb2FkZWQgd2l0aCBgc2ltaWxhcml0eT1UcnVlYCkuICMjIyMgRUNGUDRfVGFuaW1vdG9fbWF0cml4X3VuaXF1ZV85OC5weSBQeXRob24gc2NyaXB0IHRvIGdlbmVyYXRlIGEg4oCcdW5pcXVlbmVzcy1maWx0ZXJlZOKAnSBFQ0ZQNC9UYW5pbW90byBzaW1pbGFyaXR5IG1hdHJpeCB3aGVyZSB0aGUgbW9zdCBleHRyZW1lIHNpbWlsYXJpdGllcyAodG9wIDIlIHBlciByb3cpIGFyZSBzdXBwcmVzc2VkIChzZXQgdG8gMCkuwqBDb21wdXRlcyB0aGUgdW5maWx0ZXJlZCBzaW1pbGFyaXR5IHJvdyB3aXRoIGBCdWxrVGFuaW1vdG9TaW1pbGFyaXR5YC7CoEZvciBlYWNoIHF1ZXJ5IGNvbXBvdW5kICppKiwgY29tcHV0ZXMgdGhlICoqOTh0aCBwZXJjZW50aWxlKiogb2Ygc2ltaWxhcml0aWVzIHRvIGFsbCBvdGhlciBjb21wb3VuZHMgKGBucC5xdWFudGlsZSguLi4sIDAuOTgpYCwgZXhjbHVkaW5nIHNlbGYpLCBhbmQgc2V0cyBzaW1pbGFyaXRpZXMg4omlIHRoYXQgY3V0b2ZmIHRvIDAuMCAod2hpbGUga2VlcGluZyBzZWxmLXNpbWlsYXJpdHkgYXQgMS4wKS7CoFwgKipJbnB1dHM6KiogU2FtZSBhcyB0aGUgdW5maWx0ZXJlZCBnZW5lcmF0b3IgKGFwcHJvdmVkIFRTViArIE1PTDIgZGlyZWN0b3J5KS4gXCBcIFwqKk91dHB1dHM6wqAqKiAqIGBlY2ZwNF90YW5pbW90b19tYXRyaXhfdW5pcXVlXzk4LnRzdmAgKHNhbWUgZm9ybWF0IGFzIHRoZSB1bmZpbHRlcmVkIG1hdHJpeCkuICMjIyMgZWNmcDRfdGFuaW1vdG9fbWF0cml4X3VuaXF1ZV85OC50c3YgVGhlICoqZmlsdGVyZWQqKiBFQ0ZQNC9UYW5pbW90byBzaW1pbGFyaXR5IG1hdHJpeCBnZW5lcmF0ZWQgYnkgYEVDRlA0X1Rhbmltb3RvX21hdHJpeF91bmlxdWVfOTgucHlgLCB3aXRoIHBlci1yb3cgc2ltaWxhcml0aWVzIGluIHRoZSAqKuKJpTk4dGggcGVyY2VudGlsZSoqIHNldCB0byAwLjAuICoqVXNhZ2UqKjrCoCAqIElucHV0IHRvIENBTkRPIGFzIGByZWFkX2Rpc3RzYCBmb3IgdGhlICoqVGFuX2ZpbHRlcioqIGxpZ2FuZC1zaW1pbGFyaXR5IGJlbmNobWFyayAodGhlIOKAnG5lYXItZHVwbGljYXRlIGFuYWxvZyBzdXBwcmVzc2lvbuKAnSBjb25kaXRpb24pLiAjIyMjIEVDRlA0X1Rhbmltb3RvX2JlbmNobWFyay5weSBQeXRob24gc2NyaXB0IHRvIHJ1biBDQU5ETyBiZW5jaG1hcmtpbmcgdXNpbmcgYW4gRUNGUDQvVGFuaW1vdG8gYHJlYWRfZGlzdHNgIG1hdHJpeCAodW5maWx0ZXJlZCBvciBmaWx0ZXJlZCkuIEluaXRpYWxpemVzIGEgQ0FORE8gb2JqZWN0IHdpdGggYGNvbXB1dGVfZGlzdGFuY2U9RmFsc2VgLCBsb2FkcyB0aGUgbWF0cml4IHZpYSBgcmVhZF9kaXN0cz0uLi5gLCBhbmQgdHJlYXRzIHZhbHVlcyBhcyBzaW1pbGFyaXRpZXMgKGBzaW1pbGFyaXR5PVRydWVgKS4gXCAqKlVzYWdlOioqICogUHJvZHVjZXMgc2ltaWxhcml0eS1saXN0IGJlbmNobWFya2luZyBtZXRyaWNzIHZpYSBDQU5ET+KAmXMgYmVuY2htYXJraW5nIGZ1bmN0aW9ucyAoZS5nLiwgYGNhbmJlbmNobWFya2AsIGBjYW5iZW5jaG1hcmtfbmRjZ2ApIGFuZCBjYW4gYmUgcGFpcmVkIHdpdGggY29uc2Vuc3VzIGJlbmNobWFya2luZyB2aWEgYGNhbmJlbmNobWFya19uZXdgIGluIGBjYW5kby5weWAuICMjIyMgZGF0YV9mdXNpb25fTVVMLnB5IFB5dGhvbiBzY3JpcHQgaW1wbGVtZW50aW5nIHRoZSAqKmZ1c2lvbiBwaXBlbGluZSoqIHVzZWQgaW4gdGhlIHBhcGVyIChwcm9kdWN0IG9mIHByb3Rlb21pYy0gYW5kIGxpZ2FuZC1kZXJpdmVkIHNpbWlsYXJpdHkgc2lnbmFscykuwqBCdWlsZHMgc2VwYXJhdGUgQ0FORE8gb2JqZWN0cyBmb3IgKDEpIFRhbmltb3RvLCAoMikgcHJvdGVvbWljLXNpZ25hdHVyZSBkaXN0YW5jZXMsIGFuZCAoMykgYSBmdXNlZCBvYmplY3Qgc2VlZGVkIGZyb20gdGhlIFRhbmltb3RvIGByZWFkX2Rpc3RzYC7CoENvbnZlcnQgZGlzdGFuY2VzIHRvIHNpbWlsYXJpdGllczogcyA9IDEgLSBkOyBmdXNlOiBzX2Z1c2VkID0gc190YW4gKiBzX3Byb3Q7IGNvbnZlcnQgYmFjazogZF9mdXNlZCA9IDEgLSBzX2Z1c2VkLlwgKipJbnB1dHM6KiogKiBMaWdhbmQgYHJlYWRfZGlzdHNgIG1hdHJpeCAodW5maWx0ZXJlZCBgZWNmcDRfdGFuaW1vdG9fbWF0cml4LnRzdmApLiAqIFByb3Rlb21pYyBjb21wb3VuZOKAk3Byb3RlaW4gaW50ZXJhY3Rpb24gc2lnbmF0dXJlIG1hdHJpeCAoQ0FORE8gbWF0cml4IGlucHV0LCBzZWUgYWJvdmUpLiAqIERydWcgYW5kIGluZGljYXRpb24gbWFwcGluZyBmaWxlcyAoYENfTUFQYCwgYElfTUFQYCkuICoqT3V0cHV0OioqIEEgZnVzZWQgc2ltaWxhcml0eSBsaXN0IHBlciBjb21wb3VuZCAodXNlZCBmb3IgZG93bnN0cmVhbSBiZW5jaG1hcmtpbmcgaW4gdGhlIHNhbWUgZnJhbWV3b3JrIGFzIHRoZSBjb25zdGl0dWVudCBwaXBlbGluZXMpLiAjIyMjIFRhbmltb3RvX0Rpc3RyaWJ1dGlvbnMueGxzeCBBIHN1bW1hcnkgdGFibGUgb2YgKipiaW5uZWQgcGFpcndpc2UgRUNGUDQvVGFuaW1vdG8gc2ltaWxhcml0aWVzKiogZm9yIHRocmVlIHBvcHVsYXRpb25zOiAqKmFsbC12cy1hbGwqKiwgKipnbGlvbWEtdnMtYWxsKiosIGFuZCAqKmdsaW9tYS12cy1nbGlvbWEqKi4gRm9yIGVhY2ggc2ltaWxhcml0eSBiaW4gKGUuZy4sIDAuMOKAkzAuMSwgMC4x4oCTMC4yLCDigKYpLCB0aGUgc2hlZXQgcmVwb3J0cyB0aGUgKipwcm9wb3J0aW9uKiogYW5kICoqY291bnQqKiBvZiBjb21wb3VuZCBwYWlycyBpbiB0aGF0IGJpbiBmb3IgZWFjaCBwb3B1bGF0aW9uLiBUaGVzZSBkaXN0cmlidXRpb25zIHN1cHBvcnQgaW50ZXJwcmV0YXRpb24gb2YgZ2xpb21hIGJlbmNobWFya2luZyBiZWhhdmlvciBieSBzaG93aW5nIHdoZXRoZXIgZ2xpb21hIGRydWdzIGFyZSByZWxhdGl2ZWx5ICoqbW9yZcKgIHN0cnVjdHVyYWxseSBkaXZlcnNlKiogdGhhbiB0aGUgYnJvYWRlciBsaWJyYXJ5IChpLmUuLCBoaWdoLXNpbWlsYXJpdHkg4oCcYW5hbG9nLWhlYXZ54oCdIHBhaXJzIGFyZSBkZXBsZXRlZCBpbiB0aGUgZ2xpb21h4oCTZ2xpb21hIHBvb2wpLiAjIyMjIEV4cGFuZGVkX0JlbmNobWFya2luZ19yZXN1bHRzLnhsc3ggVGhpcyBmaWxlIGNvbnRhaW5zIGJlbmNobWFya2luZyByZXN1bHRzIGNvbXBhcmluZyBleHBlcmltZW50YWwgQ0FORE8gcGVyZm9ybWFuY2UgYWdhaW5zdCByYW5kb21pemVkIGNvbnRyb2wgZGlzdHJpYnV0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgcmVjb3ZlcnkgbWV0cmljcyBhbmQgcmFua2luZyBjdXRvZmZzLiBJbiByZXNwb25zZSB0byByZXZpZXdlciBmZWVkYmFjaywgd2UgZXhwYW5kZWQgYmVuY2htYXJraW5nIGFuYWx5c2VzIHRvIGluY2x1ZGUgRUNGUDQvVGFuaW1vdG8gbGlnYW5kLXNpbWlsYXJpdHkgYmVuY2htYXJraW5nLCBhIGZpbHRlcmVkIFRhbmltb3RvIHBpcGVsaW5lIHN1cHByZXNzaW5nIG5lYXItZHVwbGljYXRlIGFuYWxvZyByZWxhdGlvbnNoaXBzLCBhbmQgYSBmdXNpb24gYXBwcm9hY2ggaW50ZWdyYXRpbmcgbGlnYW5kLSBhbmQgcHJvdGVvbWljLXNpZ25hdHVyZSBzaW1pbGFyaXRpZXMuIFRvZ2V0aGVyLCB0aGVzZSBhbmFseXNlcyBwcm92aWRlIGJlbmNobWFya2luZyBjb250ZXh0IGJleW9uZCByYW5kb20gY29udHJvbHMgYW5kIGVuYWJsZSBjb21wYXJpc29uIG9mIHByb3Rlb21pYywgbGlnYW5kLWJhc2VkLCBhbmQgY29tYmluZWQgYXBwcm9hY2hlcyB3aXRoaW4gdGhlIHNhbWUgZnJhbWV3b3JrLsKgRXhwYW5kZWRfQmVuY2htYXJraW5nX3Jlc3VsdHMuemlwIGZvbGRlciBjb250YWlucyB0aGUgdW5mb3JtYXR0ZWQgQ1NWIGZvcm1hdCB0aGlzIEV4Y2VsIGZpbGUuICMjIyMgTGljZW5zZSBUaGlzIHByb2plY3QgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFtDQzAgMS4wIFVuaXZlcnNhbCAoUHVibGljIERvbWFpbiBEZWRpY2F0aW9uKV0oaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8pLlwgWW91IG1heSBmcmVlbHkgdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgd29yayB3aXRob3V0IHJlc3RyaWN0aW9uLgogICAgPC9kZXNjcmlwdGlvbj4KICA8L2Rlc2NyaXB0aW9ucz4KPC9yZXNvdXJjZT4=","url":"https://datadryad.org/dataset/doi:10.5061/dryad.g4f4qrg3j","contentUrl":null,"metadataVersion":0,"schemaVersion":"http://datacite.org/schema/kernel-4","source":"mds","isActive":true,"state":"findable","reason":null,"viewCount":6,"viewsOverTime":[{"yearMonth":"2026-05","total":0},{"yearMonth":"2026-09","total":6}],"downloadCount":1,"downloadsOverTime":[{"yearMonth":"2026-05","total":1},{"yearMonth":"2026-09","total":0}],"referenceCount":0,"citationCount":2,"citationsOverTime":[{"year":"2026","total":2}],"partCount":0,"partOfCount":0,"versionCount":0,"versionOfCount":0,"created":"2026-06-02T09:58:35.000Z","registered":"2026-06-02T09:58:36.000Z","published":"2026","updated":"2026-06-02T09:58:36.000Z"},"relationships":{"client":{"data":{"id":"dryad.dryad","type":"clients"}},"provider":{"data":{"id":"dryad","type":"providers"}},"media":{"data":{"id":"10.5061/dryad.g4f4qrg3j","type":"media"}},"references":{"data":[]},"citations":{"data":[{"id":"10.1101/2025.05.19.654757","type":"dois"},{"id":"10.1186/s13321-026-01191-9","type":"dois"}]},"parts":{"data":[]},"partOf":{"data":[]},"versions":{"data":[]},"versionOf":{"data":[]}}}}