Part One
Privacy Protection Laws and Regulations
To highlight the need for more regulation outlining how the United
States Government oversees data management and data sharing, Singer
references the large gap in how the Government addresses several other
areas of consumer protection. For example, when Apple discovered that
laptop batteries could overheat and pose a fire hazard, the Consumer
Protection Safety Commission issued a warning to inform apple users of
potential harm (Singer, 2021). When it was identified that Fitbit
wristbands began to cause skin rashes and blisters, the consumer safety
agency issued a recall of the product to protect consumers (Singer,
2021). Unfortunately, the same level of oversight and protection for
privacy does not currently exist within the United States.
Unlike Federal agencies created to ensure that consumers and citizens
are protected from the harm created by faulty products, such as the
Consumer Protection Bureau and the Consumer Product Safety Commission,
the only regulatory body within the United States Government to address
privacy is the Federal Trade Commission. While the overall purpose of
the Federal Trade Commission is to enforce civil antitrust law and the
promotion of consumer protection, they are woefully under-equipped and
lack the empowerment from robust data protection laws to ensure federal
compliance of data privacy. Compared to the European Union, bound by the
General Data Protection Regulation (GDPR), current regulations within
the United States are not relevant in overseeing data management and
sharing to ensure all data is handled with privacy, fairness, and
accountability. The GDPR was created in 2018 and consists of 99
individual articles that are considered the world’s strongest set of
data protection rules, which enhance how people can access information
about them and limits what organizations can do with personal data
(Burgess, 2020). Unfortunately, the United States doesn’t have a
singular law covering all data types. Instead, it has a mix of rules put
together by the Health Insurance Portability and Accountability Act
(HIPPA), the Fair Credit Reporting Act (FCRA), the Family Educational
Rights and Privacy Act (FERPA), the Gramm-Leach-Bliley Act (GLBA), the
Electronic Communications Privacy Act (ECPA), the Children’s Online
Privacy Protection Rule (COPPA), the Video Privacy Protection Act
(VPPA), and the Federal Trade Commission Act (FTCA) (Klosowski,
2021).
The lack of regulation has reverberating effects on how companies and
organizations handle data. First, there are significant issues with
re-identification from data sets because privacy and anonymity are not
regulatory requirements in data sharing and machine learning (ML) model
creation. Second, most states have yet to establish a current mandate to
inform consumers how their data is used. As a result, companies can use,
share, or sell any data they collect without notifying the consumer of
what they are doing (Klosowski, 2021). The follow-on impact of the lack
of informed consent is that companies can sell information to third
parties that can further sell, aggregate, or share the data, all the
while the individual never provided consent for their information to be
proliferated throughout the public domain. Finally, because there are no
laws requiring nondiscriminatory and unbiased data, models can
frequently create biased and inaccurate systems that result in actual
harm throughout society. Without robust legislation requiring
organizations to be legally bound to manage data ethically, there is a
concrete certainty that models will be created that enable organizations
to prioritize profit or insights over the privacy and anonymity of the
consumer or citizen.
Facial Recognition from Biased Data
To address data privacy issues regarding facial recognition software,
this paper examined the project by Garvie, from 2019. The article
presents vignettes that show common pitfalls from the misuse, bias, and
pitfalls of facial recognition applications. While the report presents
other data ethics concerns, such as informed consent of how our data is
shared and provides examples of general anonymity concerns, the focus is
how law enforcement leverages facial recognition technology from photos
collected when Americans apply for a driver’s license. Unbeknownst to
many citizens, our pictures that were taken when we applied for driver’s
licenses have been used to construct training sets for facial
recognition systems currently employed by the police. When the system is
employed, the possibility exists that it will draw an incorrect
conclusion and attribute a criminal act to an innocent citizen due to a
biased model. Additionally, by the inclusion of these photos into law
enforcement databases, the right to privacy is seriously infringed upon
by the government.
Even though the more obvious danger that can arise from police using
facial recognition software is incorrect conclusions, other hazards
challenge the legitimacy of the software for police use. As previously
identified in this paper, there are significant impacts on particular
groups without regulations to govern how ML systems are created and
employed. The racial bias remains a persistent issue in many facial
recognition systems due to a lack of transparency on what information
created the model. Many technologies provide very high levels of
accuracy in accurately identifying middle-aged white males but suffer to
deliver accurate conclusions with other genders and racial groups. In a
study conducted in 2018 entitled the Gender Shades Project, it was found
that by evaluating facial recognition systems by IBM and Microsoft,
error rates were up to 34% higher for darker-skinned females than for
light-skinned males (Najibi, 2020). By employing facial recognition
systems that fail to achieve an equal level of accuracy across all
groups in the citizenry, negative repercussions to those incorrectly
identified will prove inevitable.
The source of harm in many inaccurate facial recognition systems
comes from a representation bias. Training sets used to create the
models essentially comprise middle-aged white male images. While the
systems are very accurate with the pictures it has been trained to
identify, it does not represent the larger use population (Suresh,
2021). By constructing the training sets using adversarial learning and
counterfactual models as seen in other ML systems to create fair
conclusions regardless of the inclusion of sensitive variables such as
race and gender, facial recognition systems training sets can be
purposefully built to become more equitable and representative of their
use population. Additionally, by performing ethical auditing by
independent sources, facial recognition systems can be held accountable
for methodological biases (Najibi, 2020).
When known bias exists in the training data set for facial
recognition and is leveraged for police use, an Artificial Intelligence
(AI) recommendation system could be employed to ensure outputs do not
negatively impact specific population groups. For example, an AI system
could be trained to identify when it is queried to produce results
below-specified accuracy levels. Whether the error comes from a
representation, learning, or aggregation bias within the data, a system
designed to create an output and audit itself would benefit facial
recognition systems. In practice, the system could be queried to provide
a match from an image while simultaneously assessing the level of
accuracy predicted based on the picture provided. The tool could provide
an alert to ensure human involvement within the decision-making loop
when it has been asked to identify individuals with low-accuracy
predictions. By creating a system that can recognize areas where it
struggles to provide accurate conclusions while taking additional steps
to create more representative training data sets, facial recognition
systems would make more fair conclusions for all groups.
Genomic Privacy
With the proliferation of companies offering genomic sequencing
services to screen for disease and illuminate a family’s genealogy,
privacy concerns have arisen. In The New York Times Privacy Project
tackling this issue, Bala provides numerous examples of the dangers of
enlisting direct-to-consumer genetic sequencing services and the impact
that it can have on the customer’s family. The troubles arise from the
amount of information that can be gathered from one person’s genetic
code. When the saliva sample is provided to the company, the customer
consented to share private health data for not only themselves but their
entire family. In one example, if a parent shares their children’s
genetic information on public websites, parents are forever exposing
their personal health data well before the age of consent (Bala, 2020).
Because of the lack of regulations governing de-identification
practices, an environment exists where genomic privacy is almost
unattainable to those who have opted to share their genetic sequence. In
the example above, it is a certainty that the remainder of the extended
family did not consent to have their genetic code shared when the
parents decided to conduct genetic testing on their child. Not only do
current regulations lack the mandate to adequately de-identify
consumers, but they also fail to enact policies that ensure all persons
identified through testing provide consent.
Bala continues the project by illustrating the negative repercussions
of oversharing children’s personal information. Unfortunately, when
parents share the child’s genetic information, they have taken the right
to privacy away from the child and the right not to know certain
information. Referencing the 1977 Whalen vs. Roe decision, Bale outlines
two critical components of the right to privacy; the individual interest
in avoiding disclosure of personal matters and the interest in
independence in making certain kinds of important decisions (Bale,
2020). While it may be beneficial for a parent to understand if their
children carry hereditary genes linked to disease, the parents have
removed the right to privacy from the child by sharing the genetic
sequence. Furthermore, when a genetic sequence is shared with the
company, information can be gathered on the customer’s entire family,
presenting challenges to informed consent.
The source of harm in the use of companies like 23andMe, MyHeritage,
and GEDmatch does not come from an inherent bias within a model or
database. Instead, it illustrates how a lack of regulation governing the
right to privacy reverberates through generations of citizens. The
United States follows a tradition of allowing parents to make legal
decisions on behalf of their children. However, what happens when no
regulation or law dictates what information a parent can share about
their child? In countries like France and Austria, children can sue
their parents for oversharing personal information. In the United
States, there are no such regulations. Even though the American Academy
of Pediatrics and American College of Medical Genetics and Genomics
strongly discourage home-kit genetic testing on children, the practice
continues. Personal medical information is shared, analyzed, and sold,
forever sharing private information with the world (Bale, 2020).
Part Two
Current State of Regulatory Shortfalls as seen in Sorrell v. IMS
Health
Previously identified in this paper are instances where the need for
regulations within the current United States civil code allows for
companies to behave in their best interest rather than with a priority
placed on data privacy. The privacy lab project that addresses how the
current framework of United States privacy protection laws are at the
discretion of State regulatory agencies curtailed by a patchwork of
National Acts and rules is an evaluation of U.S. Supreme Court Case
Sorrell v. IMS Health Inc. The project explores issues that have arisen
from the HIPAA 1990s styled protection and references how more effort
can be taken from organizations that collect medical information to
still reap benefit from the collected data while protecting the
patient’s privacy (Sweeney, n.d).
The court case presents an argument from Sorrell (the Petitioner)
that IMS Health (the Respondent) fails to properly de-identify patient
information under established Vermont State and Federal HIPAA
regulations. Under Vermont State Law and HIPAA regulations, all patient
data must be sufficiently de-identified before sharing it beyond the
pharmacy that collected the information in the care of the patient
(Sweeney, n.d.). During the hearing, the Petitioner argues that the
de-identification approach used by IMS does not adequately protect the
patient’s identity. Patient data shared by IMS health include the
prescriber’s name and address, the name, dosage, and quantity of the
drug prescribed, the date and location at which the prescription was
filled, and the patient’s age and gender (Sweeney, n.d.). Through modern
practices, re-identification of the patients was possible, and the court
was presented examples where Sweeney was able to accurately identify 20
out of 22 participants in a data set taken from similar information that
IMS Health released (Sweeney, n.d.).
Overall, the case illustrates weak privacy regulations’ impact on
privacy protection. As the monetary value from data analysis and
customer information becomes more valuable, additional rules are
required to ensure customer and patient anonymity while maintaining the
benefit from research. Unfortunately, current HIPAA regulations and U.S.
State guidelines for de-identification have proven to be inadequate in
ensuring that companies conduct data sharing and data sales to third
parties achieving anonymity of the participants in the data set.
Facial Recognition De-Identification Efforts
Part one of this paper presented projects illuminating the harm that
can occur from biased facial recognition systems as the technology gains
acceptance despite its privacy shortfalls. However, facial recognition
systems and video surveillance issues can be solved by employing novel
technologies. To protect the privacy of individuals, images captured in
standard surveillance systems should be de-identified. When coupled with
facial recognition software, a system that fails to de-identify
individuals in a city-wide surveillance system could effectively track
single individuals throughout the coverage area (Newton, 2003). While
the New York Times project in part one describes what could occur from
inaccurate systems, other efforts exist to ensure that uninformed
citizens’ privacy and anonymity are achieved through de-identification
from standard video surveillance practices. The technique presented by
Newton in the data privacy lab project illustrates how facial
recognition systems can continue to be used without infringing on the
right to privacy of the citizenry (Newton, 2003).
In the privacy lab project, Newton makes a point to reiterate the
value of surveillance systems. The systems proposed attempt to enable
the sharing of video data with scientific assurances of privacy
protection while keeping the data practically useful (Newton, 2003). The
project’s goal was to de-identify the facial features to a level where
anonymity is achieved while leaving key defining characteristics while
simultaneously encrypting the image for re-identification purposes.
Previously attempted techniques, such as covering the eyes or altering
pixel colors, failed to adequately protect images from facial
recognition software.
There would be several privacy implications if Newton’s techniques
were widely adopted. First, there is a decreased risk that an individual
could be discriminated against through inaccurate facial recognition
software running against common video surveillance. As presented in part
one of this paper, significant accuracy issues negatively impact
specific groups. Next, when de-identification is conducted before
analysis in facial recognition software systems, another layer of
protection is afforded to the privacy of historically infringed groups.
Finally, citizens are now afforded the right to privacy. When data sets
are shared containing images using Newton’s technique of pre-processing
facial images before the faces are included in a data set, the people in
the data set are safe from re-identification without an encryption key.
The owner of the data set of facial images will now be free to share the
encrypted images without violating participants’ privacy.
Genomic Privacy Protection Efforts
Work by Malin included in the data privacy project aims to illustrate
how current de-identification protocols when anonymizing genomic data
fails to fully protect from re-identification. As previously mentioned
in this paper, medical information is protected using HIPPA regulations.
Still, as seen through previous court cases such as Sorrell v. IMS
Health, those policies are ineffective enough in today’s data-rich
environment where genetic information is readily shared for scientific
and medical benefit. Although advocates of de-identification address the
issue of maintaining privacy with the best intentions when guided only
by HIPPA regulations, they often fail to maintain anonymity, and
participants can be re-identified (Malin, 2003). Additionally, when
following de-identification guidelines, anonymized data can be related
to publicly available information to identify specific individuals
(Braun, 2009).
Malin proves that even when using several known de-identification
methods, re-identification can still be achieved. Through evaluating the
breadth of dangers described in the New York Times Privacy project
showing the hazards from the oversharing of personal genetic
information, it is apparent that further research and regulations are
required to protect individual identities. Not only do researchers need
to establish effective techniques to de-identify genetic information,
but careful consideration should also be taken to determine if
direct-to-consumer genetic services are beneficial enough to warrant the
inherent loss of privacy.
Conclusion
Throughout this paper, several key privacy issues were illustrated by
comparing existing privacy projects from the New York Times against
ongoing academic and scientific efforts to address existing data privacy
issues. As the data economy expands, ensuring individual privacy will
remain a constant hurdle. This paper has shown how the need for a
foundation of privacy and ethical management of identifiable information
will only be achieved through additional regulations governing how data
is protected and secured. Only after those regulations are created that
address current technological advancements will individuals be safe from
re-identification from genomic information and protected from inaccurate
conclusions drawn from biased facial recognition programs.
References
Bala, N. (2020). Why Are You Sharing Your Child’s DNA
Information?. New York Times. Retrieved January 28, 2023 from https://www.nytimes.com/2020/01/02/opinion/dna-test-privacy-children.html
Braun, R., Rowe, W., Schafer, C., Zhang, J., Buetow, K. (2005).
Needles in the Haystack: Identifying Individuals Present in Pooled
Genomic Data. PLos Genetics. Retrieved February 22, 2023 from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2747273/
Burgess, M. (2020). What is the GDPR? The Summary Guide to
Compliance in the UK. Wired. Retrieved February 18, 2023 from https://www.wired.co.uk/article/what-is-gdpr-uk-eu-legislation-compliance-summary-fines-2018
Garvie, C. (2019). You’re In A Police Lineup Right Now. New
York Times. Retrieved January 27, 2023 from https://www.nytimes.com/2019/10/15/opinion/facial-recognition-police.html
Klosowski, T. (2021). The State of Consumer Data Privacy
Protection Laws in the US (Any Why it Matters). Wirecutter.
Retrieved February 15, 2023 from https://www.nytimes.com/wirecutter/blog/state-of-privacy-laws-in-us/
Malin, B. (2003). Why Pseudonyms Don’t Anonymize: A Computational
Re-identification Analysis of Genomic Data Privacy Protection
Systems. Carnegie Melon University. Retrieved January 28, 2023 from
https://dataprivacylab.org/dataprivacy/projects/linkage/lidap-wp19.pdf
Najibi, A. (2020). Racial Discrimination in Face Recognition
Technology. Harvard University. Retrieved February 20, 2023 from https://sitn.hms.harvard.edu/flash/2020/racial-discrimination-in-face-recognition-technology/
Newton, E., Sweeney, L., Malin, B. (2003). Preserving Privacy by
De-Identifying Facial Images. Carnegie Melon University. Retrieved
January 27, 2023 from https://dataprivacylab.org/dataprivacy/projects/video/paper.pdf
Singer, N. (2019). The Government Protects out Food and Cars. Why
Not Our Data?. New York Times. Retrieved January 26, 2023 from https://www.nytimes.com/2019/11/02/sunday-review/data-protection-privacy.html
Suresh, H., Guttag, J. (2021). A Framework for Understanding
Sources of Harm Throughout the Machine Learning Life Cycle.
Massachusetts Institute of Technology. Retrieved February 20, 2023 from
https://ucwv.mrooms3.net/pluginfile.php/1285783/mod_page/content/1/A%20Framework%20for%20Understanding%20Sources%20of%20Harm.pdf
Sweeney, L. (n.d.). Patient Privacy Risks in U.S. Supreme Court
Case Sorrell vs. IMS Health. Privacy Lab Project. Retrieved January
26, from https://dataprivacylab.org/projects/identifiability/pharma2.pdf
LS0tCnRpdGxlOiAiSW1wYWN0cyBGcm9tIFJlZ3VsYXRvcnkgU2hvcnRmYWxscyIKYXV0aG9yOiAiRGF2aWQgQ3VydGlzIFVuaXZlcnN0aXR5IG9mIENoYXJsZXN0b24iCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBkZl9wcmludDogcGFnZWQKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgojIyBJbnRyb2R1Y3Rpb24KCkFzIHRoZSB3b3JsZCBoYXMgdHJhbnNpdGlvbmVkIGludG8gdGhlIGFnZSBvZiBiaWcgZGF0YSwgdGhlIG5lZWQgZm9yIGRhdGEgcHJpdmFjeSBhbmQgZXRoaWNhbCBkYXRhIG1hbmFnZW1lbnQgcHJvY2VzcyBoYXMgaW5jcmVhc2VkLiBVbmZvcnR1bmF0ZWx5LCByZWd1bGF0aW9ucyByZXF1aXJpbmcgZXRoaWNhbCBwcmFjdGljZXMgYW5kIHRoZSBlbXBsb3ltZW50IG9mIHVuYmlhc2VkIG1vZGVscyBoYXZlIHlldCB0byBjYXRjaCB1cC4gV2l0aCBtYW55IG9yZ2FuaXphdGlvbnMgb25seSBib3VuZCB0byBjcmVhdGUgaW5jcmVhc2VkIHByb2ZpdCBmcm9tIHRoZSB1c2Ugb2YgZGF0YSwgbWFueSBldGhpY2FsIHByYWN0aWNlcyB0byBlbnN1cmUgbW9kZWxzIGFyZSB3aXRob3V0IGJpYXMgYXJlIG5vdCBtYW5kYXRvcnkgYnV0IHNpbXBseSBnb29kIHByYWN0aWNlcy4gVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBwYXBlciB3aWxsIHByZXNlbnQgZXRoaWNzIGFuZCBmYWlybmVzcyBpc3N1ZXMgb2YgZGF0YSBwcml2YWN5IGFtb25nIHRocmVlIE5ldyBZb3JrIFRpbWVzIFByaXZhY3kgUHJvamVjdCB0b3BpY3MuIFRoZSBzZWNvbmQgcGFydCBvZiB0aGlzIHBhcGVyIHdpbGwgb3V0bGluZSBjdXJyZW50IGVmZm9ydHMgZnJvbSB0aGUgRGF0YSBQcml2YWN5IExhYiB0byBhZGRyZXNzIHRoZSBpc3N1ZXMgcHJlc2VudGVkIGluIHBhcnQgb25lLiBGaW5hbGx5LCB0aGlzIHBhcGVyIHdpbGwgaWxsdXN0cmF0ZSBob3cgdGhlIGxhY2sgb2YgcmVndWxhdGlvbnMgd2l0aGluIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBkb3duc3RyZWFtIGhhcm0gaW4gc2V2ZXJhbCBjcml0aWNhbCBhcmVhcyBvZiBkYXRhIHVzZSByZWdhcmRpbmcgZmFjaWFsIHJlY29nbml0aW9uIG1vZGVsIGNyZWF0aW9uLCBhbm9ueW1pdHksIGFuZCBpZGVudGl0eSBwcm90ZWN0aW9uIGFuZCBwcm92aWRlIGlucHV0IG9uIGhvdyB0byBlbXBsb3kgQUkgcmVjb21tZW5kYXRpb24gc3lzdGVtcyBjYW4gdGh3YXJ0IHNvbWUgY3VycmVudCBpc3N1ZXMgdW50aWwgbGVnaXNsYXRpb24gY2FuIGNhdGNoIHVwIHRvIGN1cnJlbnQgdGVjaG5vbG9neS4KCiMjIFBhcnQgT25lCgojIyMgUHJpdmFjeSBQcm90ZWN0aW9uIExhd3MgYW5kIFJlZ3VsYXRpb25zCgpUbyBoaWdobGlnaHQgdGhlIG5lZWQgZm9yIG1vcmUgcmVndWxhdGlvbiBvdXRsaW5pbmcgaG93IHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgb3ZlcnNlZXMgZGF0YSBtYW5hZ2VtZW50IGFuZCBkYXRhIHNoYXJpbmcsIFNpbmdlciByZWZlcmVuY2VzIHRoZSBsYXJnZSBnYXAgaW4gaG93IHRoZSBHb3Zlcm5tZW50IGFkZHJlc3NlcyBzZXZlcmFsIG90aGVyIGFyZWFzIG9mIGNvbnN1bWVyIHByb3RlY3Rpb24uIEZvciBleGFtcGxlLCB3aGVuIEFwcGxlIGRpc2NvdmVyZWQgdGhhdCBsYXB0b3AgYmF0dGVyaWVzIGNvdWxkIG92ZXJoZWF0IGFuZCBwb3NlIGEgZmlyZSBoYXphcmQsIHRoZSBDb25zdW1lciBQcm90ZWN0aW9uIFNhZmV0eSBDb21taXNzaW9uIGlzc3VlZCBhIHdhcm5pbmcgdG8gaW5mb3JtIGFwcGxlIHVzZXJzIG9mIHBvdGVudGlhbCBoYXJtIChTaW5nZXIsIDIwMjEpLiBXaGVuIGl0IHdhcyBpZGVudGlmaWVkIHRoYXQgRml0Yml0IHdyaXN0YmFuZHMgYmVnYW4gdG8gY2F1c2Ugc2tpbiByYXNoZXMgYW5kIGJsaXN0ZXJzLCB0aGUgY29uc3VtZXIgc2FmZXR5IGFnZW5jeSBpc3N1ZWQgYSByZWNhbGwgb2YgdGhlIHByb2R1Y3QgdG8gcHJvdGVjdCBjb25zdW1lcnMgKFNpbmdlciwgMjAyMSkuIFVuZm9ydHVuYXRlbHksIHRoZSBzYW1lIGxldmVsIG9mIG92ZXJzaWdodCBhbmQgcHJvdGVjdGlvbiBmb3IgcHJpdmFjeSBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3Qgd2l0aGluIHRoZSBVbml0ZWQgU3RhdGVzLiAKCgpVbmxpa2UgRmVkZXJhbCBhZ2VuY2llcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGF0IGNvbnN1bWVycyBhbmQgY2l0aXplbnMgYXJlIHByb3RlY3RlZCBmcm9tIHRoZSBoYXJtIGNyZWF0ZWQgYnkgZmF1bHR5IHByb2R1Y3RzLCBzdWNoIGFzIHRoZSBDb25zdW1lciBQcm90ZWN0aW9uIEJ1cmVhdSBhbmQgdGhlIENvbnN1bWVyIFByb2R1Y3QgU2FmZXR5IENvbW1pc3Npb24sIHRoZSBvbmx5IHJlZ3VsYXRvcnkgYm9keSB3aXRoaW4gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCB0byBhZGRyZXNzIHByaXZhY3kgaXMgdGhlIEZlZGVyYWwgVHJhZGUgQ29tbWlzc2lvbi4gV2hpbGUgdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGUgRmVkZXJhbCBUcmFkZSBDb21taXNzaW9uIGlzIHRvIGVuZm9yY2UgY2l2aWwgYW50aXRydXN0IGxhdyBhbmQgdGhlIHByb21vdGlvbiBvZiBjb25zdW1lciBwcm90ZWN0aW9uLCB0aGV5IGFyZSB3b2VmdWxseSB1bmRlci1lcXVpcHBlZCBhbmQgbGFjayB0aGUgZW1wb3dlcm1lbnQgZnJvbSByb2J1c3QgZGF0YSBwcm90ZWN0aW9uIGxhd3MgdG8gZW5zdXJlIGZlZGVyYWwgY29tcGxpYW5jZSBvZiBkYXRhIHByaXZhY3kuIENvbXBhcmVkIHRvIHRoZSBFdXJvcGVhbiBVbmlvbiwgYm91bmQgYnkgdGhlIEdlbmVyYWwgRGF0YSBQcm90ZWN0aW9uIFJlZ3VsYXRpb24gKEdEUFIpLCBjdXJyZW50IHJlZ3VsYXRpb25zIHdpdGhpbiB0aGUgVW5pdGVkIFN0YXRlcyBhcmUgbm90IHJlbGV2YW50IGluIG92ZXJzZWVpbmcgZGF0YSBtYW5hZ2VtZW50IGFuZCBzaGFyaW5nIHRvIGVuc3VyZSBhbGwgZGF0YSBpcyBoYW5kbGVkIHdpdGggcHJpdmFjeSwgZmFpcm5lc3MsIGFuZCBhY2NvdW50YWJpbGl0eS4gVGhlIEdEUFIgd2FzIGNyZWF0ZWQgaW4gMjAxOCBhbmQgY29uc2lzdHMgb2YgOTkgaW5kaXZpZHVhbCBhcnRpY2xlcyB0aGF0IGFyZSBjb25zaWRlcmVkIHRoZSB3b3JsZOKAmXMgc3Ryb25nZXN0IHNldCBvZiBkYXRhIHByb3RlY3Rpb24gcnVsZXMsIHdoaWNoIGVuaGFuY2UgaG93IHBlb3BsZSBjYW4gYWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZW0gYW5kIGxpbWl0cyB3aGF0IG9yZ2FuaXphdGlvbnMgY2FuIGRvIHdpdGggcGVyc29uYWwgZGF0YSAoQnVyZ2VzcywgMjAyMCkuIFVuZm9ydHVuYXRlbHksIHRoZSBVbml0ZWQgU3RhdGVzIGRvZXNu4oCZdCBoYXZlIGEgc2luZ3VsYXIgbGF3IGNvdmVyaW5nIGFsbCBkYXRhIHR5cGVzLiBJbnN0ZWFkLCBpdCBoYXMgYSBtaXggb2YgcnVsZXMgcHV0IHRvZ2V0aGVyIGJ5IHRoZSBIZWFsdGggSW5zdXJhbmNlIFBvcnRhYmlsaXR5IGFuZCBBY2NvdW50YWJpbGl0eSBBY3QgKEhJUFBBKSwgdGhlIEZhaXIgQ3JlZGl0IFJlcG9ydGluZyBBY3QgKEZDUkEpLCB0aGUgRmFtaWx5IEVkdWNhdGlvbmFsIFJpZ2h0cyBhbmQgUHJpdmFjeSBBY3QgKEZFUlBBKSwgdGhlIEdyYW1tLUxlYWNoLUJsaWxleSBBY3QgKEdMQkEpLCB0aGUgRWxlY3Ryb25pYyBDb21tdW5pY2F0aW9ucyBQcml2YWN5IEFjdCAoRUNQQSksIHRoZSBDaGlsZHJlbuKAmXMgT25saW5lIFByaXZhY3kgUHJvdGVjdGlvbiBSdWxlIChDT1BQQSksIHRoZSBWaWRlbyBQcml2YWN5IFByb3RlY3Rpb24gQWN0IChWUFBBKSwgYW5kIHRoZSBGZWRlcmFsIFRyYWRlIENvbW1pc3Npb24gQWN0IChGVENBKSAoS2xvc293c2tpLCAyMDIxKS4gIAoKClRoZSBsYWNrIG9mIHJlZ3VsYXRpb24gaGFzIHJldmVyYmVyYXRpbmcgZWZmZWN0cyBvbiBob3cgY29tcGFuaWVzIGFuZCBvcmdhbml6YXRpb25zIGhhbmRsZSBkYXRhLiBGaXJzdCwgdGhlcmUgYXJlIHNpZ25pZmljYW50IGlzc3VlcyB3aXRoIHJlLWlkZW50aWZpY2F0aW9uIGZyb20gZGF0YSBzZXRzIGJlY2F1c2UgcHJpdmFjeSBhbmQgYW5vbnltaXR5IGFyZSBub3QgcmVndWxhdG9yeSByZXF1aXJlbWVudHMgaW4gZGF0YSBzaGFyaW5nIGFuZCBtYWNoaW5lIGxlYXJuaW5nIChNTCkgbW9kZWwgY3JlYXRpb24uIFNlY29uZCwgbW9zdCBzdGF0ZXMgaGF2ZSB5ZXQgdG8gZXN0YWJsaXNoIGEgY3VycmVudCBtYW5kYXRlIHRvIGluZm9ybSBjb25zdW1lcnMgaG93IHRoZWlyIGRhdGEgaXMgdXNlZC4gQXMgYSByZXN1bHQsIGNvbXBhbmllcyBjYW4gdXNlLCBzaGFyZSwgb3Igc2VsbCBhbnkgZGF0YSB0aGV5IGNvbGxlY3Qgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNvbnN1bWVyIG9mIHdoYXQgdGhleSBhcmUgZG9pbmcgKEtsb3Nvd3NraSwgMjAyMSkuIFRoZSBmb2xsb3ctb24gaW1wYWN0IG9mIHRoZSBsYWNrIG9mIGluZm9ybWVkIGNvbnNlbnQgaXMgdGhhdCBjb21wYW5pZXMgY2FuIHNlbGwgaW5mb3JtYXRpb24gdG8gdGhpcmQgcGFydGllcyB0aGF0IGNhbiBmdXJ0aGVyIHNlbGwsIGFnZ3JlZ2F0ZSwgb3Igc2hhcmUgdGhlIGRhdGEsIGFsbCB0aGUgd2hpbGUgdGhlIGluZGl2aWR1YWwgbmV2ZXIgcHJvdmlkZWQgY29uc2VudCBmb3IgdGhlaXIgaW5mb3JtYXRpb24gdG8gYmUgcHJvbGlmZXJhdGVkIHRocm91Z2hvdXQgdGhlIHB1YmxpYyBkb21haW4uIEZpbmFsbHksIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGxhd3MgcmVxdWlyaW5nIG5vbmRpc2NyaW1pbmF0b3J5IGFuZCB1bmJpYXNlZCBkYXRhLCBtb2RlbHMgY2FuIGZyZXF1ZW50bHkgY3JlYXRlIGJpYXNlZCBhbmQgaW5hY2N1cmF0ZSBzeXN0ZW1zIHRoYXQgcmVzdWx0IGluIGFjdHVhbCBoYXJtIHRocm91Z2hvdXQgc29jaWV0eS4gV2l0aG91dCByb2J1c3QgbGVnaXNsYXRpb24gcmVxdWlyaW5nIG9yZ2FuaXphdGlvbnMgdG8gYmUgbGVnYWxseSBib3VuZCB0byBtYW5hZ2UgZGF0YSBldGhpY2FsbHksIHRoZXJlIGlzIGEgY29uY3JldGUgY2VydGFpbnR5IHRoYXQgbW9kZWxzIHdpbGwgYmUgY3JlYXRlZCB0aGF0IGVuYWJsZSBvcmdhbml6YXRpb25zIHRvIHByaW9yaXRpemUgcHJvZml0IG9yIGluc2lnaHRzIG92ZXIgdGhlIHByaXZhY3kgYW5kIGFub255bWl0eSBvZiB0aGUgY29uc3VtZXIgb3IgY2l0aXplbi4KCiMjIyBGYWNpYWwgUmVjb2duaXRpb24gZnJvbSBCaWFzZWQgRGF0YQoKVG8gYWRkcmVzcyBkYXRhIHByaXZhY3kgaXNzdWVzIHJlZ2FyZGluZyBmYWNpYWwgcmVjb2duaXRpb24gc29mdHdhcmUsIHRoaXMgcGFwZXIgZXhhbWluZWQgdGhlIHByb2plY3QgYnkgR2FydmllLCBmcm9tIDIwMTkuIFRoZSBhcnRpY2xlIHByZXNlbnRzIHZpZ25ldHRlcyB0aGF0IHNob3cgY29tbW9uIHBpdGZhbGxzIGZyb20gdGhlIG1pc3VzZSwgYmlhcywgYW5kIHBpdGZhbGxzIG9mIGZhY2lhbCByZWNvZ25pdGlvbiBhcHBsaWNhdGlvbnMuIFdoaWxlIHRoZSByZXBvcnQgcHJlc2VudHMgb3RoZXIgZGF0YSBldGhpY3MgY29uY2VybnMsIHN1Y2ggYXMgaW5mb3JtZWQgY29uc2VudCBvZiBob3cgb3VyIGRhdGEgaXMgc2hhcmVkIGFuZCBwcm92aWRlcyBleGFtcGxlcyBvZiBnZW5lcmFsIGFub255bWl0eSBjb25jZXJucywgdGhlIGZvY3VzIGlzIGhvdyBsYXcgZW5mb3JjZW1lbnQgbGV2ZXJhZ2VzIGZhY2lhbCByZWNvZ25pdGlvbiB0ZWNobm9sb2d5IGZyb20gcGhvdG9zIGNvbGxlY3RlZCB3aGVuIEFtZXJpY2FucyBhcHBseSBmb3IgYSBkcml2ZXLigJlzIGxpY2Vuc2UuIFVuYmVrbm93bnN0IHRvIG1hbnkgY2l0aXplbnMsIG91ciBwaWN0dXJlcyB0aGF0IHdlcmUgdGFrZW4gd2hlbiB3ZSBhcHBsaWVkIGZvciBkcml2ZXLigJlzIGxpY2Vuc2VzIGhhdmUgYmVlbiB1c2VkIHRvIGNvbnN0cnVjdCB0cmFpbmluZyBzZXRzIGZvciBmYWNpYWwgcmVjb2duaXRpb24gc3lzdGVtcyBjdXJyZW50bHkgZW1wbG95ZWQgYnkgdGhlIHBvbGljZS4gV2hlbiB0aGUgc3lzdGVtIGlzIGVtcGxveWVkLCB0aGUgcG9zc2liaWxpdHkgZXhpc3RzIHRoYXQgaXQgd2lsbCBkcmF3IGFuIGluY29ycmVjdCBjb25jbHVzaW9uIGFuZCBhdHRyaWJ1dGUgYSBjcmltaW5hbCBhY3QgdG8gYW4gaW5ub2NlbnQgY2l0aXplbiBkdWUgdG8gYSBiaWFzZWQgbW9kZWwuIEFkZGl0aW9uYWxseSwgYnkgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSBwaG90b3MgaW50byBsYXcgZW5mb3JjZW1lbnQgZGF0YWJhc2VzLCB0aGUgcmlnaHQgdG8gcHJpdmFjeSBpcyBzZXJpb3VzbHkgaW5mcmluZ2VkIHVwb24gYnkgdGhlIGdvdmVybm1lbnQuICAKCkV2ZW4gdGhvdWdoIHRoZSBtb3JlIG9idmlvdXMgZGFuZ2VyIHRoYXQgY2FuIGFyaXNlIGZyb20gcG9saWNlIHVzaW5nIGZhY2lhbCByZWNvZ25pdGlvbiBzb2Z0d2FyZSBpcyBpbmNvcnJlY3QgY29uY2x1c2lvbnMsIG90aGVyIGhhemFyZHMgY2hhbGxlbmdlIHRoZSBsZWdpdGltYWN5IG9mIHRoZSBzb2Z0d2FyZSBmb3IgcG9saWNlIHVzZS4gQXMgcHJldmlvdXNseSBpZGVudGlmaWVkIGluIHRoaXMgcGFwZXIsIHRoZXJlIGFyZSBzaWduaWZpY2FudCBpbXBhY3RzIG9uIHBhcnRpY3VsYXIgZ3JvdXBzIHdpdGhvdXQgcmVndWxhdGlvbnMgdG8gZ292ZXJuIGhvdyBNTCBzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBlbXBsb3llZC4gVGhlIHJhY2lhbCBiaWFzIHJlbWFpbnMgYSBwZXJzaXN0ZW50IGlzc3VlIGluIG1hbnkgZmFjaWFsIHJlY29nbml0aW9uIHN5c3RlbXMgZHVlIHRvIGEgbGFjayBvZiB0cmFuc3BhcmVuY3kgb24gd2hhdCBpbmZvcm1hdGlvbiBjcmVhdGVkIHRoZSBtb2RlbC4gTWFueSB0ZWNobm9sb2dpZXMgcHJvdmlkZSB2ZXJ5IGhpZ2ggbGV2ZWxzIG9mIGFjY3VyYWN5IGluIGFjY3VyYXRlbHkgaWRlbnRpZnlpbmcgbWlkZGxlLWFnZWQgd2hpdGUgbWFsZXMgYnV0IHN1ZmZlciB0byBkZWxpdmVyIGFjY3VyYXRlIGNvbmNsdXNpb25zIHdpdGggb3RoZXIgZ2VuZGVycyBhbmQgcmFjaWFsIGdyb3Vwcy4gSW4gYSBzdHVkeSBjb25kdWN0ZWQgaW4gMjAxOCBlbnRpdGxlZCB0aGUgR2VuZGVyIFNoYWRlcyBQcm9qZWN0LCBpdCB3YXMgZm91bmQgdGhhdCBieSBldmFsdWF0aW5nIGZhY2lhbCByZWNvZ25pdGlvbiBzeXN0ZW1zIGJ5IElCTSBhbmQgTWljcm9zb2Z0LCBlcnJvciByYXRlcyB3ZXJlIHVwIHRvIDM0JSBoaWdoZXIgZm9yIGRhcmtlci1za2lubmVkIGZlbWFsZXMgdGhhbiBmb3IgbGlnaHQtc2tpbm5lZCBtYWxlcyAoTmFqaWJpLCAyMDIwKS4gQnkgZW1wbG95aW5nIGZhY2lhbCByZWNvZ25pdGlvbiBzeXN0ZW1zIHRoYXQgZmFpbCB0byBhY2hpZXZlIGFuIGVxdWFsIGxldmVsIG9mIGFjY3VyYWN5IGFjcm9zcyBhbGwgZ3JvdXBzIGluIHRoZSBjaXRpemVucnksIG5lZ2F0aXZlIHJlcGVyY3Vzc2lvbnMgdG8gdGhvc2UgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCB3aWxsIHByb3ZlIGluZXZpdGFibGUuCgpUaGUgc291cmNlIG9mIGhhcm0gaW4gbWFueSBpbmFjY3VyYXRlIGZhY2lhbCByZWNvZ25pdGlvbiBzeXN0ZW1zIGNvbWVzIGZyb20gYSByZXByZXNlbnRhdGlvbiBiaWFzLiBUcmFpbmluZyBzZXRzIHVzZWQgdG8gY3JlYXRlIHRoZSBtb2RlbHMgZXNzZW50aWFsbHkgY29tcHJpc2UgbWlkZGxlLWFnZWQgd2hpdGUgbWFsZSBpbWFnZXMuIFdoaWxlIHRoZSBzeXN0ZW1zIGFyZSB2ZXJ5IGFjY3VyYXRlIHdpdGggdGhlIHBpY3R1cmVzIGl0IGhhcyBiZWVuIHRyYWluZWQgdG8gaWRlbnRpZnksIGl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgbGFyZ2VyIHVzZSBwb3B1bGF0aW9uIChTdXJlc2gsIDIwMjEpLiBCeSBjb25zdHJ1Y3RpbmcgdGhlIHRyYWluaW5nIHNldHMgdXNpbmcgYWR2ZXJzYXJpYWwgbGVhcm5pbmcgYW5kIGNvdW50ZXJmYWN0dWFsIG1vZGVscyBhcyBzZWVuIGluIG90aGVyIE1MIHN5c3RlbXMgdG8gY3JlYXRlIGZhaXIgY29uY2x1c2lvbnMgcmVnYXJkbGVzcyBvZiB0aGUgaW5jbHVzaW9uIG9mIHNlbnNpdGl2ZSB2YXJpYWJsZXMgc3VjaCBhcyByYWNlIGFuZCBnZW5kZXIsIGZhY2lhbCByZWNvZ25pdGlvbiBzeXN0ZW1zIHRyYWluaW5nIHNldHMgY2FuIGJlIHB1cnBvc2VmdWxseSBidWlsdCB0byBiZWNvbWUgbW9yZSBlcXVpdGFibGUgYW5kIHJlcHJlc2VudGF0aXZlIG9mIHRoZWlyIHVzZSBwb3B1bGF0aW9uLiBBZGRpdGlvbmFsbHksIGJ5IHBlcmZvcm1pbmcgZXRoaWNhbCBhdWRpdGluZyBieSBpbmRlcGVuZGVudCBzb3VyY2VzLCBmYWNpYWwgcmVjb2duaXRpb24gc3lzdGVtcyBjYW4gYmUgaGVsZCBhY2NvdW50YWJsZSBmb3IgbWV0aG9kb2xvZ2ljYWwgYmlhc2VzIChOYWppYmksIDIwMjApLgoKV2hlbiBrbm93biBiaWFzIGV4aXN0cyBpbiB0aGUgdHJhaW5pbmcgZGF0YSBzZXQgZm9yIGZhY2lhbCByZWNvZ25pdGlvbiBhbmQgaXMgbGV2ZXJhZ2VkIGZvciBwb2xpY2UgdXNlLCBhbiBBcnRpZmljaWFsIEludGVsbGlnZW5jZSAoQUkpIHJlY29tbWVuZGF0aW9uIHN5c3RlbSBjb3VsZCBiZSBlbXBsb3llZCB0byBlbnN1cmUgb3V0cHV0cyBkbyBub3QgbmVnYXRpdmVseSBpbXBhY3Qgc3BlY2lmaWMgcG9wdWxhdGlvbiBncm91cHMuIEZvciBleGFtcGxlLCBhbiBBSSBzeXN0ZW0gY291bGQgYmUgdHJhaW5lZCB0byBpZGVudGlmeSB3aGVuIGl0IGlzIHF1ZXJpZWQgdG8gcHJvZHVjZSByZXN1bHRzIGJlbG93LXNwZWNpZmllZCBhY2N1cmFjeSBsZXZlbHMuIFdoZXRoZXIgdGhlIGVycm9yIGNvbWVzIGZyb20gYSByZXByZXNlbnRhdGlvbiwgbGVhcm5pbmcsIG9yIGFnZ3JlZ2F0aW9uIGJpYXMgd2l0aGluIHRoZSBkYXRhLCBhIHN5c3RlbSBkZXNpZ25lZCB0byBjcmVhdGUgYW4gb3V0cHV0IGFuZCBhdWRpdCBpdHNlbGYgd291bGQgYmVuZWZpdCBmYWNpYWwgcmVjb2duaXRpb24gc3lzdGVtcy4gSW4gcHJhY3RpY2UsIHRoZSBzeXN0ZW0gY291bGQgYmUgcXVlcmllZCB0byBwcm92aWRlIGEgbWF0Y2ggZnJvbSBhbiBpbWFnZSB3aGlsZSBzaW11bHRhbmVvdXNseSBhc3Nlc3NpbmcgdGhlIGxldmVsIG9mIGFjY3VyYWN5IHByZWRpY3RlZCBiYXNlZCBvbiB0aGUgcGljdHVyZSBwcm92aWRlZC4gVGhlIHRvb2wgY291bGQgcHJvdmlkZSBhbiBhbGVydCB0byBlbnN1cmUgaHVtYW4gaW52b2x2ZW1lbnQgd2l0aGluIHRoZSBkZWNpc2lvbi1tYWtpbmcgbG9vcCB3aGVuIGl0IGhhcyBiZWVuIGFza2VkIHRvIGlkZW50aWZ5IGluZGl2aWR1YWxzIHdpdGggbG93LWFjY3VyYWN5IHByZWRpY3Rpb25zLiBCeSBjcmVhdGluZyBhIHN5c3RlbSB0aGF0IGNhbiByZWNvZ25pemUgYXJlYXMgd2hlcmUgaXQgc3RydWdnbGVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgY29uY2x1c2lvbnMgd2hpbGUgdGFraW5nIGFkZGl0aW9uYWwgc3RlcHMgdG8gY3JlYXRlIG1vcmUgcmVwcmVzZW50YXRpdmUgdHJhaW5pbmcgZGF0YSBzZXRzLCBmYWNpYWwgcmVjb2duaXRpb24gc3lzdGVtcyB3b3VsZCBtYWtlIG1vcmUgZmFpciBjb25jbHVzaW9ucyBmb3IgYWxsIGdyb3Vwcy4gCgojIyMgR2Vub21pYyBQcml2YWN5CgpXaXRoIHRoZSBwcm9saWZlcmF0aW9uIG9mIGNvbXBhbmllcyBvZmZlcmluZyBnZW5vbWljIHNlcXVlbmNpbmcgc2VydmljZXMgdG8gc2NyZWVuIGZvciBkaXNlYXNlIGFuZCBpbGx1bWluYXRlIGEgZmFtaWx54oCZcyBnZW5lYWxvZ3ksIHByaXZhY3kgY29uY2VybnMgaGF2ZSBhcmlzZW4uIEluIFRoZSBOZXcgWW9yayBUaW1lcyBQcml2YWN5IFByb2plY3QgdGFja2xpbmcgdGhpcyBpc3N1ZSwgQmFsYSBwcm92aWRlcyBudW1lcm91cyBleGFtcGxlcyBvZiB0aGUgZGFuZ2VycyBvZiBlbmxpc3RpbmcgZGlyZWN0LXRvLWNvbnN1bWVyIGdlbmV0aWMgc2VxdWVuY2luZyBzZXJ2aWNlcyBhbmQgdGhlIGltcGFjdCB0aGF0IGl0IGNhbiBoYXZlIG9uIHRoZSBjdXN0b21lcuKAmXMgZmFtaWx5LiBUaGUgdHJvdWJsZXMgYXJpc2UgZnJvbSB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGdhdGhlcmVkIGZyb20gb25lIHBlcnNvbuKAmXMgZ2VuZXRpYyBjb2RlLiBXaGVuIHRoZSBzYWxpdmEgc2FtcGxlIGlzIHByb3ZpZGVkIHRvIHRoZSBjb21wYW55LCB0aGUgY3VzdG9tZXIgY29uc2VudGVkIHRvIHNoYXJlIHByaXZhdGUgaGVhbHRoIGRhdGEgZm9yIG5vdCBvbmx5IHRoZW1zZWx2ZXMgYnV0IHRoZWlyIGVudGlyZSBmYW1pbHkuIEluIG9uZSBleGFtcGxlLCBpZiBhIHBhcmVudCBzaGFyZXMgdGhlaXIgY2hpbGRyZW7igJlzIGdlbmV0aWMgaW5mb3JtYXRpb24gb24gcHVibGljIHdlYnNpdGVzLCBwYXJlbnRzIGFyZSBmb3JldmVyIGV4cG9zaW5nIHRoZWlyIHBlcnNvbmFsIGhlYWx0aCBkYXRhIHdlbGwgYmVmb3JlIHRoZSBhZ2Ugb2YgY29uc2VudCAoQmFsYSwgMjAyMCkuIEJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgcmVndWxhdGlvbnMgZ292ZXJuaW5nIGRlLWlkZW50aWZpY2F0aW9uIHByYWN0aWNlcywgYW4gZW52aXJvbm1lbnQgZXhpc3RzIHdoZXJlIGdlbm9taWMgcHJpdmFjeSBpcyBhbG1vc3QgdW5hdHRhaW5hYmxlIHRvIHRob3NlIHdobyBoYXZlIG9wdGVkIHRvIHNoYXJlIHRoZWlyIGdlbmV0aWMgc2VxdWVuY2UuIEluIHRoZSBleGFtcGxlIGFib3ZlLCBpdCBpcyBhIGNlcnRhaW50eSB0aGF0IHRoZSByZW1haW5kZXIgb2YgdGhlIGV4dGVuZGVkIGZhbWlseSBkaWQgbm90IGNvbnNlbnQgdG8gaGF2ZSB0aGVpciBnZW5ldGljIGNvZGUgc2hhcmVkIHdoZW4gdGhlIHBhcmVudHMgZGVjaWRlZCB0byBjb25kdWN0IGdlbmV0aWMgdGVzdGluZyBvbiB0aGVpciBjaGlsZC4gTm90IG9ubHkgZG8gY3VycmVudCByZWd1bGF0aW9ucyBsYWNrIHRoZSBtYW5kYXRlIHRvIGFkZXF1YXRlbHkgZGUtaWRlbnRpZnkgY29uc3VtZXJzLCBidXQgdGhleSBhbHNvIGZhaWwgdG8gZW5hY3QgcG9saWNpZXMgdGhhdCBlbnN1cmUgYWxsIHBlcnNvbnMgaWRlbnRpZmllZCB0aHJvdWdoIHRlc3RpbmcgcHJvdmlkZSBjb25zZW50LgoKQmFsYSBjb250aW51ZXMgdGhlIHByb2plY3QgYnkgaWxsdXN0cmF0aW5nIHRoZSBuZWdhdGl2ZSByZXBlcmN1c3Npb25zIG9mIG92ZXJzaGFyaW5nIGNoaWxkcmVuJ3MgcGVyc29uYWwgaW5mb3JtYXRpb24uIFVuZm9ydHVuYXRlbHksIHdoZW4gcGFyZW50cyBzaGFyZSB0aGUgY2hpbGQncyBnZW5ldGljIGluZm9ybWF0aW9uLCB0aGV5IGhhdmUgdGFrZW4gdGhlIHJpZ2h0IHRvIHByaXZhY3kgYXdheSBmcm9tIHRoZSBjaGlsZCBhbmQgdGhlIHJpZ2h0IG5vdCB0byBrbm93IGNlcnRhaW4gaW5mb3JtYXRpb24uIFJlZmVyZW5jaW5nIHRoZSAxOTc3IFdoYWxlbiB2cy4gUm9lIGRlY2lzaW9uLCBCYWxlIG91dGxpbmVzIHR3byBjcml0aWNhbCBjb21wb25lbnRzIG9mIHRoZSByaWdodCB0byBwcml2YWN5OyB0aGUgaW5kaXZpZHVhbCBpbnRlcmVzdCBpbiBhdm9pZGluZyBkaXNjbG9zdXJlIG9mIHBlcnNvbmFsIG1hdHRlcnMgYW5kIHRoZSBpbnRlcmVzdCBpbiBpbmRlcGVuZGVuY2UgaW4gbWFraW5nIGNlcnRhaW4ga2luZHMgb2YgaW1wb3J0YW50IGRlY2lzaW9ucyAoQmFsZSwgMjAyMCkuIFdoaWxlIGl0IG1heSBiZSBiZW5lZmljaWFsIGZvciBhIHBhcmVudCB0byB1bmRlcnN0YW5kIGlmIHRoZWlyIGNoaWxkcmVuIGNhcnJ5IGhlcmVkaXRhcnkgZ2VuZXMgbGlua2VkIHRvIGRpc2Vhc2UsIHRoZSBwYXJlbnRzIGhhdmUgcmVtb3ZlZCB0aGUgcmlnaHQgdG8gcHJpdmFjeSBmcm9tIHRoZSBjaGlsZCBieSBzaGFyaW5nIHRoZSBnZW5ldGljIHNlcXVlbmNlLiBGdXJ0aGVybW9yZSwgd2hlbiBhIGdlbmV0aWMgc2VxdWVuY2UgaXMgc2hhcmVkIHdpdGggdGhlIGNvbXBhbnksIGluZm9ybWF0aW9uIGNhbiBiZSBnYXRoZXJlZCBvbiB0aGUgY3VzdG9tZXIncyBlbnRpcmUgZmFtaWx5LCBwcmVzZW50aW5nIGNoYWxsZW5nZXMgdG8gaW5mb3JtZWQgY29uc2VudC4gIAoKVGhlIHNvdXJjZSBvZiBoYXJtIGluIHRoZSB1c2Ugb2YgY29tcGFuaWVzIGxpa2UgMjNhbmRNZSwgTXlIZXJpdGFnZSwgYW5kIEdFRG1hdGNoIGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpbmhlcmVudCBiaWFzIHdpdGhpbiBhIG1vZGVsIG9yIGRhdGFiYXNlLiBJbnN0ZWFkLCBpdCBpbGx1c3RyYXRlcyBob3cgYSBsYWNrIG9mIHJlZ3VsYXRpb24gZ292ZXJuaW5nIHRoZSByaWdodCB0byBwcml2YWN5IHJldmVyYmVyYXRlcyB0aHJvdWdoIGdlbmVyYXRpb25zIG9mIGNpdGl6ZW5zLiBUaGUgVW5pdGVkIFN0YXRlcyBmb2xsb3dzIGEgdHJhZGl0aW9uIG9mIGFsbG93aW5nIHBhcmVudHMgdG8gbWFrZSBsZWdhbCBkZWNpc2lvbnMgb24gYmVoYWxmIG9mIHRoZWlyIGNoaWxkcmVuLiBIb3dldmVyLCB3aGF0IGhhcHBlbnMgd2hlbiBubyByZWd1bGF0aW9uIG9yIGxhdyBkaWN0YXRlcyB3aGF0IGluZm9ybWF0aW9uIGEgcGFyZW50IGNhbiBzaGFyZSBhYm91dCB0aGVpciBjaGlsZD8gSW4gY291bnRyaWVzIGxpa2UgRnJhbmNlIGFuZCBBdXN0cmlhLCBjaGlsZHJlbiBjYW4gc3VlIHRoZWlyIHBhcmVudHMgZm9yIG92ZXJzaGFyaW5nIHBlcnNvbmFsIGluZm9ybWF0aW9uLiBJbiB0aGUgVW5pdGVkIFN0YXRlcywgdGhlcmUgYXJlIG5vIHN1Y2ggcmVndWxhdGlvbnMuIEV2ZW4gdGhvdWdoIHRoZSBBbWVyaWNhbiBBY2FkZW15IG9mIFBlZGlhdHJpY3MgYW5kIEFtZXJpY2FuIENvbGxlZ2Ugb2YgTWVkaWNhbCBHZW5ldGljcyBhbmQgR2Vub21pY3Mgc3Ryb25nbHkgZGlzY291cmFnZSBob21lLWtpdCBnZW5ldGljIHRlc3Rpbmcgb24gY2hpbGRyZW4sIHRoZSBwcmFjdGljZSBjb250aW51ZXMuIFBlcnNvbmFsIG1lZGljYWwgaW5mb3JtYXRpb24gaXMgc2hhcmVkLCBhbmFseXplZCwgYW5kIHNvbGQsIGZvcmV2ZXIgc2hhcmluZyBwcml2YXRlIGluZm9ybWF0aW9uIHdpdGggdGhlIHdvcmxkIChCYWxlLCAyMDIwKS4KCiMjIFBhcnQgVHdvCgojIyMgQ3VycmVudCBTdGF0ZSBvZiBSZWd1bGF0b3J5IFNob3J0ZmFsbHMgYXMgc2VlbiBpbiBTb3JyZWxsIHYuIElNUyBIZWFsdGgKClByZXZpb3VzbHkgaWRlbnRpZmllZCBpbiB0aGlzIHBhcGVyIGFyZSBpbnN0YW5jZXMgd2hlcmUgdGhlIG5lZWQgZm9yIHJlZ3VsYXRpb25zIHdpdGhpbiB0aGUgY3VycmVudCBVbml0ZWQgU3RhdGVzIGNpdmlsIGNvZGUgYWxsb3dzIGZvciBjb21wYW5pZXMgdG8gYmVoYXZlIGluIHRoZWlyIGJlc3QgaW50ZXJlc3QgcmF0aGVyIHRoYW4gd2l0aCBhIHByaW9yaXR5IHBsYWNlZCBvbiBkYXRhIHByaXZhY3kuIFRoZSBwcml2YWN5IGxhYiBwcm9qZWN0IHRoYXQgYWRkcmVzc2VzIGhvdyB0aGUgY3VycmVudCBmcmFtZXdvcmsgb2YgVW5pdGVkIFN0YXRlcyBwcml2YWN5IHByb3RlY3Rpb24gbGF3cyBhcmUgYXQgdGhlIGRpc2NyZXRpb24gb2YgU3RhdGUgcmVndWxhdG9yeSBhZ2VuY2llcyBjdXJ0YWlsZWQgYnkgYSBwYXRjaHdvcmsgb2YgTmF0aW9uYWwgQWN0cyBhbmQgcnVsZXMgaXMgYW4gZXZhbHVhdGlvbiBvZiBVLlMuIFN1cHJlbWUgQ291cnQgQ2FzZSBTb3JyZWxsIHYuIElNUyBIZWFsdGggSW5jLiBUaGUgcHJvamVjdCBleHBsb3JlcyBpc3N1ZXMgdGhhdCBoYXZlIGFyaXNlbiBmcm9tIHRoZSBISVBBQSAxOTkwcyBzdHlsZWQgcHJvdGVjdGlvbiBhbmQgcmVmZXJlbmNlcyBob3cgbW9yZSBlZmZvcnQgY2FuIGJlIHRha2VuIGZyb20gb3JnYW5pemF0aW9ucyB0aGF0IGNvbGxlY3QgbWVkaWNhbCBpbmZvcm1hdGlvbiB0byBzdGlsbCByZWFwIGJlbmVmaXQgZnJvbSB0aGUgY29sbGVjdGVkIGRhdGEgd2hpbGUgcHJvdGVjdGluZyB0aGUgcGF0aWVudOKAmXMgcHJpdmFjeSAoU3dlZW5leSwgbi5kKS4gIAoKVGhlIGNvdXJ0IGNhc2UgcHJlc2VudHMgYW4gYXJndW1lbnQgZnJvbSBTb3JyZWxsICh0aGUgUGV0aXRpb25lcikgdGhhdCBJTVMgSGVhbHRoICh0aGUgUmVzcG9uZGVudCkgZmFpbHMgdG8gcHJvcGVybHkgZGUtaWRlbnRpZnkgcGF0aWVudCBpbmZvcm1hdGlvbiB1bmRlciBlc3RhYmxpc2hlZCBWZXJtb250IFN0YXRlIGFuZCBGZWRlcmFsIEhJUEFBIHJlZ3VsYXRpb25zLiBVbmRlciBWZXJtb250IFN0YXRlIExhdyBhbmQgSElQQUEgcmVndWxhdGlvbnMsIGFsbCBwYXRpZW50IGRhdGEgbXVzdCBiZSBzdWZmaWNpZW50bHkgZGUtaWRlbnRpZmllZCBiZWZvcmUgc2hhcmluZyBpdCBiZXlvbmQgdGhlIHBoYXJtYWN5IHRoYXQgY29sbGVjdGVkIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgY2FyZSBvZiB0aGUgcGF0aWVudCAoU3dlZW5leSwgbi5kLikuIER1cmluZyB0aGUgaGVhcmluZywgdGhlIFBldGl0aW9uZXIgYXJndWVzIHRoYXQgdGhlIGRlLWlkZW50aWZpY2F0aW9uIGFwcHJvYWNoIHVzZWQgYnkgSU1TIGRvZXMgbm90IGFkZXF1YXRlbHkgcHJvdGVjdCB0aGUgcGF0aWVudCdzIGlkZW50aXR5LiBQYXRpZW50IGRhdGEgc2hhcmVkIGJ5IElNUyBoZWFsdGggaW5jbHVkZSB0aGUgcHJlc2NyaWJlcidzIG5hbWUgYW5kIGFkZHJlc3MsIHRoZSBuYW1lLCBkb3NhZ2UsIGFuZCBxdWFudGl0eSBvZiB0aGUgZHJ1ZyBwcmVzY3JpYmVkLCB0aGUgZGF0ZSBhbmQgbG9jYXRpb24gYXQgd2hpY2ggdGhlIHByZXNjcmlwdGlvbiB3YXMgZmlsbGVkLCBhbmQgdGhlIHBhdGllbnQncyBhZ2UgYW5kIGdlbmRlciAoU3dlZW5leSwgbi5kLikuIFRocm91Z2ggbW9kZXJuIHByYWN0aWNlcywgcmUtaWRlbnRpZmljYXRpb24gb2YgdGhlIHBhdGllbnRzIHdhcyBwb3NzaWJsZSwgYW5kIHRoZSBjb3VydCB3YXMgcHJlc2VudGVkIGV4YW1wbGVzIHdoZXJlIFN3ZWVuZXkgd2FzIGFibGUgdG8gYWNjdXJhdGVseSBpZGVudGlmeSAyMCBvdXQgb2YgMjIgcGFydGljaXBhbnRzIGluIGEgZGF0YSBzZXQgdGFrZW4gZnJvbSBzaW1pbGFyIGluZm9ybWF0aW9uIHRoYXQgSU1TIEhlYWx0aCByZWxlYXNlZCAoU3dlZW5leSwgbi5kLikuCgpPdmVyYWxsLCB0aGUgY2FzZSBpbGx1c3RyYXRlcyB3ZWFrIHByaXZhY3kgcmVndWxhdGlvbnMnIGltcGFjdCBvbiBwcml2YWN5IHByb3RlY3Rpb24uIEFzIHRoZSBtb25ldGFyeSB2YWx1ZSBmcm9tIGRhdGEgYW5hbHlzaXMgYW5kIGN1c3RvbWVyIGluZm9ybWF0aW9uIGJlY29tZXMgbW9yZSB2YWx1YWJsZSwgYWRkaXRpb25hbCBydWxlcyBhcmUgcmVxdWlyZWQgdG8gZW5zdXJlIGN1c3RvbWVyIGFuZCBwYXRpZW50IGFub255bWl0eSB3aGlsZSBtYWludGFpbmluZyB0aGUgYmVuZWZpdCBmcm9tIHJlc2VhcmNoLiBVbmZvcnR1bmF0ZWx5LCBjdXJyZW50IEhJUEFBIHJlZ3VsYXRpb25zIGFuZCBVLlMuIFN0YXRlIGd1aWRlbGluZXMgZm9yIGRlLWlkZW50aWZpY2F0aW9uIGhhdmUgcHJvdmVuIHRvIGJlIGluYWRlcXVhdGUgaW4gZW5zdXJpbmcgdGhhdCBjb21wYW5pZXMgY29uZHVjdCBkYXRhIHNoYXJpbmcgYW5kIGRhdGEgc2FsZXMgdG8gdGhpcmQgcGFydGllcyBhY2hpZXZpbmcgYW5vbnltaXR5IG9mIHRoZSBwYXJ0aWNpcGFudHMgaW4gdGhlIGRhdGEgc2V0LgoKIyMjIEZhY2lhbCBSZWNvZ25pdGlvbiBEZS1JZGVudGlmaWNhdGlvbiBFZmZvcnRzCgpQYXJ0IG9uZSBvZiB0aGlzIHBhcGVyIHByZXNlbnRlZCBwcm9qZWN0cyBpbGx1bWluYXRpbmcgdGhlIGhhcm0gdGhhdCBjYW4gb2NjdXIgZnJvbSBiaWFzZWQgZmFjaWFsIHJlY29nbml0aW9uIHN5c3RlbXMgYXMgdGhlIHRlY2hub2xvZ3kgZ2FpbnMgYWNjZXB0YW5jZSBkZXNwaXRlIGl0cyBwcml2YWN5IHNob3J0ZmFsbHMuIEhvd2V2ZXIsIGZhY2lhbCByZWNvZ25pdGlvbiBzeXN0ZW1zIGFuZCB2aWRlbyBzdXJ2ZWlsbGFuY2UgaXNzdWVzIGNhbiBiZSBzb2x2ZWQgYnkgZW1wbG95aW5nIG5vdmVsIHRlY2hub2xvZ2llcy4gVG8gcHJvdGVjdCB0aGUgcHJpdmFjeSBvZiBpbmRpdmlkdWFscywgaW1hZ2VzIGNhcHR1cmVkIGluIHN0YW5kYXJkIHN1cnZlaWxsYW5jZSBzeXN0ZW1zIHNob3VsZCBiZSBkZS1pZGVudGlmaWVkLiBXaGVuIGNvdXBsZWQgd2l0aCBmYWNpYWwgcmVjb2duaXRpb24gc29mdHdhcmUsIGEgc3lzdGVtIHRoYXQgZmFpbHMgdG8gZGUtaWRlbnRpZnkgaW5kaXZpZHVhbHMgaW4gYSBjaXR5LXdpZGUgc3VydmVpbGxhbmNlIHN5c3RlbSBjb3VsZCBlZmZlY3RpdmVseSB0cmFjayBzaW5nbGUgaW5kaXZpZHVhbHMgdGhyb3VnaG91dCB0aGUgY292ZXJhZ2UgYXJlYSAoTmV3dG9uLCAyMDAzKS4gV2hpbGUgdGhlIE5ldyBZb3JrIFRpbWVzIHByb2plY3QgaW4gcGFydCBvbmUgZGVzY3JpYmVzIHdoYXQgY291bGQgb2NjdXIgZnJvbSBpbmFjY3VyYXRlIHN5c3RlbXMsIG90aGVyIGVmZm9ydHMgZXhpc3QgdG8gZW5zdXJlIHRoYXQgdW5pbmZvcm1lZCBjaXRpemVuc+KAmSBwcml2YWN5IGFuZCBhbm9ueW1pdHkgYXJlIGFjaGlldmVkIHRocm91Z2ggZGUtaWRlbnRpZmljYXRpb24gZnJvbSBzdGFuZGFyZCB2aWRlbyBzdXJ2ZWlsbGFuY2UgcHJhY3RpY2VzLiBUaGUgdGVjaG5pcXVlIHByZXNlbnRlZCBieSBOZXd0b24gaW4gdGhlIGRhdGEgcHJpdmFjeSBsYWIgcHJvamVjdCBpbGx1c3RyYXRlcyBob3cgZmFjaWFsIHJlY29nbml0aW9uIHN5c3RlbXMgY2FuIGNvbnRpbnVlIHRvIGJlIHVzZWQgd2l0aG91dCBpbmZyaW5naW5nIG9uIHRoZSByaWdodCB0byBwcml2YWN5IG9mIHRoZSBjaXRpemVucnkgKE5ld3RvbiwgMjAwMykuCgpJbiB0aGUgcHJpdmFjeSBsYWIgcHJvamVjdCwgTmV3dG9uIG1ha2VzIGEgcG9pbnQgdG8gcmVpdGVyYXRlIHRoZSB2YWx1ZSBvZiBzdXJ2ZWlsbGFuY2Ugc3lzdGVtcy4gVGhlIHN5c3RlbXMgcHJvcG9zZWQgYXR0ZW1wdCB0byBlbmFibGUgdGhlIHNoYXJpbmcgb2YgdmlkZW8gZGF0YSB3aXRoIHNjaWVudGlmaWMgYXNzdXJhbmNlcyBvZiBwcml2YWN5IHByb3RlY3Rpb24gd2hpbGUga2VlcGluZyB0aGUgZGF0YSBwcmFjdGljYWxseSB1c2VmdWwgKE5ld3RvbiwgMjAwMykuIFRoZSBwcm9qZWN0J3MgZ29hbCB3YXMgdG8gZGUtaWRlbnRpZnkgdGhlIGZhY2lhbCBmZWF0dXJlcyB0byBhIGxldmVsIHdoZXJlIGFub255bWl0eSBpcyBhY2hpZXZlZCB3aGlsZSBsZWF2aW5nIGtleSBkZWZpbmluZyBjaGFyYWN0ZXJpc3RpY3Mgd2hpbGUgc2ltdWx0YW5lb3VzbHkgZW5jcnlwdGluZyB0aGUgaW1hZ2UgZm9yIHJlLWlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLiBQcmV2aW91c2x5IGF0dGVtcHRlZCB0ZWNobmlxdWVzLCBzdWNoIGFzIGNvdmVyaW5nIHRoZSBleWVzIG9yIGFsdGVyaW5nIHBpeGVsIGNvbG9ycywgZmFpbGVkIHRvIGFkZXF1YXRlbHkgcHJvdGVjdCBpbWFnZXMgZnJvbSBmYWNpYWwgcmVjb2duaXRpb24gc29mdHdhcmUuCgpUaGVyZSB3b3VsZCBiZSBzZXZlcmFsIHByaXZhY3kgaW1wbGljYXRpb25zIGlmIE5ld3RvbidzIHRlY2huaXF1ZXMgd2VyZSB3aWRlbHkgYWRvcHRlZC4gRmlyc3QsIHRoZXJlIGlzIGEgZGVjcmVhc2VkIHJpc2sgdGhhdCBhbiBpbmRpdmlkdWFsIGNvdWxkIGJlIGRpc2NyaW1pbmF0ZWQgYWdhaW5zdCB0aHJvdWdoIGluYWNjdXJhdGUgZmFjaWFsIHJlY29nbml0aW9uIHNvZnR3YXJlIHJ1bm5pbmcgYWdhaW5zdCBjb21tb24gdmlkZW8gc3VydmVpbGxhbmNlLiBBcyBwcmVzZW50ZWQgaW4gcGFydCBvbmUgb2YgdGhpcyBwYXBlciwgc2lnbmlmaWNhbnQgYWNjdXJhY3kgaXNzdWVzIG5lZ2F0aXZlbHkgaW1wYWN0IHNwZWNpZmljIGdyb3Vwcy4gTmV4dCwgd2hlbiBkZS1pZGVudGlmaWNhdGlvbiBpcyBjb25kdWN0ZWQgYmVmb3JlIGFuYWx5c2lzIGluIGZhY2lhbCByZWNvZ25pdGlvbiBzb2Z0d2FyZSBzeXN0ZW1zLCBhbm90aGVyIGxheWVyIG9mIHByb3RlY3Rpb24gaXMgYWZmb3JkZWQgdG8gdGhlIHByaXZhY3kgb2YgaGlzdG9yaWNhbGx5IGluZnJpbmdlZCBncm91cHMuIEZpbmFsbHksIGNpdGl6ZW5zIGFyZSBub3cgYWZmb3JkZWQgdGhlIHJpZ2h0IHRvIHByaXZhY3kuIFdoZW4gZGF0YSBzZXRzIGFyZSBzaGFyZWQgY29udGFpbmluZyBpbWFnZXMgdXNpbmcgTmV3dG9uJ3MgdGVjaG5pcXVlIG9mIHByZS1wcm9jZXNzaW5nIGZhY2lhbCBpbWFnZXMgYmVmb3JlIHRoZSBmYWNlcyBhcmUgaW5jbHVkZWQgaW4gYSBkYXRhIHNldCwgdGhlIHBlb3BsZSBpbiB0aGUgZGF0YSBzZXQgYXJlIHNhZmUgZnJvbSByZS1pZGVudGlmaWNhdGlvbiB3aXRob3V0IGFuIGVuY3J5cHRpb24ga2V5LiBUaGUgb3duZXIgb2YgdGhlIGRhdGEgc2V0IG9mIGZhY2lhbCBpbWFnZXMgd2lsbCBub3cgYmUgZnJlZSB0byBzaGFyZSB0aGUgZW5jcnlwdGVkIGltYWdlcyB3aXRob3V0IHZpb2xhdGluZyBwYXJ0aWNpcGFudHMnIHByaXZhY3kuICAKCiMjIyBHZW5vbWljIFByaXZhY3kgUHJvdGVjdGlvbiBFZmZvcnRzCgpXb3JrIGJ5IE1hbGluIGluY2x1ZGVkIGluIHRoZSBkYXRhIHByaXZhY3kgcHJvamVjdCBhaW1zIHRvIGlsbHVzdHJhdGUgaG93IGN1cnJlbnQgZGUtaWRlbnRpZmljYXRpb24gcHJvdG9jb2xzIHdoZW4gYW5vbnltaXppbmcgZ2Vub21pYyBkYXRhIGZhaWxzIHRvIGZ1bGx5IHByb3RlY3QgZnJvbSByZS1pZGVudGlmaWNhdGlvbi4gQXMgcHJldmlvdXNseSBtZW50aW9uZWQgaW4gdGhpcyBwYXBlciwgbWVkaWNhbCBpbmZvcm1hdGlvbiBpcyBwcm90ZWN0ZWQgdXNpbmcgSElQUEEgcmVndWxhdGlvbnMuIFN0aWxsLCBhcyBzZWVuIHRocm91Z2ggcHJldmlvdXMgY291cnQgY2FzZXMgc3VjaCBhcyBTb3JyZWxsIHYuIElNUyBIZWFsdGgsIHRob3NlIHBvbGljaWVzIGFyZSBpbmVmZmVjdGl2ZSBlbm91Z2ggaW4gdG9kYXnigJlzIGRhdGEtcmljaCBlbnZpcm9ubWVudCB3aGVyZSBnZW5ldGljIGluZm9ybWF0aW9uIGlzIHJlYWRpbHkgc2hhcmVkIGZvciBzY2llbnRpZmljIGFuZCBtZWRpY2FsIGJlbmVmaXQuIEFsdGhvdWdoIGFkdm9jYXRlcyBvZiBkZS1pZGVudGlmaWNhdGlvbiBhZGRyZXNzIHRoZSBpc3N1ZSBvZiBtYWludGFpbmluZyBwcml2YWN5IHdpdGggdGhlIGJlc3QgaW50ZW50aW9ucyB3aGVuIGd1aWRlZCBvbmx5IGJ5IEhJUFBBIHJlZ3VsYXRpb25zLCB0aGV5IG9mdGVuIGZhaWwgdG8gbWFpbnRhaW4gYW5vbnltaXR5LCBhbmQgcGFydGljaXBhbnRzIGNhbiBiZSByZS1pZGVudGlmaWVkIChNYWxpbiwgMjAwMykuIEFkZGl0aW9uYWxseSwgd2hlbiBmb2xsb3dpbmcgZGUtaWRlbnRpZmljYXRpb24gZ3VpZGVsaW5lcywgYW5vbnltaXplZCBkYXRhIGNhbiBiZSByZWxhdGVkIHRvIHB1YmxpY2x5IGF2YWlsYWJsZSBpbmZvcm1hdGlvbiB0byBpZGVudGlmeSBzcGVjaWZpYyBpbmRpdmlkdWFscyAoQnJhdW4sIDIwMDkpLgoKTWFsaW4gcHJvdmVzIHRoYXQgZXZlbiB3aGVuIHVzaW5nIHNldmVyYWwga25vd24gZGUtaWRlbnRpZmljYXRpb24gbWV0aG9kcywgcmUtaWRlbnRpZmljYXRpb24gY2FuIHN0aWxsIGJlIGFjaGlldmVkLiBUaHJvdWdoIGV2YWx1YXRpbmcgdGhlIGJyZWFkdGggb2YgZGFuZ2VycyBkZXNjcmliZWQgaW4gdGhlIE5ldyBZb3JrIFRpbWVzIFByaXZhY3kgcHJvamVjdCBzaG93aW5nIHRoZSBoYXphcmRzIGZyb20gdGhlIG92ZXJzaGFyaW5nIG9mIHBlcnNvbmFsIGdlbmV0aWMgaW5mb3JtYXRpb24sIGl0IGlzIGFwcGFyZW50IHRoYXQgZnVydGhlciByZXNlYXJjaCBhbmQgcmVndWxhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIHByb3RlY3QgaW5kaXZpZHVhbCBpZGVudGl0aWVzLiBOb3Qgb25seSBkbyByZXNlYXJjaGVycyBuZWVkIHRvIGVzdGFibGlzaCBlZmZlY3RpdmUgdGVjaG5pcXVlcyB0byBkZS1pZGVudGlmeSBnZW5ldGljIGluZm9ybWF0aW9uLCBidXQgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIHNob3VsZCBhbHNvIGJlIHRha2VuIHRvIGRldGVybWluZSBpZiBkaXJlY3QtdG8tY29uc3VtZXIgZ2VuZXRpYyBzZXJ2aWNlcyBhcmUgYmVuZWZpY2lhbCBlbm91Z2ggdG8gd2FycmFudCB0aGUgaW5oZXJlbnQgbG9zcyBvZiBwcml2YWN5LiAgCgojIyMgQ29uY2x1c2lvbgoKVGhyb3VnaG91dCB0aGlzIHBhcGVyLCBzZXZlcmFsIGtleSBwcml2YWN5IGlzc3VlcyB3ZXJlIGlsbHVzdHJhdGVkIGJ5IGNvbXBhcmluZyBleGlzdGluZyBwcml2YWN5IHByb2plY3RzIGZyb20gdGhlIE5ldyBZb3JrIFRpbWVzIGFnYWluc3Qgb25nb2luZyBhY2FkZW1pYyBhbmQgc2NpZW50aWZpYyBlZmZvcnRzIHRvIGFkZHJlc3MgZXhpc3RpbmcgZGF0YSBwcml2YWN5IGlzc3Vlcy4gIEFzIHRoZSBkYXRhIGVjb25vbXkgZXhwYW5kcywgZW5zdXJpbmcgaW5kaXZpZHVhbCBwcml2YWN5IHdpbGwgcmVtYWluIGEgY29uc3RhbnQgaHVyZGxlLiAgVGhpcyBwYXBlciBoYXMgc2hvd24gaG93IHRoZSBuZWVkIGZvciBhIGZvdW5kYXRpb24gb2YgcHJpdmFjeSBhbmQgZXRoaWNhbCBtYW5hZ2VtZW50IG9mIGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiB3aWxsIG9ubHkgYmUgYWNoaWV2ZWQgdGhyb3VnaCBhZGRpdGlvbmFsIHJlZ3VsYXRpb25zIGdvdmVybmluZyBob3cgZGF0YSBpcyBwcm90ZWN0ZWQgYW5kIHNlY3VyZWQuICBPbmx5IGFmdGVyIHRob3NlIHJlZ3VsYXRpb25zIGFyZSBjcmVhdGVkIHRoYXQgYWRkcmVzcyBjdXJyZW50IHRlY2hub2xvZ2ljYWwgYWR2YW5jZW1lbnRzIHdpbGwgaW5kaXZpZHVhbHMgYmUgc2FmZSBmcm9tIHJlLWlkZW50aWZpY2F0aW9uIGZyb20gZ2Vub21pYyBpbmZvcm1hdGlvbiBhbmQgcHJvdGVjdGVkIGZyb20gaW5hY2N1cmF0ZSBjb25jbHVzaW9ucyBkcmF3biBmcm9tIGJpYXNlZCBmYWNpYWwgcmVjb2duaXRpb24gcHJvZ3JhbXMuCgojIyMgUmVmZXJlbmNlcwoKQmFsYSwgTi4gKDIwMjApLiAqV2h5IEFyZSBZb3UgU2hhcmluZyBZb3VyIENoaWxk4oCZcyBETkEgSW5mb3JtYXRpb24/Ki4gTmV3IFlvcmsgVGltZXMuIFJldHJpZXZlZCBKYW51YXJ5IDI4LCAyMDIzIGZyb20gaHR0cHM6Ly93d3cubnl0aW1lcy5jb20vMjAyMC8wMS8wMi9vcGluaW9uL2RuYS10ZXN0LXByaXZhY3ktY2hpbGRyZW4uaHRtbAoKQnJhdW4sIFIuLCBSb3dlLCBXLiwgU2NoYWZlciwgQy4sIFpoYW5nLCBKLiwgQnVldG93LCBLLiAoMjAwNSkuICpOZWVkbGVzIGluIHRoZSBIYXlzdGFjazogSWRlbnRpZnlpbmcgSW5kaXZpZHVhbHMgUHJlc2VudCBpbiBQb29sZWQgR2Vub21pYyBEYXRhKi4gUExvcyBHZW5ldGljcy4gUmV0cmlldmVkIEZlYnJ1YXJ5IDIyLCAyMDIzIGZyb20gaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DMjc0NzI3My8gCgpCdXJnZXNzLCBNLiAoMjAyMCkuICpXaGF0IGlzIHRoZSBHRFBSPyBUaGUgU3VtbWFyeSBHdWlkZSB0byBDb21wbGlhbmNlIGluIHRoZSBVSyouIFdpcmVkLiBSZXRyaWV2ZWQgRmVicnVhcnkgMTgsIDIwMjMgZnJvbSBodHRwczovL3d3dy53aXJlZC5jby51ay9hcnRpY2xlL3doYXQtaXMtZ2Rwci11ay1ldS1sZWdpc2xhdGlvbi1jb21wbGlhbmNlLXN1bW1hcnktZmluZXMtMjAxOCAKCkdhcnZpZSwgQy4gKDIwMTkpLiAqWW914oCZcmUgSW4gQSBQb2xpY2UgTGluZXVwIFJpZ2h0IE5vdyouIE5ldyBZb3JrIFRpbWVzLiBSZXRyaWV2ZWQgSmFudWFyeSAyNywgMjAyMyBmcm9tIGh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMTkvMTAvMTUvb3Bpbmlvbi9mYWNpYWwtcmVjb2duaXRpb24tcG9saWNlLmh0bWwKCktsb3Nvd3NraSwgVC4gKDIwMjEpLiAqVGhlIFN0YXRlIG9mIENvbnN1bWVyIERhdGEgUHJpdmFjeSBQcm90ZWN0aW9uIExhd3MgaW4gdGhlIFVTIChBbnkgV2h5IGl0IE1hdHRlcnMpKi4gV2lyZWN1dHRlci4gUmV0cmlldmVkIEZlYnJ1YXJ5IDE1LCAyMDIzIGZyb20gaHR0cHM6Ly93d3cubnl0aW1lcy5jb20vd2lyZWN1dHRlci9ibG9nL3N0YXRlLW9mLXByaXZhY3ktbGF3cy1pbi11cy8gCgpNYWxpbiwgQi4gKDIwMDMpLiAqV2h5IFBzZXVkb255bXMgRG9u4oCZdCBBbm9ueW1pemU6IEEgQ29tcHV0YXRpb25hbCBSZS1pZGVudGlmaWNhdGlvbiBBbmFseXNpcyBvZiBHZW5vbWljIERhdGEgUHJpdmFjeSBQcm90ZWN0aW9uIFN5c3RlbXMqLiBDYXJuZWdpZSBNZWxvbiBVbml2ZXJzaXR5LiBSZXRyaWV2ZWQgSmFudWFyeSAyOCwgMjAyMyBmcm9tIGh0dHBzOi8vZGF0YXByaXZhY3lsYWIub3JnL2RhdGFwcml2YWN5L3Byb2plY3RzL2xpbmthZ2UvbGlkYXAtd3AxOS5wZGYKCk5hamliaSwgQS4gKDIwMjApLiAqUmFjaWFsIERpc2NyaW1pbmF0aW9uIGluIEZhY2UgUmVjb2duaXRpb24gVGVjaG5vbG9neSouIEhhcnZhcmQgVW5pdmVyc2l0eS4gUmV0cmlldmVkIEZlYnJ1YXJ5IDIwLCAyMDIzIGZyb20gaHR0cHM6Ly9zaXRuLmhtcy5oYXJ2YXJkLmVkdS9mbGFzaC8yMDIwL3JhY2lhbC1kaXNjcmltaW5hdGlvbi1pbi1mYWNlLXJlY29nbml0aW9uLXRlY2hub2xvZ3kvIAoKTmV3dG9uLCBFLiwgU3dlZW5leSwgTC4sIE1hbGluLCBCLiAoMjAwMykuICpQcmVzZXJ2aW5nIFByaXZhY3kgYnkgRGUtSWRlbnRpZnlpbmcgRmFjaWFsIEltYWdlcyouIENhcm5lZ2llIE1lbG9uIFVuaXZlcnNpdHkuIFJldHJpZXZlZCBKYW51YXJ5IDI3LCAyMDIzIGZyb20gaHR0cHM6Ly9kYXRhcHJpdmFjeWxhYi5vcmcvZGF0YXByaXZhY3kvcHJvamVjdHMvdmlkZW8vcGFwZXIucGRmCgpTaW5nZXIsIE4uICgyMDE5KS4gKlRoZSBHb3Zlcm5tZW50IFByb3RlY3RzIG91dCBGb29kIGFuZCBDYXJzLiBXaHkgTm90IE91ciBEYXRhPyouIE5ldyBZb3JrIFRpbWVzLiBSZXRyaWV2ZWQgSmFudWFyeSAyNiwgMjAyMyBmcm9tIGh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMTkvMTEvMDIvc3VuZGF5LXJldmlldy9kYXRhLXByb3RlY3Rpb24tcHJpdmFjeS5odG1sCgpTdXJlc2gsIEguLCBHdXR0YWcsIEouICgyMDIxKS4gKkEgRnJhbWV3b3JrIGZvciBVbmRlcnN0YW5kaW5nIFNvdXJjZXMgb2YgSGFybSBUaHJvdWdob3V0IHRoZSBNYWNoaW5lIExlYXJuaW5nIExpZmUgQ3ljbGUqLiBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LiBSZXRyaWV2ZWQgRmVicnVhcnkgMjAsIDIwMjMgZnJvbSBodHRwczovL3Vjd3YubXJvb21zMy5uZXQvcGx1Z2luZmlsZS5waHAvMTI4NTc4My9tb2RfcGFnZS9jb250ZW50LzEvQSUyMEZyYW1ld29yayUyMGZvciUyMFVuZGVyc3RhbmRpbmclMjBTb3VyY2VzJTIwb2YlMjBIYXJtLnBkZiAKClN3ZWVuZXksIEwuIChuLmQuKS4gKlBhdGllbnQgUHJpdmFjeSBSaXNrcyBpbiBVLlMuIFN1cHJlbWUgQ291cnQgQ2FzZSBTb3JyZWxsIHZzLiBJTVMgSGVhbHRoKi4gUHJpdmFjeSBMYWIgUHJvamVjdC4gUmV0cmlldmVkIEphbnVhcnkgMjYsIGZyb20gaHR0cHM6Ly9kYXRhcHJpdmFjeWxhYi5vcmcvcHJvamVjdHMvaWRlbnRpZmlhYmlsaXR5L3BoYXJtYTIucGRmCg==