Please read the whole document of lab expectations carefully. If you have
questions or concerns, please talk with me about them; the document,
like my research style, is a work in progress. I hope this document
conveys the care and thoughtfulness I bring to the work we do together.
I review this document periodically to make sure that my expectations
and obligations are clear and that nothing important is forgotten.
What I expect of
trainees
Here is what I expect of trainees:
- Maintain good progress on research and training-related
activities
- Work in lab during the workday (when you are not in class, teaching,
or doing clinical work)
- Conduct all research and training-related activities
responsibly
- Respect other lab members
I am ambitious and have high standards, and I expect the same from
you. Below are more detailed descriptions of the expectations:
Research projects and
training
Take advantage of your opportunity to work at a world-class
university by developing and refining stellar scientific skills. I
expect that you will learn how to plan, design, and conduct high-quality
scientific research.
I expect all trainees to maintain good progress on their projects.
This includes: keeping updated on the literature and research methods,
actively thinking about the best ways to conduct your research projects
and applying them, regularly discussing your research progress with me,
following the plans based on our discussions, and presenting
(conferences, presentations, and/or journal articles) the findings at a
satisfactory level. Writing is the single most important ability to
develop during graduate school. I expect you to write frequently, and I
encourage you to write daily. I encourage students to read Paul Silva’s
“How
to Write a Lot (archived at https://perma.cc/C6XV-84UR),” and I am happy to lend the
book to you. I encourage you to use EndNote, Zotero, or another
reference manager to manage your references and write the References
section of papers. Reference management software will save you lots of
time. Additionally, please follow the lab’s writing guidelines.
My expectation is that you will be engaged in research activities
beyond those required by the program. Have multiple research projects to
work on. Having multiple ongoing projects provides important
diversification—if a given project is not working out as expected, you
have other projects you can turn to. But focus and finish. The
“currency” in science is published papers—they drive a lot of what we
do. Because our lab is supported by taxpayer dollars, we have an
obligation to complete and disseminate our findings. I expect you to
lead first-authored projects (in addition to any collaborative projects)
and to publish your work in high-impact journals. It is my policy that
students are first-author on all work for which they lead the data
analysis and writing. I will push you to publish your research as you
move through your training program, not only at the end. I expect
trainees to be lead author on at least two journal paper submissions,
preferably three or four (or more!). Productivity in terms of publishing
high-quality papers and securing funding is crucial to be competitive
for many jobs.
I expect you to apply for external funding—examples include the
National Science Foundation Graduate Research Fellowship Program
(NSF-GRFP) and the National Institutes of Health National Research
Service Award (NIH NRSA). I encourage students to submit a NSF-GRFP in
their first semester. I encourage students to submit a NIH NRSA in their
second or third year. Getting a first-authored publication in your first
or second year is important for these (and other) fellowships and for
awards.
For many jobs, presentation skills are also highly important,
including skills in presenting research to broad audiences of scientists
outside of your area. For academic positions, while papers and grants
“get your foot in the door” and help you get an interview, the “job
talk” (typically to the whole Department) is the single most important
criterion during a job interview—because that is the one thing that all
faculty see. Thus, I expect you to present your research frequently and
in multiple outlets. Challenge yourself by presenting your work at
meetings and seminars as early as you can. I also expect you to go to
Departmental colloquia series by speakers who are outside of your
area.
We will have meetings to discuss the research project(s) you find
interesting that also advance the lab’s interests. I always welcome new
ideas and project proposals, so please come to me if you want to discuss
new projects. A piece of advice that was given to me as a graduate
student that I pass onto you is to find a question or problem that
excites you and “date” it. You will know that you have found an idea
that truly excites you when you find yourself thinking about it while
brushing your teeth, going for walks, etc. Much of the important and
exciting work in science happens at the ideas stage.
Data and research
materials
Confidentiality of data is paramount. All hard-copy physical research
data must remain in the lab. All electronic data should be accessed from
the lab, on university computers, or secure private computers.
Electronic data should not be accessed on public computers. Identifiable
electronic data should be stored only on the lab’s RDSS share and should
not be saved onto your computer. When working from private spaces, the
university VPN can be accessed to ensure a secure internet
connection.
You are expected to maintain detailed, organized, and accurate
laboratory records in a lab notebook. Be aware that all tangible
research data and related research materials are my property as the lab
director. When you leave the lab, I encourage you to retain access to
the lab’s research data via VPN to the lab drive (RDSS share). One full
set of all data must stay in the lab, with appropriate and accessible
documentation. Regularly back up the files on your computer using
Microsoft OneDrive, which is provided by the university. De-identified
data and analysis scripts associated with projects should be saved in
the project repository of the lab’s GitLab page (https://research-git.uiowa.edu/PetersenLab), which is
hosted by the university and approved by our IRB.
Research ethics
You should respect all ethical standards—including compliance with
all university, state, and federal regulations in addition to the APA
Ethics Code—as they relate to responsible conduct in research, possible
conflicts of interest, privacy and human subjects research, laboratory
safety, authorship, peer-review guidelines, and data ownership,
reporting, and sharing. When ethical dilemmas or uncertainties arise,
ask me and others for guidance. Consult, consult, consult!
In this lab, we work hard to do the best science we can. During the
process, obstacles and frustrations are inevitable, and sometimes more
common than you would imagine. It is my hope that we will work together
to tackle these challenges and to build up your resilience. To this end,
please keep me updated on your progress—both the good and bad.
Mistakes are inevitable and are part of your training, so do not feel
bad about making mistakes—I make mistakes on a daily basis. I strive for
the lab to provide a supportive environment to ask questions and admit
mistakes. As your mentor, I am also responsible for your research and
training. So please do let me know if such things happen and we will
work together to recover from them. Usually the earlier you inform me,
the less damage there will be. Being frank about your mistakes will be
greatly appreciated. However, things like intentionally faking data and
intentionally covering mistakes are unacceptable and will lead to severe
consequences.
Time in lab
I expect you to be at work and on campus during the workday:
9ish–5ish or 8ish–4ish. In addition, I expect your availability to span
9–5 for scheduling meetings with me or members of the team—the same
hours, generally, that the program attempts to schedule meetings. During
the workday, you are expected to work in the lab when you are not in
class, teaching, or doing clinical work. This is not about
accountability—rather, it is to the benefit of you and the team. Our
approach is optimal for the type of projects we carry out: longitudinal
projects such as ours are one big enterprise with many moving parts, all
of which have to work together smoothly. Each student’s individual
project is embedded in that larger umbrella (retaining each student’s
uniqueness, ideas, etc.). Thus, the physical interactions for the whole
team, in one space, with shared work ethic, are so important. Part of
your job is to be in the lab (with your door open) and to talk with
other people about your research. We all benefit from having a group of
people we can talk with about research questions and problems. We have a
collaborative lab environment. Our lab works as a team, and other lab
members count on you being there. Likewise, you benefit from having
other team members, myself, and Departmental staff available. Working in
the lab space helps improve quality control of lab procedures and can
lead to exciting collaborative projects. This short blurb on how “Isolation
is one of the biggest enemies of graduate students” (archived at https://perma.cc/GK56-7LLW) may give you some insight
why facetime in the lab is so important:
“I wonder how an English professor would feel spending a week in a
physics lab. Not about the scientific work, but about the frequent,
ongoing interaction between students and peers, post-docs and faculty.
Scientists see each other in the lab, if not daily, then at least
weekly. They have frequent lab meetings, colloquia and interaction with
scholars at other universities around joint research. During my graduate
training in psychology at McGill University, especially in the research
lab at the Montreal Neurological Institute, I spent hours hanging around
the post-docs. I learned at least as much from them as I did from my
interactions with my professors. The expectation was that I would be at
the lab 9 to 5 or more, every day. I saw my adviser every day.” – Gina
Hiatt
Of course, there are exceptions; if you are sick, stay home. You do
not need my permission to attend medical appointments during lab hours.
If you are unable to come into lab due to bad weather, just let me know
and you should be available to be reach-able quickly, just as you would
be if you were in lab.
Nevertheless, graduate school is not a 40 hour per week job. Graduate
students can expect to work an average of 50 hours per week. Outside of
the workday, you are welcome to work from the lab, or—as long as you
ensure confidentiality of data—from home or from other spaces. That
said, the most important thing is for you to get the job done—you are in
your career now and are investing in yourself. Graduate research
requires full-time dedication and year-round effort.
Discuss policies on work hours, sick leave, and vacation with me
directly. It is important to take time off to decompress from time to
time. Work-life balance and vacation time are essential for creative
thinking and good health, and I encourage you to take regular vacations.
You can take three weeks of vacation time each year, and you are not
expected to work during university
holidays. In addition, I do not expect students to work between
12/15 and the first week of January. Please discuss your vacation plans
with me before booking your trip. Submit requests for time off in
person, by phone, or via email, not by Slack. Consult with me and notify
fellow lab members in advance of any planned absences, with as much
advance notice as possible—at least two weeks’ notice or more if
feasible. Please plan that if you are away, others will need to take
over your responsibilities, so planning for adequate lead time and
training may be necessary. Please discuss with me if you plan to take a
summer internship or bootcamp.
Meetings
There are three types of meetings: lab meetings, group meetings, and
one-on-one meetings. Lab meetings occur weekly. All lab members are
expected to attend. Typical forms of lab meetings are article
discussions (led by one lab member), project presentations, talks given
by guest speakers, and professional development workshops. You should
read these materials in advance. You are expected to contribute with
questions and/or comments during lab meetings. The university and our
lab use Outlook for scheduling; you are expected to keep your university
Outlook account up to date.
One-on-one meetings are 45-min, weekly meetings between each trainee
and me. You can also schedule one-off one-on-one meetings with me. When
scheduling your one-on-one and other meetings, send all of your
available times (between 9am and 5pm), not just your preferred times!
You may indicate which of your available times are preferred or less
preferred. One-on-one meetings are designed for us to discuss any
training and research-related issues in detail and to form plans for the
near future, in addition to any challenges. Make sure that you also use
this time to communicate new ideas that you have about your work and
challenges that you are facing. Remember: I cannot address or advise
about issues that you do not bring to my attention. I expect trainees to
attend all their one-on-one meetings. I understand that sometimes there
is nothing to report, so occasional cancellation is fine. That said,
note that even if you have nothing to report, sometimes having the
meeting can still be advantageous and it may be worth our time to still
check in. Do not cancel meetings with me if you feel that you have not
made adequate progress on your research; these might be the most
critical times to meet with a mentor.
You are expected to ask questions and take notes during meetings. Be
respectful of my time and make any necessary changes (to papers,
analysis code, etc.) after the meeting, based on your notes and on your
own time—unless I am working on the document directly.
Besides meetings, trainees are welcome to drop by my office anytime
to discuss research, training, and administration-related issues. I have
an open-door policy: my door is always open (figuratively speaking). I
will be happy to meet with you as long as I do not have another
obligation. My office and phone number is: [see my University
page]. My cell is: [blinded for the internet…just ask].
Open science
We, as a lab, value and strive to advance the mission of open
science to improve the accessibility, reproducibility, and
replicability of science. As such, all lab members are expected to
conduct research transparently and to promote reproducibility. This
includes, but is not limited to, pre- or co-registering studies, sharing
analysis scripts and data, using version control (GitLab), submitting preprints when submitting a manuscript
to a journal, and providing support for other labs’ attempts to
replicate and reproduce our findings. We use GitLab for version control.
Our lab’s template for GitLab repositories can be found here: https://research-git.uiowa.edu/PetersenLab/Template. Our
lab’s template for projects on the Open Science Framework (OSF) can be
found here: https://osf.io/4w9sv. Follow our lab’s guide for open science.
Collaborations
All lab members are encouraged to explore collaboration opportunities
both within and outside of the lab. I ask trainees to (1) respect your
collaborators’ time and resources, and (2) inform me if you are seeking
collaborations with or are collaborating with researchers (e.g.,
finishing your projects in your previous lab) outside of the lab.
Trainees are expected to have a firm footing in their research progress
in this lab before collaborating with outside researchers. I expect you
to discuss order of authorship with me early on when there are potential
collaborators.
Readings and
resources
Trainees are expected to read foundational articles relating to the
lab and to their research interests. Examples of foundational articles
are on the lab’s Google Drive folder of primer
articles. I also expect you to read one of the
primer articles by Schwartz (2008) titled, “The
Importance of Stupidity in Scientific Research.” It is important to
feel comfortable feeling stupid in science; if you (and any of us) do
not feel stupid, we are not doing science right! It is also important to
read background information and protocols about our projects.
We have a list of lab resources for graduate students on our Lab’s
Trello board called “Grad Students”: https://trello.com/b/WjqbgpW9/grad-students. The Trello
board includes items for onboarding, important foundational skills for
scientific training, useful software, and relevant journals,
organizations, conferences, and listservs. It also includes training
materials for various software (e.g., REDCap, GitLab, R). And it
includes a list of the times to block off during the semester.
Data analysis guides for the lab are available here: https://devpsylab.github.io/DataAnalysis
Training
I expect you to take ownership over your educational experiences.
Your education is your responsibility—you have the primary
responsibility for the successful completion of your degree. I encourage
you to follow the recommended timelines for research, coursework, and clinical work (see the Appendix). You
should maintain a high level of professionalism, self-motivation,
engagement, scientific curiosity, and ethical standards. You should also
be knowledgeable of and comply with all policies, deadlines, and
requirements of the graduate program, the graduate college, and the
university. Further, I expect you to actively cultivate your
professional development. UI has outstanding resources in place to
support professional development for students, including professional
development seminars and workshops on topics such as oral communication,
scientific writing, collaborative research, statistical methods,
teaching, and mentoring. I expect you to take advantage of these
resources. You are also encouraged to talk with other members of the
lab, other students, and faculty to learn ways of effectively navigating
graduate school.
Avoid clinical clique-ishness and insularity. The most innovative
science transcends traditional boundaries. I expect you to spend time
and talk science with graduate students and faculty in areas outside of
clinical (e.g., BCN, cognition)—both to broaden your perspectives and to
incorporate basic science perspectives into your work, while also being
a good Departmental citizen. Clinical students at some programs wrongly
think they are special and think of their work as superior to basic
science. Clinical science is not a research area—clinical science uses
basic science (e.g., cognitive, social, developmental, biological
science) in rigorous ways to answer clinically relevant questions.
I expect all trainees to comply with their respective training plans
(e.g., training plans of your degree program), such as taking required
courses, maintaining passing grades, fulfilling teaching assistant
duties, clinical training, and organizing committee meetings. You are
expected to attend and actively participate in all group meetings and in
seminars that are part of your educational program. I expect you to
attend conferences, Clinical Rounds, Developmental Discussion, Data Team
and lab meetings, DeLTA Center, Friday colloquia series, and other
relevant brownbags such as Cognition, Behavioral & Cognitive
Neuroscience (BCN), and the Iowa Neuroscience Institute (INI). When we
go to conferences, I will introduce you to my professional network and
encourage you to build skills in networking.
We will discuss your training and career development plans. All
program requirements are in the Department’s Graduate
Handbook and/or the Graduate College’s Manual of Rules and
Regulations. I include a suggested timeline for your research,
clinical training, and coursework below. Please
consult with me before selecting your courses, clinical practica, and
other time-intensive training experiences.
For some students, there may be relevant training fellowships. For
instance, the Behavioral-Biomedical Interface Training Program (BBIP)
provides training in bio-medical research.
This is a research-oriented program; you are expected to prioritize
research relative to your other obligations. If you are getting all As
in classes, you are spending too much time on coursework! Grades in
grad school don’t matter (as long as you pass your classes; archived
at https://perma.cc/KDU2-79JZ), and the sooner you figure
that out, the better off and more productive you will be. Instead of
focusing your learning on coursework, learn by doing. Take what you need
from classes to advance your research program.
Please refer to the Clinic Manual for guidelines regarding
face-to-face hours (on the clinic drive:
\\iowa.uiowa.edu\shared\CLAS\Departmental\PBS\Clinic\Clinic Manual\
).
For clinical students, it is important to regularly track your clinical
experiences and hours to ensure that you are meeting appropriate
milestones in your training. The program has an institutional account
for Time2Track. You are expected to
use it to track hours and are expected to stay caught up in your
tracking. We will discuss your plans for clinical training and practicum
opportunities during our regular individual meetings. I will also
provide clinical supervision of some of your cases as part of the
Seashore Clinic. I am a licensed clinical psychologist, so assessment
hours in my research lab count as clinical hours.
Software
My lab primarily uses R
for data management and analysis
because it is free, open source, open platform, code-based (which
increases share-ability and reproducibility of analyses), and supports
advanced statistics and state-of-the-art graphics from packages designed
by statistical experts all over the world, and to which anyone
(including you) can contribute. We also use MATLAB
for
processing of event-related potential data and Mplus
for
structural equation modeling. You are encouraged to learn R
and any other specialized software that will allow you to answer the
research questions you are pursuing. If there’s another tool or software
package that can do something easier, better, more efficiently, or with
greater reproducibility than what we are using, feel free to use
it—though I may not be able to provide formal guidance. For instance,
Python
is a free programming language that is emerging as a
nice complement to R
for statistical programming. No matter
which software you use, you should be able to understand and explain
what the analysis is doing and be able to interpret and explain the
output.
Best practices
I expect you to follow open science practices (described above). I
expect you to comment your code so that others can understand it (and so
you can understand it when you go back to it 5+ years later). I expect
you to use version control (git with GitLab) with all projects and to
save your lab projects in a repo on the lab’s GitLab page.
Commit and push your work to the GitLab repo often. Using version
control provides many benefits: (a) it provides backups of all files in
the cloud, (b) it allows you to access the files in the cloud from any
computer with access to the internet, even if you are away from your
local computer, (c) it provides history of all (committed) changes made
to all files. If you make a mistake in your code, you can easily revert
to a prior version because you took snapshots (commits) of your files!
(d) It allows you to write cleaner code because you do not need to keep
all the old, “commented out” lines of code, (e) it helps with project
organization; you no longer have to keep files or folders named
“project_old” (or “project_2”, “project_final”
(archived at https://perma.cc/3Q5D-XKTJ), or whatever), (f) it keeps
all files for the project self-contained, which helps increase
reproducibility, and (g) it allows easier collaboration with others on
the project.
Other
responsibilities
I expect you to be a team player, to contribute to the team, and to
take a leadership role in the lab. Strive to be the very best lab
citizen and citizen of the Department and University. Regardless of your
source of funding (e.g., teaching assistantship, research assistantship,
fellowship/grant), you can expect lab-related assignments that are for
the betterment of the team. For instance, I expect you to supervise a
coding task. I expect you to learn the lab procedures and protocols. You
should be able to train research assistants or lab staff on various
procedures. I expect you to work to ensure quality control of lab
procedures so that we are collecting and processing high-quality data in
an efficient way. I expect you to help other team members, including
undergraduate research assistants with independent research projects,
Honors projects and theses, job or graduate applications/interviews,
etc. Doing so will help you build important skills in mentoring.
Regardless of your source of funding, you are expected to spend most
of your time doing lab-related research. If you are funded on a research
assistantship from the lab, I expect you will spend at least 20 hours
(for a full-time assistantship; at least 10 hours for a half-time
assistantship) doing lab-related research from the relevant grant(s) and
lab-assigned work that is separate from coursework, clinical work, work
toward program requirements (e.g., Comps exams), other research-related
work, and other endeavors. This is an ethical obligation given our
federal sources of funding. If you are unable to commit to a full
research load (and therefore would not be able to meet the expectations
of a research assistantship), you should tell me before assistantships
are assigned, so you can be given a teaching assistantship or another
source of funding. Nevertheless, even with a teaching assistantship, you
are expected to spend most of your time doing lab-related research. You
should not spend more than 10 hours per week doing teaching-related work
for a half-time teaching assistantship, and not more than 20 hours for a
full-time teaching assistantship (and generally much less than
that).
You should talk with me and get my approval before doing or adding
any external practica. Per lab and program expectations, you should not
spend more than 1.5 full days (i.e., 12 hours) doing clinic-related work
per week. Do not focus too much on clinical hours; Ph.D. students from
non-clinical science programs and Psy.D. students will have way more
clinical hours than you—you are not competing with them for the same
types of sites. You will be most competitive at clinical
science internship sites (archived at https://perma.cc/2VRK-JRMQ), which care much more about
the quality of training than the quantity of training.
And UI has top-notch clinical training. Internship sites also care
heavily about scientific productivity including publications (Lund et al.,
2016), and this is even more true for clinical science internship
sites. I had four first-authored publications (nine total) and an NRSA
when I applied for internship and received 13 interview invitations out
of 15 sites. I am happy to share my preparation, application, and
interview materials etc. for internships, jobs, etc. and to work with
you to make them as strong as possible.
Please do not hide in your office; get out and meet people at group
and departmental events. If a colloquium is given in an area in which
you have a research interest, sign up to meet with the speaker. Go up to
speakers after talks, introduce yourself, and express interest in their
work by asking questions. Networking skills are important and can often
lead to job opportunities.
Career
development
I strongly believe that the lab grows better with each trainee
achieving their career goals. I respect and support each trainee’s
career choice and understand that things can change over time. At the
same time, keep in mind that this is a research-oriented training
program and is best aligned with careers in which research will be a
key component. For prospective graduate students, if you have goals of
being a clinician, I would dissuade you from joining our program and
this lab; you would not be happy here.
We will discuss your career development plans and how I can best
support them. During each Fall semester, I expect you to complete an
Individual Development Plan (https://myidp.sciencecareers.org;
archived at https://perma.cc/MT27-CPP2), and to review and discuss
the results with me. I expect you to inform me if there is any change in
your career plans so that your lab activities can be better aligned to
your new goals. In addition to academic careers (e.g.,
research/teaching/clinical work at R1 university, academic medical
center, or liberal arts college), I support plans for industry and
non-academic careers (e.g., data science, consulting, government, NGO;
these are just examples—there are many others). You are welcome to get
the training you need, provided that you maintain good progress on your
degree-related training and research. Seek the experience of faculty,
professionals, post-docs, and other students to help you out.
If you want an academic job, I know what it takes to get one (in
terms of publications, grants, etc.), so just ask. I am also happy to
talk with you about what an R1 academic job is like (e.g., setting up
and running a lab, teaching)—I love my job and have a passion for the
work we do. I get to be part of an invigorating intellectual environment
in which I get to learn every day, get to be around exciting ideas and
world-renowned experts conducting cutting-edge research, and have the
intellectual freedom to get paid to study whatever I want to study. I
cannot imagine anything better. That said, there are not enough faculty
positions for all Ph.D. graduates and it is not the best fit for
everyone. I will work with you to find the career that is the right fit
for you.
My approach to
mentorship
As a clinical-developmental psychologist, I take a developmental
perspective to mentorship. Early on in your training, I aim to provide
sufficient structure and scaffolding. As you develop proficiency in a
skill, I strive to withdraw the scaffolds so that you develop
independence and autonomy. The second approach to my mentorship style is
an emphasis on learning by doing. I encourage students to learn by
applying the skills to projects they are working on in the lab, rather
than relying on coursework and other methods. I view my role as
fostering your professional confidence and encouraging your critical
thinking, skepticism, and creativity.
Do not hesitate to ask questions if I am around; it is often better
to ask questions than to make a mistake that could have been easily
avoided. I am periodically away, and I expect you to get things done
well without me. You are encouraged to be independent; do not be afraid
to try to do detective work on your own if I am not around. There is
also a benefit to learning by trial and error. We have a helpful,
experienced lab, so know that people other than me may be excellent
resources.
In order for supervision to be effective, I hope that our
relationship will include open communication and two-way feedback. If
there are ways I can be a better mentor for you, please let me know. I
value openness to learning as a continuous, developmental, life-long
process and I will model and promote openness and receptivity to
feedback. I expect that trainees will express disagreements and
differences in opinion with me. I do not view professional disagreements
as personal; the best science arises out of the free and constructive
exchange of multiple perspectives and ideas. I expect that trainees will
attempt to address conflicts in the mentor–mentee relationship.
I strive to build and to support a diverse team, to treat people
equitably, and to be inclusive of people from all backgrounds. If there
are things that the lab or I can do to help you or others feel more
included, please let me know.
I am committed to mentoring you, even after you leave my lab. I am
committed to your education and training while you are in my lab, and to
advising and guiding your career development—to the extent you wish—long
after you leave. I will provide honest letters of evaluation for you
when you request them.
Communication
Feel free to use Slack for brief communication with me. However, we
do not use direct messages in Slack (see the lab manual). All Slack
communication should be in team-facing channels so others can benefit
from the information and so we can go back and reference it later. For
longer communication, please call or stop by my office. I find this much
more efficient and pleasant than writing and reading lengthy
communication. For sending manuscripts, personal information, and
messages that do not need an urgent response, you may email me. Please
limit your use of email as much as possible. I
hate email (archived at https://perma.cc/T855-U9MQ); we get way too much of it,
it is impersonal, it does not communicate tone well (often leading to
misinterpretation and sometimes hurt feelings), and it is difficult for
me to stay on top of my inbox. I encourage you to stop by my office or
to call my office phone instead of relying on email, whenever
possible.
When you contact me or send me materials, you can expect me to
respond promptly. Likewise, I expect you to respond promptly when I or
another lab member contacts you (in most cases, within 48 hours). If you
need time to gather information in response to a Slack message or email,
please acknowledge receipt of the message and indicate when you will be
able to provide the requested information. At times, I may contact you
by email or Slack after hours (if that is when it is most convenient, so
that I do not forget to). However, you are *not* expected to respond
after hours. I will call you if something is urgent.
Be mindful of the constraints on my time. Allow a minimum of one week
prior to submission deadlines for me to read and respond to short
materials such as conference abstracts and three weeks for me to work on
manuscripts, grant proposals, and letters of recommendation. Please do
not assume I can read materials within a day or two, especially when I
am traveling. Please only send drafts of manuscripts, grant proposals,
dissertations, etc. when they are your best possible work (the
Henry Kissinger criterion). That means going through multiple revisions,
reading it out loud to yourself, etc. Here is an excerpt about
Dr. Kissinger (Krausman,
2021):
“Henry Kissinger, a former Secretary of State under President Nixon,
understood the importance of continually improving writing skills.
Winston Lord was Kissinger’s speech writer and during the late 1960s and
early 1970s, Lord had been tasked with writing a speech about three
important foreign policy projects: the opening of China to the West,
bringing the Vietnam War to a close, and an attempt to improve relations
with the Russians. Writing a speech for Kissinger was not an easy job
because Kissinger was a speech writer himself and harsh critic.
The story goes that Lord prepared and submitted a first draft of a
speech to Kissinger one evening. Kissinger then called Lord the next
morning for feedback on the speech and asks “Is this the best you can
do?”
Lord replies “Henry, I thought so, but I’ll try again.”
Lord then went back to the drawing board, tweaked, revised, and
resubmitted another draft a few days later.
The next day, Kissinger called Lord into his office and again asked
“Are you sure this is the best you can do?”
Lord began to question his work and said “Well, I really thought so.
I’ll try again.”
Believe it or not, this uncomfortable and rejecting process went on
for 8 drafts, each time Kissinger standing firm to his original feedback
of “Is this the best you can do?”
Lord returned to Kissinger’s office with the now ninth draft and
awaited his response.
Surely enough, Kissinger called Lord in the next day and asks him the
same question, “Is this the best you can do?”
Lord, now completely fed up, furiously replied “Henry! I’ve beaten my
brains out—this is the ninth draft! I know it’s the best I can do; I
can’t possibly improve one more word!!!”
Kissinger then looked at Lord and nonchalantly said “Well, in that
case, now I’ll read it.”
Lab culture
Within a lab environment, occasionally competitive thoughts or
emotions may arise. This lab is not a place for competition, but
collaboration. We are a group of researchers working toward a common
goal, and all members are encouraged to work together collaboratively. A
rising tide lifts all boats. Competitive behavior is not conducive to a
productive laboratory, and this sort of behavior will strictly not be
tolerated. Do not compare yourself to others. You are on your own path.
Each mentee needs different things, and I will do my best to get to know
you as an individual, and your individual skills, preferences, and
goals. Cultivating a common value of humility is important in research,
because we are always asking questions to which we inherently do not
know the answer. Elitist behavior is not conducive to growth and
development, and as such, is not appropriate for the lab environment.
The lab culture is of utmost importance to a healthy, functional group,
and professional behavior is at the center of building this culture. If
you have joined the lab, you have been selected among many qualified
applicants for this position. I encourage you to share your thoughts and
ideas with the lab. Keeping them to yourself would be a disservice to
the team.
Professionalism
Show up on time, fully prepared for meetings. If you will need to
miss a meeting, let the relevant team members know in advance, with as
much advance notice as possible. Unexcused absences are not acceptable
in a professional environment.
If you have critical thoughts to share with someone, do not send them
in Slack or in email; instead, call or talk to the person directly. Be
responsive to advice and constructive criticism. The feedback you get
from me, your colleagues, your committee members, your course
instructors, your clinical supervisors, and your teaching supervisors is
intended to improve your work and help you succeed. Do your best not to
take it personally. We all have room to grow.
Interactions with
others
I expect all lab members to respect each other. For more information
on how you are expected to interact with others, see the relevant
section on “Interactions with Others” in the page on Expectations for Everyone
in the Lab.
If another member of the lab is not complying with these policies,
please first attempt to speak to the person directly. The APA Code of
Ethics advises that this is a first step toward resolution. If that is
not possible, appropriate, or proves ineffective (i.e., does not change
behavior), please speak to me about the problem immediately. Please also
speak to me if you think you have an interpersonal issue with me. If,
after having talked with me, you feel the issue will not be resolved and
you want to speak to someone else to address the issue, follow the chain
of command and talk to the Area Coordinator, the Director of Graduate
Studies, and/or the Departmental Executive Officer. The chain of command
is depicted in the lab
organizational chart.
Accommodations
Sometimes, life events or medical/health-related issues may impact
your ability to meet some of the lab expectations. You are encouraged to
seek medical/professional help if such issues arise, even if the
appointments occur during your regular lab hours. If there are
lab-related accommodations that would be helpful to you, please let me
know and/or contact the UI Student Disability Services (https://sds.studentlife.uiowa.edu). Any deviations from
the lab expectations should be approved by me or should coincide with
documentation from UI Human Resources or Student Disability Services
outlining alterations. If you have concerns about meeting your
responsibilities or expectations, please talk to me.
Well-being
Last but not least, your well-being is very important. I went through
the process of graduate school and understand how stressful things can
be from my own experiences. If you feel down for any reason, please talk
to me or anyone you feel comfortable talking to. You are also encouraged
to seek professional help—it is not a sign of weakness; it is a sign of
you taking care of yourself.
Remember that all of us are “new” at various points in our careers.
Imposter syndrome is normal; I encourage you to adopt a growth mindset.
You are meant to be here! Failure is common in academia. Take a look at
the CV
of Failures (archived at https://perma.cc/6UFR-ZBV4). Persistence pays off. I
have found it helpful to have a “feelgood”
email folder (archived at https://perma.cc/C3CB-25LU) that I can refer back to
when things are difficult.
Do not forget to laugh and have fun! Graduate school is a challenging
job with very high expectations, but it should also be fun. You get to
study something that is exciting to you and get paid to do it! To quote
Norman
Ramsey’s guide for graduate students (archived at https://perma.cc/3WFY-SH3L), “To sustain yourself
through difficult times, find research that means a lot to you.
Successful researchers find interesting problems and fall in love with
them. In operational terms, some Friday nights should be spent having
fun out in the world, but if you aren’t also spending some Friday nights
having fun with your research, you’re not doing the right research.”
LS0tCnRpdGxlOiAiTGFiIEV4cGVjdGF0aW9ucyBmb3IgR3JhZHVhdGUgU3R1ZGVudHMiCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIGVycm9yID0gVFJVRSwKICBjb21tZW50ID0gIiIpCmBgYAoKUGxlYXNlIHJlYWQgdGhlIHdob2xlIGRvY3VtZW50IG9mIGxhYiBleHBlY3RhdGlvbnNbXjFdIGNhcmVmdWxseS4KSWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLCBwbGVhc2UgdGFsayB3aXRoIG1lIGFib3V0IHRoZW07IHRoZSBkb2N1bWVudCwgbGlrZSBteSByZXNlYXJjaCBzdHlsZSwgaXMgYSB3b3JrIGluIHByb2dyZXNzLgpJIGhvcGUgdGhpcyBkb2N1bWVudCBjb252ZXlzIHRoZSBjYXJlIGFuZCB0aG91Z2h0ZnVsbmVzcyBJIGJyaW5nIHRvIHRoZSB3b3JrIHdlIGRvIHRvZ2V0aGVyLgpJIHJldmlldyB0aGlzIGRvY3VtZW50IHBlcmlvZGljYWxseSB0byBtYWtlIHN1cmUgdGhhdCBteSBleHBlY3RhdGlvbnMgYW5kIG9ibGlnYXRpb25zIGFyZSBjbGVhciBhbmQgdGhhdCBub3RoaW5nIGltcG9ydGFudCBpcyBmb3Jnb3R0ZW4uCgojIFRoZSBicm9hZCBnb2FscyBvZiBteSByZXNlYXJjaCBwcm9ncmFtIHsjZ29hbHMtbXlSZXNlYXJjaH0KCkFzIHBhcnQgb2YgbXkgam9iIGFzIGEgcHJvZmVzc29yLCBJIGFtIGV4cGVjdGVkIHRvIHdyaXRlIGdyYW50cyBhbmQgaW5pdGlhdGUgcmVzZWFyY2ggdGhhdCB3aWxsIG1ha2UgdGFuZ2libGUgY29udHJpYnV0aW9ucyB0byBzY2llbmNlLCB0aGUgYWNhZGVtaWMgY29tbXVuaXR5LCBhbmQgdG8gc29jaWV0eS4KWW91IHdpbGwgYmUgaGVscGluZyBtZSBjYXJyeSBvdXTigJRhbmQgaW1wcm92ZeKAlHRoaXMgcmVzZWFyY2guCkFsb25nIHRoZSB3YXksIHRoZSBnb2FsIGlzIHRoYXQgeW91IHdpbGwgZGV2ZWxvcCBhbiBpbmRlcGVuZGVudCByZXNlYXJjaCBwcm9ncmFtLgpJdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgaW1wbGVtZW50IHN0cm9uZyBzY2llbnRpZmljIG1ldGhvZHMsIGFuZCBjb25kdWN0IG91cnNlbHZlcyBpbiBhbiBldGhpY2FsIHdheS4KRGlzc2VtaW5hdGlvbiBvZiB0aGUga25vd2xlZGdlIHdlIGdhaW4gaXMgY3JpdGljYWwgdG8gdGhlIGFkdmFuY2VtZW50IG9mIG91ciBmaWVsZC4KVGh1cywgYSBwcmltYXJ5IGdvYWwgb2Ygb3VyIHdvcmsgaXMgcHVibGlzaGluZyBvdXIgZmluZGluZ3MgaW4gc2NpZW50aWZpYyBqb3VybmFscy4KCiMgVGhlIGJyb2FkIGdvYWxzIG9mIG1lbnRvcmluZyB7I2dvYWxzLW1lbnRvcmluZ30KClRoZSBnb2FscyBvZiBtZW50b3JpbmcgaW4gdGhpcyBsYWIgYXJlIGZvciBlYWNoIHRyYWluZWUgKnRvIHJlY2VpdmUgdGhlb3JldGljYWwgYW5kIHRlY2huaWNhbCB0cmFpbmluZywgdG8gd29yayBwcm9kdWN0aXZlbHkgb24gaW50ZXJlc3RpbmcgcmVzZWFyY2ggcHJvamVjdHMsIGFuZCB0byBiZXN0IHByZXBhcmUgdGhlbXNlbHZlcyBmb3IgdGhlaXIgZnV0dXJlIGNhcmVlciouClRodXMsIGEgbWFqb3IgZW1waGFzaXMgb2YgeW91ciB3b3JrIHdpbGwgYmUgZGF0YSBhbmFseXNpcywgd3JpdGluZywgYW5kIHB1Ymxpc2hpbmcgcGFwZXJzIGluIHN0cm9uZyBqb3VybmFscy4KSGVyZSBJIGxpc3Qgc29tZSBleHBlY3RhdGlvbnMgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIGxhYiBvcGVyYXRlcyBhbmQgaG93IHdlIGNhbiBhY2hpZXZlIHRoZXNlIGdvYWxzIHRvZ2V0aGVyLgoKIyBXaGF0IHRyYWluZWVzIGNhbiBleHBlY3Qgb2YgbWUgeyNleHBlY3RPZk1lfQoKSGVyZSBhcmUgd2hhdCB0cmFpbmVlcyBjYW4gZXhwZWN0IG9mIG1lOgoKMS4gSSB3aWxsIHdvcmsgdGlyZWxlc3NseSBmb3IgdGhlIGdvb2Qgb2YgdGhlIGxhYiBncm91cDsgdGhlIHN1Y2Nlc3Mgb2YgZXZlcnkgbWVtYmVyIG9mIG91ciBncm91cCBpcyBteSB0b3AgcHJpb3JpdHksIG5vIG1hdHRlciB0aGVpciBwZXJzb25hbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMsIG9yIGNhcmVlciBnb2Fscy4KMS4gSSB3aWxsIHNldCBoaWdoIHN0YW5kYXJkcyBmb3IgdGhlIGxhYiBncm91cCwgaW5jbHVkaW5nIHlvdSwgb3RoZXJzLCBhbmQgbXlzZWxmLgoxLiBJIHdpbGwgcHJvdmlkZSB5b3UgZ3VpZGFuY2UgYW5kIHJlc291cmNlcyB0byBjb25kdWN0IHJlc2VhcmNoIHByb2plY3RzIHdlIGFyZSBib3RoIGludGVyZXN0ZWQgaW4uCjEuIEkgd2lsbCBoZWxwIHlvdSBuYXZpZ2F0ZSB5b3VyIGdyYWR1YXRlIHByb2dyYW0gb2Ygc3R1ZHkuCjEuIEkgd2lsbCBsZWFkIGJ5IGV4YW1wbGUgYW5kIGZhY2lsaXRhdGUgeW91ciB0cmFpbmluZyBpbiBjb21wbGVtZW50YXJ5IHNraWxscyBuZWVkZWQgdG8gYmUgYSBzdWNjZXNzZnVsIHNjaWVudGlzdCwgc3VjaCBhcyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb24gc2tpbGxzLCBncmFudCB3cml0aW5nLCBsYWIgbWFuYWdlbWVudCwgbWVudG9yaW5nLCBhbmQgc2NpZW50aWZpYyBwcm9mZXNzaW9uYWxpc20uCjEuIEkgd2lsbCBwcm92aWRlIHlvdSBndWlkYW5jZSBhbmQgcmVzb3VyY2VzIGZvciB5b3VyIGNhcmVlciBkZXZlbG9wbWVudC4KMS4gSSB3aWxsIHJlcGx5IHByb21wdGx5IHRvIHRoZSBtYXRlcmlhbHMgeW91IHNlbmQgbWUgKGUuZy4sIGVtYWlscywgZHJhZnRzLCBhbmQgc2xpZGVzKS4KMS4gSSB3aWxsIHJlc3BlY3QgeW91ciB0aW1lIGFuZCB3b3JrLCBhbmQgZ2l2ZSB5b3UgY3JlZGl0IGFwcHJvcHJpYXRlbHkuCjEuIEkgd2lsbCBwcm92aWRlIGFkdmljZSBvbiBvdGhlciBpc3N1ZXMsIGlmIHlvdSBjaG9vc2UgdG8gZW5nYWdlIG1lLgoxLiBJIHdpbGwgYmUgeW91ciBhZHZvY2F0ZS4KCiMgV2hhdCBJIGV4cGVjdCBvZiB0cmFpbmVlcyB7I215RXhwZWN0YXRpb25zfQoKSGVyZSBpcyB3aGF0IEkgZXhwZWN0IG9mIHRyYWluZWVzOgoKMS4gTWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiByZXNlYXJjaCBhbmQgdHJhaW5pbmctcmVsYXRlZCBhY3Rpdml0aWVzCjEuIFdvcmsgaW4gbGFiIGR1cmluZyB0aGUgd29ya2RheSAod2hlbiB5b3UgYXJlIG5vdCBpbiBjbGFzcywgdGVhY2hpbmcsIG9yIGRvaW5nIGNsaW5pY2FsIHdvcmspCjEuIENvbmR1Y3QgYWxsIHJlc2VhcmNoIGFuZCB0cmFpbmluZy1yZWxhdGVkIGFjdGl2aXRpZXMgcmVzcG9uc2libHkKMS4gUmVzcGVjdCBvdGhlciBsYWIgbWVtYmVycwoKSSBhbSBhbWJpdGlvdXMgYW5kIGhhdmUgaGlnaCBzdGFuZGFyZHMsIGFuZCBJIGV4cGVjdCB0aGUgc2FtZSBmcm9tIHlvdS4KQmVsb3cgYXJlIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBleHBlY3RhdGlvbnM6CgojIyBSZXNlYXJjaCBwcm9qZWN0cyBhbmQgdHJhaW5pbmcgeyNyZXNlYXJjaFRyYWluaW5nfQoKVGFrZSBhZHZhbnRhZ2Ugb2YgeW91ciBvcHBvcnR1bml0eSB0byB3b3JrIGF0IGEgd29ybGQtY2xhc3MgdW5pdmVyc2l0eSBieSBkZXZlbG9waW5nIGFuZCByZWZpbmluZyBzdGVsbGFyIHNjaWVudGlmaWMgc2tpbGxzLgpJIGV4cGVjdCB0aGF0IHlvdSB3aWxsIGxlYXJuIGhvdyB0byBwbGFuLCBkZXNpZ24sIGFuZCBjb25kdWN0IGhpZ2gtcXVhbGl0eSBzY2llbnRpZmljIHJlc2VhcmNoLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIG1haW50YWluIGdvb2QgcHJvZ3Jlc3Mgb24gdGhlaXIgcHJvamVjdHMuClRoaXMgaW5jbHVkZXM6IGtlZXBpbmcgdXBkYXRlZCBvbiB0aGUgbGl0ZXJhdHVyZSBhbmQgcmVzZWFyY2ggbWV0aG9kcywgYWN0aXZlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5cyB0byBjb25kdWN0IHlvdXIgcmVzZWFyY2ggcHJvamVjdHMgYW5kIGFwcGx5aW5nIHRoZW0sIHJlZ3VsYXJseSBkaXNjdXNzaW5nIHlvdXIgcmVzZWFyY2ggcHJvZ3Jlc3Mgd2l0aCBtZSwgZm9sbG93aW5nIHRoZSBwbGFucyBiYXNlZCBvbiBvdXIgZGlzY3Vzc2lvbnMsIGFuZCBwcmVzZW50aW5nIChjb25mZXJlbmNlcywgcHJlc2VudGF0aW9ucywgYW5kL29yIGpvdXJuYWwgYXJ0aWNsZXMpIHRoZSBmaW5kaW5ncyBhdCBhIHNhdGlzZmFjdG9yeSBsZXZlbC4KV3JpdGluZyBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGFiaWxpdHkgdG8gZGV2ZWxvcCBkdXJpbmcgZ3JhZHVhdGUgc2Nob29sLgpJIGV4cGVjdCB5b3UgdG8gd3JpdGUgZnJlcXVlbnRseSwgYW5kIEkgZW5jb3VyYWdlIHlvdSB0byB3cml0ZSBkYWlseS4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gcmVhZCBQYXVsIFNpbHZhJ3MgIltIb3cgdG8gV3JpdGUgYSBMb3RdKGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vSG93LVdyaXRlLUxvdC1QcmFjdGljYWwtUHJvZHVjdGl2ZS9kcC8xNDMzODI5NzM4KSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9DNlhWLTg0VVIpLCIgYW5kIEkgYW0gaGFwcHkgdG8gbGVuZCB0aGUgYm9vayB0byB5b3UuCkkgZW5jb3VyYWdlIHlvdSB0byB1c2UgRW5kTm90ZSwgWm90ZXJvLCBvciBhbm90aGVyIHJlZmVyZW5jZSBtYW5hZ2VyIHRvIG1hbmFnZSB5b3VyIHJlZmVyZW5jZXMgYW5kIHdyaXRlIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24gb2YgcGFwZXJzLgpSZWZlcmVuY2UgbWFuYWdlbWVudCBzb2Z0d2FyZSB3aWxsIHNhdmUgeW91IGxvdHMgb2YgdGltZS4KQWRkaXRpb25hbGx5LCBwbGVhc2UgZm9sbG93IHRoZSBsYWIncyBbd3JpdGluZyBndWlkZWxpbmVzXSh3cml0aW5nLmh0bWwpLgoKTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB5b3Ugd2lsbCBiZSBlbmdhZ2VkIGluIHJlc2VhcmNoIGFjdGl2aXRpZXMgYmV5b25kIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgpIYXZlIG11bHRpcGxlIHJlc2VhcmNoIHByb2plY3RzIHRvIHdvcmsgb24uCkhhdmluZyBtdWx0aXBsZSBvbmdvaW5nIHByb2plY3RzIHByb3ZpZGVzIGltcG9ydGFudCBkaXZlcnNpZmljYXRpb27igJRpZiBhIGdpdmVuIHByb2plY3QgaXMgbm90IHdvcmtpbmcgb3V0IGFzIGV4cGVjdGVkLCB5b3UgaGF2ZSBvdGhlciBwcm9qZWN0cyB5b3UgY2FuIHR1cm4gdG8uCkJ1dCBmb2N1cyBhbmQgZmluaXNoLgpUaGUgImN1cnJlbmN5IiBpbiBzY2llbmNlIGlzIHB1Ymxpc2hlZCBwYXBlcnPigJR0aGV5IGRyaXZlIGEgbG90IG9mIHdoYXQgd2UgZG8uCkJlY2F1c2Ugb3VyIGxhYiBpcyBzdXBwb3J0ZWQgYnkgdGF4cGF5ZXIgZG9sbGFycywgd2UgaGF2ZSBhbiBvYmxpZ2F0aW9uIHRvIGNvbXBsZXRlIGFuZCBkaXNzZW1pbmF0ZSBvdXIgZmluZGluZ3MuCkkgZXhwZWN0IHlvdSB0byBsZWFkIGZpcnN0LWF1dGhvcmVkIHByb2plY3RzIChpbiBhZGRpdGlvbiB0byBhbnkgY29sbGFib3JhdGl2ZSBwcm9qZWN0cykgYW5kIHRvIHB1Ymxpc2ggeW91ciB3b3JrIGluIGhpZ2gtaW1wYWN0IGpvdXJuYWxzLgpJdCBpcyBteSBwb2xpY3kgdGhhdCBzdHVkZW50cyBhcmUgZmlyc3QtYXV0aG9yIG9uIGFsbCB3b3JrIGZvciB3aGljaCB0aGV5IGxlYWQgdGhlIGRhdGEgYW5hbHlzaXMgYW5kIHdyaXRpbmcuCkkgd2lsbCBwdXNoIHlvdSB0byBwdWJsaXNoIHlvdXIgcmVzZWFyY2ggYXMgeW91IG1vdmUgdGhyb3VnaCB5b3VyIHRyYWluaW5nIHByb2dyYW0sIDx1Pm5vdDwvdT4gb25seSBhdCB0aGUgZW5kLgpJIGV4cGVjdCB0cmFpbmVlcyB0byBiZSBsZWFkIGF1dGhvciBvbiBhdCBsZWFzdCB0d28gam91cm5hbCBwYXBlciBzdWJtaXNzaW9ucywgcHJlZmVyYWJseSB0aHJlZSBvciBmb3VyIChvciBtb3JlISkuClByb2R1Y3Rpdml0eSBpbiB0ZXJtcyBvZiBwdWJsaXNoaW5nIGhpZ2gtcXVhbGl0eSBwYXBlcnMgYW5kIHNlY3VyaW5nIGZ1bmRpbmcgaXMgY3J1Y2lhbCB0byBiZSBjb21wZXRpdGl2ZSBmb3IgbWFueSBqb2JzLgoKSSBleHBlY3QgeW91IHRvIGFwcGx5IGZvciBleHRlcm5hbCBmdW5kaW5n4oCUZXhhbXBsZXMgaW5jbHVkZSB0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIEdyYWR1YXRlIFJlc2VhcmNoIEZlbGxvd3NoaXAgUHJvZ3JhbSAoTlNGLUdSRlApIGFuZCB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGggTmF0aW9uYWwgUmVzZWFyY2ggU2VydmljZSBBd2FyZCAoTklIIE5SU0EpLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBzdWJtaXQgYSBOU0YtR1JGUCBpbiB0aGVpciBmaXJzdCBzZW1lc3Rlci4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gc3VibWl0IGEgTklIIE5SU0EgaW4gdGhlaXIgc2Vjb25kIG9yIHRoaXJkIHllYXIuCkdldHRpbmcgYSBmaXJzdC1hdXRob3JlZCBwdWJsaWNhdGlvbiBpbiB5b3VyIGZpcnN0IG9yIHNlY29uZCB5ZWFyIGlzIGltcG9ydGFudCBmb3IgdGhlc2UgKGFuZCBvdGhlcikgZmVsbG93c2hpcHMgYW5kIGZvciBhd2FyZHMuCgpGb3IgbWFueSBqb2JzLCBwcmVzZW50YXRpb24gc2tpbGxzIGFyZSBhbHNvIGhpZ2hseSBpbXBvcnRhbnQsIGluY2x1ZGluZyBza2lsbHMgaW4gcHJlc2VudGluZyByZXNlYXJjaCB0byBicm9hZCBhdWRpZW5jZXMgb2Ygc2NpZW50aXN0cyBvdXRzaWRlIG9mIHlvdXIgYXJlYS4KRm9yIGFjYWRlbWljIHBvc2l0aW9ucywgd2hpbGUgcGFwZXJzIGFuZCBncmFudHMgImdldCB5b3VyIGZvb3QgaW4gdGhlIGRvb3IiIGFuZCBoZWxwIHlvdSBnZXQgYW4gaW50ZXJ2aWV3LCB0aGUgImpvYiB0YWxrIiAodHlwaWNhbGx5IHRvIHRoZSB3aG9sZSBEZXBhcnRtZW50KSBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGNyaXRlcmlvbiBkdXJpbmcgYSBqb2IgaW50ZXJ2aWV34oCUYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBhbGwgZmFjdWx0eSBzZWUuClRodXMsIEkgZXhwZWN0IHlvdSB0byBwcmVzZW50IHlvdXIgcmVzZWFyY2ggZnJlcXVlbnRseSBhbmQgaW4gbXVsdGlwbGUgb3V0bGV0cy4KQ2hhbGxlbmdlIHlvdXJzZWxmIGJ5IHByZXNlbnRpbmcgeW91ciB3b3JrIGF0IG1lZXRpbmdzIGFuZCBzZW1pbmFycyBhcyBlYXJseSBhcyB5b3UgY2FuLgpJIGFsc28gZXhwZWN0IHlvdSB0byBnbyB0byBEZXBhcnRtZW50YWwgY29sbG9xdWlhIHNlcmllcyBieSBzcGVha2VycyB3aG8gYXJlIG91dHNpZGUgb2YgeW91ciBhcmVhLgoKV2Ugd2lsbCBoYXZlIG1lZXRpbmdzIHRvIGRpc2N1c3MgdGhlIHJlc2VhcmNoIHByb2plY3QocykgeW91IGZpbmQgaW50ZXJlc3RpbmcgdGhhdCBhbHNvIGFkdmFuY2UgdGhlIGxhYidzIGludGVyZXN0cy4KSSBhbHdheXMgd2VsY29tZSBuZXcgaWRlYXMgYW5kIHByb2plY3QgcHJvcG9zYWxzLCBzbyBwbGVhc2UgY29tZSB0byBtZSBpZiB5b3Ugd2FudCB0byBkaXNjdXNzIG5ldyBwcm9qZWN0cy4KQSBwaWVjZSBvZiBhZHZpY2UgdGhhdCB3YXMgZ2l2ZW4gdG8gbWUgYXMgYSBncmFkdWF0ZSBzdHVkZW50IHRoYXQgSSBwYXNzIG9udG8geW91IGlzIHRvIGZpbmQgYSBxdWVzdGlvbiBvciBwcm9ibGVtIHRoYXQgZXhjaXRlcyB5b3UgYW5kICJkYXRlIiBpdC4KWW91IHdpbGwga25vdyB0aGF0IHlvdSBoYXZlIGZvdW5kIGFuIGlkZWEgdGhhdCB0cnVseSBleGNpdGVzIHlvdSB3aGVuIHlvdSBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIGFib3V0IGl0IHdoaWxlIGJydXNoaW5nIHlvdXIgdGVldGgsIGdvaW5nIGZvciB3YWxrcywgZXRjLgpNdWNoIG9mIHRoZSBpbXBvcnRhbnQgYW5kIGV4Y2l0aW5nIHdvcmsgaW4gc2NpZW5jZSBoYXBwZW5zIGF0IHRoZSBpZGVhcyBzdGFnZS4KCiMjIERhdGEgYW5kIHJlc2VhcmNoIG1hdGVyaWFscyB7I2RhdGFBbmRSZXNlYXJjaE1hdGVyaWFsc30KCkNvbmZpZGVudGlhbGl0eSBvZiBkYXRhIGlzIHBhcmFtb3VudC4KQWxsIGhhcmQtY29weSBwaHlzaWNhbCByZXNlYXJjaCBkYXRhIG11c3QgcmVtYWluIGluIHRoZSBsYWIuCkFsbCBlbGVjdHJvbmljIGRhdGEgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGxhYiwgb24gdW5pdmVyc2l0eSBjb21wdXRlcnMsIG9yIHNlY3VyZSBwcml2YXRlIGNvbXB1dGVycy4KRWxlY3Ryb25pYyBkYXRhIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gcHVibGljIGNvbXB1dGVycy4KSWRlbnRpZmlhYmxlIGVsZWN0cm9uaWMgZGF0YSBzaG91bGQgYmUgc3RvcmVkIG9ubHkgb24gdGhlIGxhYidzIFJEU1Mgc2hhcmUgYW5kIHNob3VsZCBub3QgYmUgc2F2ZWQgb250byB5b3VyIGNvbXB1dGVyLgpXaGVuIHdvcmtpbmcgZnJvbSBwcml2YXRlIHNwYWNlcywgdGhlIHVuaXZlcnNpdHkgVlBOIGNhbiBiZSBhY2Nlc3NlZCB0byBlbnN1cmUgYSBzZWN1cmUgaW50ZXJuZXQgY29ubmVjdGlvbi4KCllvdSBhcmUgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gZGV0YWlsZWQsIG9yZ2FuaXplZCwgYW5kIGFjY3VyYXRlIGxhYm9yYXRvcnkgcmVjb3JkcyBpbiBhIGxhYiBub3RlYm9vay4KQmUgYXdhcmUgdGhhdCBhbGwgdGFuZ2libGUgcmVzZWFyY2ggZGF0YSBhbmQgcmVsYXRlZCByZXNlYXJjaCBtYXRlcmlhbHMgYXJlIG15IHByb3BlcnR5IGFzIHRoZSBsYWIgZGlyZWN0b3IuCldoZW4geW91IGxlYXZlIHRoZSBsYWIsIEkgZW5jb3VyYWdlIHlvdSB0byByZXRhaW4gYWNjZXNzIHRvIHRoZSBsYWIncyByZXNlYXJjaCBkYXRhIHZpYSBWUE4gdG8gdGhlIGxhYiBkcml2ZSAoUkRTUyBzaGFyZSkuCk9uZSBmdWxsIHNldCBvZiBhbGwgZGF0YSBtdXN0IHN0YXkgaW4gdGhlIGxhYiwgd2l0aCBhcHByb3ByaWF0ZSBhbmQgYWNjZXNzaWJsZSBkb2N1bWVudGF0aW9uLgpSZWd1bGFybHkgYmFjayB1cCB0aGUgZmlsZXMgb24geW91ciBjb21wdXRlciB1c2luZyBNaWNyb3NvZnQgT25lRHJpdmUsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZSB1bml2ZXJzaXR5LgpEZS1pZGVudGlmaWVkIGRhdGEgYW5kIGFuYWx5c2lzIHNjcmlwdHMgYXNzb2NpYXRlZCB3aXRoIHByb2plY3RzIHNob3VsZCBiZSBzYXZlZCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IG9mIHRoZSBsYWIncyBHaXRMYWIgcGFnZSAoaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKSwgd2hpY2ggaXMgaG9zdGVkIGJ5IHRoZSB1bml2ZXJzaXR5IGFuZCBhcHByb3ZlZCBieSBvdXIgSVJCLgoKIyMgUmVzZWFyY2ggZXRoaWNzIHsjcmVzZWFyY2hFdGhpY3N9CgpZb3Ugc2hvdWxkIHJlc3BlY3QgYWxsIGV0aGljYWwgc3RhbmRhcmRz4oCUaW5jbHVkaW5nIGNvbXBsaWFuY2Ugd2l0aCBhbGwgdW5pdmVyc2l0eSwgc3RhdGUsIGFuZCBmZWRlcmFsIHJlZ3VsYXRpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBBUEEgRXRoaWNzIENvZGXigJRhcyB0aGV5IHJlbGF0ZSB0byByZXNwb25zaWJsZSBjb25kdWN0IGluIHJlc2VhcmNoLCBwb3NzaWJsZSBjb25mbGljdHMgb2YgaW50ZXJlc3QsIHByaXZhY3kgYW5kIGh1bWFuIHN1YmplY3RzIHJlc2VhcmNoLCBsYWJvcmF0b3J5IHNhZmV0eSwgYXV0aG9yc2hpcCwgcGVlci1yZXZpZXcgZ3VpZGVsaW5lcywgYW5kIGRhdGEgb3duZXJzaGlwLCByZXBvcnRpbmcsIGFuZCBzaGFyaW5nLgpXaGVuIGV0aGljYWwgZGlsZW1tYXMgb3IgdW5jZXJ0YWludGllcyBhcmlzZSwgYXNrIG1lIGFuZCBvdGhlcnMgZm9yIGd1aWRhbmNlLgpDb25zdWx0LCBjb25zdWx0LCBjb25zdWx0IQoKSW4gdGhpcyBsYWIsIHdlIHdvcmsgaGFyZCB0byBkbyB0aGUgYmVzdCBzY2llbmNlIHdlIGNhbi4KRHVyaW5nIHRoZSBwcm9jZXNzLCBvYnN0YWNsZXMgYW5kIGZydXN0cmF0aW9ucyBhcmUgaW5ldml0YWJsZSwgYW5kIHNvbWV0aW1lcyBtb3JlIGNvbW1vbiB0aGFuIHlvdSB3b3VsZCBpbWFnaW5lLgpJdCBpcyBteSBob3BlIHRoYXQgd2Ugd2lsbCB3b3JrIHRvZ2V0aGVyIHRvIHRhY2tsZSB0aGVzZSBjaGFsbGVuZ2VzIGFuZCB0byBidWlsZCB1cCB5b3VyIHJlc2lsaWVuY2UuClRvIHRoaXMgZW5kLCBwbGVhc2Uga2VlcCBtZSB1cGRhdGVkIG9uIHlvdXIgcHJvZ3Jlc3PigJRib3RoIHRoZSBnb29kIGFuZCBiYWQuCgpNaXN0YWtlcyBhcmUgaW5ldml0YWJsZSBhbmQgYXJlIHBhcnQgb2YgeW91ciB0cmFpbmluZywgc28gZG8gbm90IGZlZWwgYmFkIGFib3V0IG1ha2luZyBtaXN0YWtlc+KAlEkgbWFrZSBtaXN0YWtlcyBvbiBhIGRhaWx5IGJhc2lzLgpJIHN0cml2ZSBmb3IgdGhlIGxhYiB0byBwcm92aWRlIGEgc3VwcG9ydGl2ZSBlbnZpcm9ubWVudCB0byBhc2sgcXVlc3Rpb25zIGFuZCBhZG1pdCBtaXN0YWtlcy4KQXMgeW91ciBtZW50b3IsIEkgYW0gYWxzbyByZXNwb25zaWJsZSBmb3IgeW91ciByZXNlYXJjaCBhbmQgdHJhaW5pbmcuClNvIHBsZWFzZSBkbyBsZXQgbWUga25vdyBpZiBzdWNoIHRoaW5ncyBoYXBwZW4gYW5kIHdlIHdpbGwgd29yayB0b2dldGhlciB0byByZWNvdmVyIGZyb20gdGhlbS4KVXN1YWxseSB0aGUgZWFybGllciB5b3UgaW5mb3JtIG1lLCB0aGUgbGVzcyBkYW1hZ2UgdGhlcmUgd2lsbCBiZS4KQmVpbmcgZnJhbmsgYWJvdXQgeW91ciBtaXN0YWtlcyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCkhvd2V2ZXIsIHRoaW5ncyBsaWtlIGludGVudGlvbmFsbHkgZmFraW5nIGRhdGEgYW5kIGludGVudGlvbmFsbHkgY292ZXJpbmcgbWlzdGFrZXMgYXJlIHVuYWNjZXB0YWJsZSBhbmQgd2lsbCBsZWFkIHRvIHNldmVyZSBjb25zZXF1ZW5jZXMuCgojIyBUaW1lIGluIGxhYiB7I3RpbWVJbkxhYn0KCkkgZXhwZWN0IHlvdSB0byBiZSBhdCB3b3JrIGFuZCBvbiBjYW1wdXMgZHVyaW5nIHRoZSB3b3JrZGF5OiA5aXNo4oCTNWlzaCBvciA4aXNo4oCTNGlzaC4KSW4gYWRkaXRpb24sIEkgZXhwZWN0IHlvdXIgYXZhaWxhYmlsaXR5IHRvIHNwYW4gOeKAkzUgZm9yIHNjaGVkdWxpbmcgbWVldGluZ3Mgd2l0aCBtZSBvciBtZW1iZXJzIG9mIHRoZSB0ZWFt4oCUdGhlIHNhbWUgaG91cnMsIGdlbmVyYWxseSwgdGhhdCB0aGUgcHJvZ3JhbSBhdHRlbXB0cyB0byBzY2hlZHVsZSBtZWV0aW5ncy4KRHVyaW5nIHRoZSB3b3JrZGF5LCB5b3UgYXJlIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGxhYiB3aGVuIHlvdSBhcmUgbm90IGluIGNsYXNzLCB0ZWFjaGluZywgb3IgZG9pbmcgY2xpbmljYWwgd29yay4KVGhpcyBpcyBub3QgYWJvdXQgYWNjb3VudGFiaWxpdHnigJRyYXRoZXIsIGl0IGlzIHRvIHRoZSBiZW5lZml0IG9mIHlvdSBhbmQgdGhlIHRlYW0uCk91ciBhcHByb2FjaCBpcyBvcHRpbWFsIGZvciB0aGUgdHlwZSBvZiBwcm9qZWN0cyB3ZSBjYXJyeSBvdXQ6IGxvbmdpdHVkaW5hbCBwcm9qZWN0cyBzdWNoIGFzIG91cnMgYXJlIG9uZSBiaWcgZW50ZXJwcmlzZSB3aXRoIG1hbnkgbW92aW5nIHBhcnRzLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB3b3JrIHRvZ2V0aGVyIHNtb290aGx5LgpFYWNoIHN0dWRlbnQncyBpbmRpdmlkdWFsIHByb2plY3QgaXMgZW1iZWRkZWQgaW4gdGhhdCBsYXJnZXIgdW1icmVsbGEgKHJldGFpbmluZyBlYWNoIHN0dWRlbnQncyB1bmlxdWVuZXNzLCBpZGVhcywgZXRjLikuClRodXMsIHRoZSBwaHlzaWNhbCBpbnRlcmFjdGlvbnMgZm9yIHRoZSB3aG9sZSB0ZWFtLCBpbiBvbmUgc3BhY2UsIHdpdGggc2hhcmVkIHdvcmsgZXRoaWMsIGFyZSBzbyBpbXBvcnRhbnQuClBhcnQgb2YgeW91ciBqb2IgaXMgdG8gYmUgaW4gdGhlIGxhYiAod2l0aCB5b3VyIGRvb3Igb3BlbikgYW5kIHRvIHRhbGsgd2l0aCBvdGhlciBwZW9wbGUgYWJvdXQgeW91ciByZXNlYXJjaC4KV2UgYWxsIGJlbmVmaXQgZnJvbSBoYXZpbmcgYSBncm91cCBvZiBwZW9wbGUgd2UgY2FuIHRhbGsgd2l0aCBhYm91dCByZXNlYXJjaCBxdWVzdGlvbnMgYW5kIHByb2JsZW1zLgpXZSBoYXZlIGEgY29sbGFib3JhdGl2ZSBsYWIgZW52aXJvbm1lbnQuCk91ciBsYWIgd29ya3MgYXMgYSB0ZWFtLCBhbmQgb3RoZXIgbGFiIG1lbWJlcnMgY291bnQgb24geW91IGJlaW5nIHRoZXJlLgpMaWtld2lzZSwgeW91IGJlbmVmaXQgZnJvbSBoYXZpbmcgb3RoZXIgdGVhbSBtZW1iZXJzLCBteXNlbGYsIGFuZCBEZXBhcnRtZW50YWwgc3RhZmYgYXZhaWxhYmxlLgpXb3JraW5nIGluIHRoZSBsYWIgc3BhY2UgaGVscHMgaW1wcm92ZSBxdWFsaXR5IGNvbnRyb2wgb2YgbGFiIHByb2NlZHVyZXMgYW5kIGNhbiBsZWFkIHRvIGV4Y2l0aW5nIGNvbGxhYm9yYXRpdmUgcHJvamVjdHMuClRoaXMgc2hvcnQgYmx1cmIgb24gaG93ICJbSXNvbGF0aW9uIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBlbmVtaWVzIG9mIGdyYWR1YXRlIHN0dWRlbnRzXShodHRwczovL3d3dy5pbnNpZGVoaWdoZXJlZC5jb20vdmlld3MvMjAwNS8xMC8yNi93ZS1uZWVkLWh1bWFuaXRpZXMtbGFicykiIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0dLNTYtN0xMVykgbWF5IGdpdmUgeW91IHNvbWUgaW5zaWdodCB3aHkgZmFjZXRpbWUgaW4gdGhlIGxhYiBpcyBzbyBpbXBvcnRhbnQ6Cgo+ICJJIHdvbmRlciBob3cgYW4gRW5nbGlzaCBwcm9mZXNzb3Igd291bGQgZmVlbCBzcGVuZGluZyBhIHdlZWsgaW4gYSBwaHlzaWNzIGxhYi4KPiBOb3QgYWJvdXQgdGhlIHNjaWVudGlmaWMgd29yaywgYnV0IGFib3V0IHRoZSBmcmVxdWVudCwgb25nb2luZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN0dWRlbnRzIGFuZCBwZWVycywgcG9zdC1kb2NzIGFuZCBmYWN1bHR5Lgo+IFNjaWVudGlzdHMgc2VlIGVhY2ggb3RoZXIgaW4gdGhlIGxhYiwgaWYgbm90IGRhaWx5LCB0aGVuIGF0IGxlYXN0IHdlZWtseS4KPiBUaGV5IGhhdmUgZnJlcXVlbnQgbGFiIG1lZXRpbmdzLCBjb2xsb3F1aWEgYW5kIGludGVyYWN0aW9uIHdpdGggc2Nob2xhcnMgYXQgb3RoZXIgdW5pdmVyc2l0aWVzIGFyb3VuZCBqb2ludCByZXNlYXJjaC4KPiBEdXJpbmcgbXkgZ3JhZHVhdGUgdHJhaW5pbmcgaW4gcHN5Y2hvbG9neSBhdCBNY0dpbGwgVW5pdmVyc2l0eSwgZXNwZWNpYWxseSBpbiB0aGUgcmVzZWFyY2ggbGFiIGF0IHRoZSBNb250cmVhbCBOZXVyb2xvZ2ljYWwgSW5zdGl0dXRlLCBJIHNwZW50IGhvdXJzIGhhbmdpbmcgYXJvdW5kIHRoZSBwb3N0LWRvY3MuCj4gSSBsZWFybmVkIGF0IGxlYXN0IGFzIG11Y2ggZnJvbSB0aGVtIGFzIEkgZGlkIGZyb20gbXkgaW50ZXJhY3Rpb25zIHdpdGggbXkgcHJvZmVzc29ycy4KPiBUaGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgSSB3b3VsZCBiZSBhdCB0aGUgbGFiIDkgdG8gNSBvciBtb3JlLCBldmVyeSBkYXkuCj4gSSBzYXcgbXkgYWR2aXNlciBldmVyeSBkYXkuIiDigJMgR2luYSBIaWF0dAoKT2YgY291cnNlLCB0aGVyZSBhcmUgZXhjZXB0aW9uczsgaWYgeW91IGFyZSBzaWNrLCBzdGF5IGhvbWUuCllvdSBkbyBub3QgbmVlZCBteSBwZXJtaXNzaW9uIHRvIGF0dGVuZCBtZWRpY2FsIGFwcG9pbnRtZW50cyBkdXJpbmcgbGFiIGhvdXJzLgpJZiB5b3UgYXJlIHVuYWJsZSB0byBjb21lIGludG8gbGFiIGR1ZSB0byBiYWQgd2VhdGhlciwganVzdCBsZXQgbWUga25vdyBhbmQgeW91IHNob3VsZCBiZSBhdmFpbGFibGUgdG8gYmUgcmVhY2gtYWJsZSBxdWlja2x5LCBqdXN0IGFzIHlvdSB3b3VsZCBiZSBpZiB5b3Ugd2VyZSBpbiBsYWIuCgpOZXZlcnRoZWxlc3MsIGdyYWR1YXRlIHNjaG9vbCBpcyBub3QgYSA0MCBob3VyIHBlciB3ZWVrIGpvYi4KR3JhZHVhdGUgc3R1ZGVudHMgY2FuIGV4cGVjdCB0byB3b3JrIGFuIGF2ZXJhZ2Ugb2YgNTAgaG91cnMgcGVyIHdlZWsuCk91dHNpZGUgb2YgdGhlIHdvcmtkYXksIHlvdSBhcmUgd2VsY29tZSB0byB3b3JrIGZyb20gdGhlIGxhYiwgb3LigJRhcyBsb25nIGFzIHlvdSBlbnN1cmUgY29uZmlkZW50aWFsaXR5IG9mIGRhdGHigJRmcm9tIGhvbWUgb3IgZnJvbSBvdGhlciBzcGFjZXMuClRoYXQgc2FpZCwgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGlzIGZvciB5b3UgdG8gZ2V0IHRoZSBqb2IgZG9uZeKAlHlvdSBhcmUgaW4geW91ciBjYXJlZXIgbm93IGFuZCBhcmUgaW52ZXN0aW5nIGluIHlvdXJzZWxmLgpHcmFkdWF0ZSByZXNlYXJjaCByZXF1aXJlcyBmdWxsLXRpbWUgZGVkaWNhdGlvbiBhbmQgeWVhci1yb3VuZCBlZmZvcnQuCgpEaXNjdXNzIHBvbGljaWVzIG9uIHdvcmsgaG91cnMsIHNpY2sgbGVhdmUsIGFuZCB2YWNhdGlvbiB3aXRoIG1lIGRpcmVjdGx5LgpJdCBpcyBpbXBvcnRhbnQgdG8gdGFrZSB0aW1lIG9mZiB0byBkZWNvbXByZXNzIGZyb20gdGltZSB0byB0aW1lLgpXb3JrLWxpZmUgYmFsYW5jZSBhbmQgdmFjYXRpb24gdGltZSBhcmUgZXNzZW50aWFsIGZvciBjcmVhdGl2ZSB0aGlua2luZyBhbmQgZ29vZCBoZWFsdGgsIGFuZCBJIGVuY291cmFnZSB5b3UgdG8gdGFrZSByZWd1bGFyIHZhY2F0aW9ucy4KWW91IGNhbiB0YWtlIHRocmVlIHdlZWtzIG9mIHZhY2F0aW9uIHRpbWUgZWFjaCB5ZWFyLCBhbmQgeW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayBkdXJpbmcgW3VuaXZlcnNpdHkgaG9saWRheXNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvZ3JhZHVhdGUtc3R1ZGVudC1lbXBsb3ltZW50LWFncmVlbWVudC9wYWlkLWxlYXZlcy1hbmQtaG9saWRheSkuCkluIGFkZGl0aW9uLCBJIGRvIG5vdCBleHBlY3Qgc3R1ZGVudHMgdG8gd29yayBiZXR3ZWVuIDEyLzE1IGFuZCB0aGUgZmlyc3Qgd2VlayBvZiBKYW51YXJ5LgpQbGVhc2UgZGlzY3VzcyB5b3VyIHZhY2F0aW9uIHBsYW5zIHdpdGggbWUgYmVmb3JlIGJvb2tpbmcgeW91ciB0cmlwLgpTdWJtaXQgcmVxdWVzdHMgZm9yIHRpbWUgb2ZmIGluIHBlcnNvbiwgYnkgcGhvbmUsIG9yIHZpYSBlbWFpbCwgbm90IGJ5IFNsYWNrLgpDb25zdWx0IHdpdGggbWUgYW5kIG5vdGlmeSBmZWxsb3cgbGFiIG1lbWJlcnMgaW4gYWR2YW5jZSBvZiBhbnkgcGxhbm5lZCBhYnNlbmNlcywgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxl4oCUYXQgbGVhc3QgdHdvIHdlZWtzJyBub3RpY2Ugb3IgbW9yZSBpZiBmZWFzaWJsZS4KUGxlYXNlIHBsYW4gdGhhdCBpZiB5b3UgYXJlIGF3YXksIG90aGVycyB3aWxsIG5lZWQgdG8gdGFrZSBvdmVyIHlvdXIgcmVzcG9uc2liaWxpdGllcywgc28gcGxhbm5pbmcgZm9yIGFkZXF1YXRlIGxlYWQgdGltZSBhbmQgdHJhaW5pbmcgbWF5IGJlIG5lY2Vzc2FyeS4KUGxlYXNlIGRpc2N1c3Mgd2l0aCBtZSBpZiB5b3UgcGxhbiB0byB0YWtlIGEgc3VtbWVyIGludGVybnNoaXAgb3IgYm9vdGNhbXAuCgojIyBNZWV0aW5ncyB7I21lZXRpbmdzfQoKVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG1lZXRpbmdzOiBsYWIgbWVldGluZ3MsIGdyb3VwIG1lZXRpbmdzLCBhbmQgb25lLW9uLW9uZSBtZWV0aW5ncy4KTGFiIG1lZXRpbmdzIG9jY3VyIHdlZWtseS4KQWxsIGxhYiBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBhdHRlbmQuClR5cGljYWwgZm9ybXMgb2YgbGFiIG1lZXRpbmdzIGFyZSBhcnRpY2xlIGRpc2N1c3Npb25zIChsZWQgYnkgb25lIGxhYiBtZW1iZXIpLCBwcm9qZWN0IHByZXNlbnRhdGlvbnMsIHRhbGtzIGdpdmVuIGJ5IGd1ZXN0IHNwZWFrZXJzLCBhbmQgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50IHdvcmtzaG9wcy4KWW91IHNob3VsZCByZWFkIHRoZXNlIG1hdGVyaWFscyBpbiBhZHZhbmNlLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgd2l0aCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIGR1cmluZyBsYWIgbWVldGluZ3MuClRoZSB1bml2ZXJzaXR5IGFuZCBvdXIgbGFiIHVzZSBPdXRsb29rIGZvciBzY2hlZHVsaW5nOyB5b3UgYXJlIGV4cGVjdGVkIHRvIGtlZXAgeW91ciB1bml2ZXJzaXR5IE91dGxvb2sgYWNjb3VudCB1cCB0byBkYXRlLgoKT25lLW9uLW9uZSBtZWV0aW5ncyBhcmUgNDUtbWluLCB3ZWVrbHkgbWVldGluZ3MgYmV0d2VlbiBlYWNoIHRyYWluZWUgYW5kIG1lLgpZb3UgY2FuIGFsc28gc2NoZWR1bGUgb25lLW9mZiBvbmUtb24tb25lIG1lZXRpbmdzIHdpdGggbWUuCldoZW4gc2NoZWR1bGluZyB5b3VyIG9uZS1vbi1vbmUgYW5kIG90aGVyIG1lZXRpbmdzLCBzZW5kIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSB0aW1lcyAoYmV0d2VlbiA5YW0gYW5kIDVwbSksIG5vdCBqdXN0IHlvdXIgcHJlZmVycmVkIHRpbWVzIQpZb3UgbWF5IGluZGljYXRlIHdoaWNoIG9mIHlvdXIgYXZhaWxhYmxlIHRpbWVzIGFyZSBwcmVmZXJyZWQgb3IgbGVzcyBwcmVmZXJyZWQuCk9uZS1vbi1vbmUgbWVldGluZ3MgYXJlIGRlc2lnbmVkIGZvciB1cyB0byBkaXNjdXNzIGFueSB0cmFpbmluZyBhbmQgcmVzZWFyY2gtcmVsYXRlZCBpc3N1ZXMgaW4gZGV0YWlsIGFuZCB0byBmb3JtIHBsYW5zIGZvciB0aGUgbmVhciBmdXR1cmUsIGluIGFkZGl0aW9uIHRvIGFueSBjaGFsbGVuZ2VzLgpNYWtlIHN1cmUgdGhhdCB5b3UgYWxzbyB1c2UgdGhpcyB0aW1lIHRvIGNvbW11bmljYXRlIG5ldyBpZGVhcyB0aGF0IHlvdSBoYXZlIGFib3V0IHlvdXIgd29yayBhbmQgY2hhbGxlbmdlcyB0aGF0IHlvdSBhcmUgZmFjaW5nLgpSZW1lbWJlcjogSSBjYW5ub3QgYWRkcmVzcyBvciBhZHZpc2UgYWJvdXQgaXNzdWVzIHRoYXQgeW91IGRvIG5vdCBicmluZyB0byBteSBhdHRlbnRpb24uCkkgZXhwZWN0IHRyYWluZWVzIHRvIGF0dGVuZCBhbGwgdGhlaXIgb25lLW9uLW9uZSBtZWV0aW5ncy4KSSB1bmRlcnN0YW5kIHRoYXQgc29tZXRpbWVzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0LCBzbyBvY2Nhc2lvbmFsIGNhbmNlbGxhdGlvbiBpcyBmaW5lLgpUaGF0IHNhaWQsIG5vdGUgdGhhdCBldmVuIGlmIHlvdSBoYXZlIG5vdGhpbmcgdG8gcmVwb3J0LCBzb21ldGltZXMgaGF2aW5nIHRoZSBtZWV0aW5nIGNhbiBzdGlsbCBiZSBhZHZhbnRhZ2VvdXMgYW5kIGl0IG1heSBiZSB3b3J0aCBvdXIgdGltZSB0byBzdGlsbCBjaGVjayBpbi4KRG8gbm90IGNhbmNlbCBtZWV0aW5ncyB3aXRoIG1lIGlmIHlvdSBmZWVsIHRoYXQgeW91IGhhdmUgbm90IG1hZGUgYWRlcXVhdGUgcHJvZ3Jlc3Mgb24geW91ciByZXNlYXJjaDsgdGhlc2UgbWlnaHQgYmUgdGhlIG1vc3QgY3JpdGljYWwgdGltZXMgdG8gbWVldCB3aXRoIGEgbWVudG9yLgoKWW91IGFyZSBleHBlY3RlZCB0byBhc2sgcXVlc3Rpb25zIGFuZCB0YWtlIG5vdGVzIGR1cmluZyBtZWV0aW5ncy4KQmUgcmVzcGVjdGZ1bCBvZiBteSB0aW1lIGFuZCBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyAodG8gcGFwZXJzLCBhbmFseXNpcyBjb2RlLCBldGMuKSBhZnRlciB0aGUgbWVldGluZywgYmFzZWQgb24geW91ciBub3RlcyBhbmQgb24geW91ciBvd24gdGltZeKAlHVubGVzcyBJIGFtIHdvcmtpbmcgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LgoKQmVzaWRlcyBtZWV0aW5ncywgdHJhaW5lZXMgYXJlIHdlbGNvbWUgdG8gZHJvcCBieSBteSBvZmZpY2UgYW55dGltZSB0byBkaXNjdXNzIHJlc2VhcmNoLCB0cmFpbmluZywgYW5kIGFkbWluaXN0cmF0aW9uLXJlbGF0ZWQgaXNzdWVzLgpJIGhhdmUgYW4gb3Blbi1kb29yIHBvbGljeTogbXkgZG9vciBpcyBhbHdheXMgb3BlbiAoZmlndXJhdGl2ZWx5IHNwZWFraW5nKS4KSSB3aWxsIGJlIGhhcHB5IHRvIG1lZXQgd2l0aCB5b3UgYXMgbG9uZyBhcyBJIGRvIG5vdCBoYXZlIGFub3RoZXIgb2JsaWdhdGlvbi4KTXkgb2ZmaWNlIGFuZCBwaG9uZSBudW1iZXIgaXM6IFtzZWUgW215IFVuaXZlcnNpdHkgcGFnZV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXS4KTXkgY2VsbCBpczogW2JsaW5kZWQgZm9yIHRoZSBpbnRlcm5ldOKApmp1c3QgYXNrXS4KCiMjIE9wZW4gc2NpZW5jZSB7I29wZW5TY2llbmNlfQoKV2UsIGFzIGEgbGFiLCB2YWx1ZSBhbmQgc3RyaXZlIHRvIGFkdmFuY2UgdGhlIG1pc3Npb24gb2YgW29wZW4gc2NpZW5jZV0oaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvMTAuMTAwMi9pY2QuMjMxNSkgdG8gaW1wcm92ZSB0aGUgYWNjZXNzaWJpbGl0eSwgcmVwcm9kdWNpYmlsaXR5LCBhbmQgcmVwbGljYWJpbGl0eSBvZiBzY2llbmNlLgpBcyBzdWNoLCBhbGwgbGFiIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIGNvbmR1Y3QgcmVzZWFyY2ggdHJhbnNwYXJlbnRseSBhbmQgdG8gcHJvbW90ZSByZXByb2R1Y2liaWxpdHkuClRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcHJlLSBvciBjby1yZWdpc3RlcmluZyBzdHVkaWVzLCBzaGFyaW5nIGFuYWx5c2lzIHNjcmlwdHMgYW5kIGRhdGEsIHVzaW5nIHZlcnNpb24gY29udHJvbCAoR2l0TGFiKSwgc3VibWl0dGluZyBbcHJlcHJpbnRzXShodHRwczovL3BzeWFyeGl2LmNvbSkgd2hlbiBzdWJtaXR0aW5nIGEgbWFudXNjcmlwdCB0byBhIGpvdXJuYWwsIGFuZCBwcm92aWRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgbGFicycgYXR0ZW1wdHMgdG8gcmVwbGljYXRlIGFuZCByZXByb2R1Y2Ugb3VyIGZpbmRpbmdzLgpXZSB1c2UgR2l0TGFiIGZvciB2ZXJzaW9uIGNvbnRyb2wuCk91ciBsYWIncyB0ZW1wbGF0ZSBmb3IgR2l0TGFiIHJlcG9zaXRvcmllcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiL1RlbXBsYXRlLgpPdXIgbGFiJ3MgdGVtcGxhdGUgZm9yIHByb2plY3RzIG9uIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIChPU0YpIGNhbiBiZSBmb3VuZCBoZXJlW14yXTogaHR0cHM6Ly9vc2YuaW8vNHc5c3YuCkZvbGxvdyBvdXIgW2xhYidzIGd1aWRlIGZvciBvcGVuIHNjaWVuY2VdKG9wZW5TY2llbmNlLmh0bWwpLgoKIyMgQ29sbGFib3JhdGlvbnMgeyNjb2xsYWJvcmF0aW9uc30KCkFsbCBsYWIgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byBleHBsb3JlIGNvbGxhYm9yYXRpb24gb3Bwb3J0dW5pdGllcyBib3RoIHdpdGhpbiBhbmQgb3V0c2lkZSBvZiB0aGUgbGFiLgpJIGFzayB0cmFpbmVlcyB0byAoMSkgcmVzcGVjdCB5b3VyIGNvbGxhYm9yYXRvcnMnIHRpbWUgYW5kIHJlc291cmNlcywgYW5kICgyKSBpbmZvcm0gbWUgaWYgeW91IGFyZSBzZWVraW5nIGNvbGxhYm9yYXRpb25zIHdpdGggb3IgYXJlIGNvbGxhYm9yYXRpbmcgd2l0aCByZXNlYXJjaGVycyAoZS5nLiwgZmluaXNoaW5nIHlvdXIgcHJvamVjdHMgaW4geW91ciBwcmV2aW91cyBsYWIpIG91dHNpZGUgb2YgdGhlIGxhYi4KVHJhaW5lZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBmaXJtIGZvb3RpbmcgaW4gdGhlaXIgcmVzZWFyY2ggcHJvZ3Jlc3MgaW4gdGhpcyBsYWIgYmVmb3JlIGNvbGxhYm9yYXRpbmcgd2l0aCBvdXRzaWRlIHJlc2VhcmNoZXJzLgpJIGV4cGVjdCB5b3UgdG8gZGlzY3VzcyBvcmRlciBvZiBhdXRob3JzaGlwIHdpdGggbWUgZWFybHkgb24gd2hlbiB0aGVyZSBhcmUgcG90ZW50aWFsIGNvbGxhYm9yYXRvcnMuCgojIyBSZWFkaW5ncyBhbmQgcmVzb3VyY2VzIHsjcmVhZGluZ3NSZXNvdXJjZXN9CgpUcmFpbmVlcyBhcmUgZXhwZWN0ZWQgdG8gcmVhZCBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgcmVsYXRpbmcgdG8gdGhlIGxhYiBhbmQgdG8gdGhlaXIgcmVzZWFyY2ggaW50ZXJlc3RzLgpFeGFtcGxlcyBvZiBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgYXJlIG9uIHRoZSBsYWIncyBHb29nbGUgRHJpdmUgZm9sZGVyIG9mIFtwcmltZXIgYXJ0aWNsZXNdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS91LzAvZm9sZGVycy8xWGxQVzM3QURmbjZpQ0N2cHQzczZWd1d4T01La2pKTnUpW14yXS4KSSBhbHNvIGV4cGVjdCB5b3UgdG8gcmVhZCBvbmUgb2YgdGhlIHByaW1lciBhcnRpY2xlcyBieSBTY2h3YXJ0eiAoMjAwOCkgdGl0bGVkLCAiW1RoZSBJbXBvcnRhbmNlIG9mIFN0dXBpZGl0eSBpbiBTY2llbnRpZmljIFJlc2VhcmNoXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFLaHlxWDUxWkwzVUVUMEhqRFJtdUFpeC1vN21lOUNxdy92aWV3P3VzcD1zaGFyaW5nKS4iCkl0IGlzIGltcG9ydGFudCB0byBmZWVsIGNvbWZvcnRhYmxlIGZlZWxpbmcgc3R1cGlkIGluIHNjaWVuY2U7IGlmIHlvdSAoYW5kIGFueSBvZiB1cykgZG8gbm90IGZlZWwgc3R1cGlkLCB3ZSBhcmUgbm90IGRvaW5nIHNjaWVuY2UgcmlnaHQhCkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlYWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgcHJvdG9jb2xzIGFib3V0IG91ciBwcm9qZWN0cy4KCldlIGhhdmUgYSBsaXN0IG9mIGxhYiByZXNvdXJjZXMgZm9yIGdyYWR1YXRlIHN0dWRlbnRzIG9uIG91ciBMYWIncyBUcmVsbG8gYm9hcmQgY2FsbGVkICJHcmFkIFN0dWRlbnRzIlteMl06IGh0dHBzOi8vdHJlbGxvLmNvbS9iL1dqcWJncFc5L2dyYWQtc3R1ZGVudHMuClRoZSBUcmVsbG8gYm9hcmQgaW5jbHVkZXMgaXRlbXMgZm9yIG9uYm9hcmRpbmcsIGltcG9ydGFudCBmb3VuZGF0aW9uYWwgc2tpbGxzIGZvciBzY2llbnRpZmljIHRyYWluaW5nLCB1c2VmdWwgc29mdHdhcmUsIGFuZCByZWxldmFudCBqb3VybmFscywgb3JnYW5pemF0aW9ucywgY29uZmVyZW5jZXMsIGFuZCBsaXN0c2VydnMuCkl0IGFsc28gaW5jbHVkZXMgdHJhaW5pbmcgbWF0ZXJpYWxzIGZvciB2YXJpb3VzIHNvZnR3YXJlIChlLmcuLCBSRURDYXAsIEdpdExhYiwgUikuCkFuZCBpdCBpbmNsdWRlcyBhIGxpc3Qgb2YgdGhlIHRpbWVzIHRvIGJsb2NrIG9mZiBkdXJpbmcgdGhlIHNlbWVzdGVyLgoKRGF0YSBhbmFseXNpcyBndWlkZXMgZm9yIHRoZSBsYWIgYXJlIGF2YWlsYWJsZSBoZXJlOiBodHRwczovL2RldnBzeWxhYi5naXRodWIuaW8vRGF0YUFuYWx5c2lzCgojIyBUcmFpbmluZyB7I3RyYWluaW5nfQoKSSBleHBlY3QgeW91IHRvIHRha2Ugb3duZXJzaGlwIG92ZXIgeW91ciBlZHVjYXRpb25hbCBleHBlcmllbmNlcy4KWW91ciBlZHVjYXRpb24gaXMgeW91ciByZXNwb25zaWJpbGl0eeKAlHlvdSBoYXZlIHRoZSBwcmltYXJ5IHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHlvdXIgZGVncmVlLgpJIGVuY291cmFnZSB5b3UgdG8gZm9sbG93IHRoZSBbcmVjb21tZW5kZWQgdGltZWxpbmVzXSgjdGltZWxpbmVzKSBmb3IgW3Jlc2VhcmNoXSgjdGltZWxpbmUtcmVzZWFyY2gpLCBbY291cnNld29ya10oI3RpbWVsaW5lLWNvdXJzZXdvcmspLCBhbmQgW2NsaW5pY2FsIHdvcmtdKCN0aW1lbGluZS1jbGluaWNhbCkgKHNlZSB0aGUgQXBwZW5kaXgpLiAKWW91IHNob3VsZCBtYWludGFpbiBhIGhpZ2ggbGV2ZWwgb2YgcHJvZmVzc2lvbmFsaXNtLCBzZWxmLW1vdGl2YXRpb24sIGVuZ2FnZW1lbnQsIHNjaWVudGlmaWMgY3VyaW9zaXR5LCBhbmQgZXRoaWNhbCBzdGFuZGFyZHMuCllvdSBzaG91bGQgYWxzbyBiZSBrbm93bGVkZ2VhYmxlIG9mIGFuZCBjb21wbHkgd2l0aCBhbGwgcG9saWNpZXMsIGRlYWRsaW5lcywgYW5kIHJlcXVpcmVtZW50cyBvZiB0aGUgZ3JhZHVhdGUgcHJvZ3JhbSwgdGhlIGdyYWR1YXRlIGNvbGxlZ2UsIGFuZCB0aGUgdW5pdmVyc2l0eS4KRnVydGhlciwgSSBleHBlY3QgeW91IHRvIGFjdGl2ZWx5IGN1bHRpdmF0ZSB5b3VyIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudC4KVUkgaGFzIG91dHN0YW5kaW5nIHJlc291cmNlcyBpbiBwbGFjZSB0byBzdXBwb3J0IHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCBmb3Igc3R1ZGVudHMsIGluY2x1ZGluZyBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgc2VtaW5hcnMgYW5kIHdvcmtzaG9wcyBvbiB0b3BpY3Mgc3VjaCBhcyBvcmFsIGNvbW11bmljYXRpb24sIHNjaWVudGlmaWMgd3JpdGluZywgY29sbGFib3JhdGl2ZSByZXNlYXJjaCwgc3RhdGlzdGljYWwgbWV0aG9kcywgdGVhY2hpbmcsIGFuZCBtZW50b3JpbmcuCkkgZXhwZWN0IHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSByZXNvdXJjZXMuCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHRhbGsgd2l0aCBvdGhlciBtZW1iZXJzIG9mIHRoZSBsYWIsIG90aGVyIHN0dWRlbnRzLCBhbmQgZmFjdWx0eSB0byBsZWFybiB3YXlzIG9mIGVmZmVjdGl2ZWx5IG5hdmlnYXRpbmcgZ3JhZHVhdGUgc2Nob29sLgoKQXZvaWQgY2xpbmljYWwgY2xpcXVlLWlzaG5lc3MgYW5kIGluc3VsYXJpdHkuClRoZSBtb3N0IGlubm92YXRpdmUgc2NpZW5jZSB0cmFuc2NlbmRzIHRyYWRpdGlvbmFsIGJvdW5kYXJpZXMuCkkgZXhwZWN0IHlvdSB0byBzcGVuZCB0aW1lIGFuZCB0YWxrIHNjaWVuY2Ugd2l0aCBncmFkdWF0ZSBzdHVkZW50cyBhbmQgZmFjdWx0eSBpbiBhcmVhcyBvdXRzaWRlIG9mIGNsaW5pY2FsIChlLmcuLCBCQ04sIGNvZ25pdGlvbinigJRib3RoIHRvIGJyb2FkZW4geW91ciBwZXJzcGVjdGl2ZXMgYW5kIHRvIGluY29ycG9yYXRlIGJhc2ljIHNjaWVuY2UgcGVyc3BlY3RpdmVzIGludG8geW91ciB3b3JrLCB3aGlsZSBhbHNvIGJlaW5nIGEgZ29vZCBEZXBhcnRtZW50YWwgY2l0aXplbi4KQ2xpbmljYWwgc3R1ZGVudHMgYXQgc29tZSBwcm9ncmFtcyB3cm9uZ2x5IHRoaW5rIHRoZXkgYXJlIHNwZWNpYWwgYW5kIHRoaW5rIG9mIHRoZWlyIHdvcmsgYXMgc3VwZXJpb3IgdG8gYmFzaWMgc2NpZW5jZS4KQ2xpbmljYWwgc2NpZW5jZSBpcyBub3QgYSByZXNlYXJjaCBhcmVh4oCUY2xpbmljYWwgc2NpZW5jZSB1c2VzIGJhc2ljIHNjaWVuY2UgKGUuZy4sIGNvZ25pdGl2ZSwgc29jaWFsLCBkZXZlbG9wbWVudGFsLCBiaW9sb2dpY2FsIHNjaWVuY2UpIGluIHJpZ29yb3VzIHdheXMgdG8gYW5zd2VyIGNsaW5pY2FsbHkgcmVsZXZhbnQgcXVlc3Rpb25zLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIGNvbXBseSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdHJhaW5pbmcgcGxhbnMgKGUuZy4sIHRyYWluaW5nIHBsYW5zIG9mIHlvdXIgZGVncmVlIHByb2dyYW0pLCBzdWNoIGFzIHRha2luZyByZXF1aXJlZCBjb3Vyc2VzLCBtYWludGFpbmluZyBwYXNzaW5nIGdyYWRlcywgZnVsZmlsbGluZyB0ZWFjaGluZyBhc3Npc3RhbnQgZHV0aWVzLCBjbGluaWNhbCB0cmFpbmluZywgYW5kIG9yZ2FuaXppbmcgY29tbWl0dGVlIG1lZXRpbmdzLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBhbmQgYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gYWxsIGdyb3VwIG1lZXRpbmdzIGFuZCBpbiBzZW1pbmFycyB0aGF0IGFyZSBwYXJ0IG9mIHlvdXIgZWR1Y2F0aW9uYWwgcHJvZ3JhbS4KSSBleHBlY3QgeW91IHRvIGF0dGVuZCBjb25mZXJlbmNlcywgQ2xpbmljYWwgUm91bmRzLCBEZXZlbG9wbWVudGFsIERpc2N1c3Npb24sIERhdGEgVGVhbSBhbmQgbGFiIG1lZXRpbmdzLCBEZUxUQSBDZW50ZXIsIEZyaWRheSBjb2xsb3F1aWEgc2VyaWVzLCBhbmQgb3RoZXIgcmVsZXZhbnQgYnJvd25iYWdzIHN1Y2ggYXMgQ29nbml0aW9uLCBCZWhhdmlvcmFsICYgQ29nbml0aXZlIE5ldXJvc2NpZW5jZSAoQkNOKSwgYW5kIHRoZSBJb3dhIE5ldXJvc2NpZW5jZSBJbnN0aXR1dGUgKElOSSkuCldoZW4gd2UgZ28gdG8gY29uZmVyZW5jZXMsIEkgd2lsbCBpbnRyb2R1Y2UgeW91IHRvIG15IHByb2Zlc3Npb25hbCBuZXR3b3JrIGFuZCBlbmNvdXJhZ2UgeW91IHRvIGJ1aWxkIHNraWxscyBpbiBuZXR3b3JraW5nLgoKV2Ugd2lsbCBkaXNjdXNzIHlvdXIgdHJhaW5pbmcgYW5kIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucy4KQWxsIHByb2dyYW0gcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGUgRGVwYXJ0bWVudCdzIFtHcmFkdWF0ZSBIYW5kYm9va10oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9zaXRlcy9wc3ljaG9sb2d5LnVpb3dhLmVkdS9maWxlcy8yMDIzLTA4L0dyYWRIYW5kYm9vazIwMjMlMjAtJTIwQXVndXN0LnBkZikgYW5kL29yIHRoZSBHcmFkdWF0ZSBDb2xsZWdlJ3MgW01hbnVhbCBvZiBSdWxlcyBhbmQgUmVndWxhdGlvbnNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvYWNhZGVtaWNzL21hbnVhbCkuCkkgaW5jbHVkZSBhIHN1Z2dlc3RlZCB0aW1lbGluZSBmb3IgeW91ciByZXNlYXJjaCwgY2xpbmljYWwgdHJhaW5pbmcsIGFuZCBjb3Vyc2V3b3JrIFtiZWxvd10oI3RpbWVsaW5lcykuClBsZWFzZSBjb25zdWx0IHdpdGggbWUgYmVmb3JlIHNlbGVjdGluZyB5b3VyIGNvdXJzZXMsIGNsaW5pY2FsIHByYWN0aWNhLCBhbmQgb3RoZXIgdGltZS1pbnRlbnNpdmUgdHJhaW5pbmcgZXhwZXJpZW5jZXMuCgpGb3Igc29tZSBzdHVkZW50cywgdGhlcmUgbWF5IGJlIHJlbGV2YW50IHRyYWluaW5nIGZlbGxvd3NoaXBzLgpGb3IgaW5zdGFuY2UsIHRoZSBCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHByb3ZpZGVzIHRyYWluaW5nIGluIGJpby1tZWRpY2FsIHJlc2VhcmNoLgoKVGhpcyBpcyBhIHJlc2VhcmNoLW9yaWVudGVkIHByb2dyYW07IHlvdSBhcmUgZXhwZWN0ZWQgdG8gcHJpb3JpdGl6ZSByZXNlYXJjaCByZWxhdGl2ZSB0byB5b3VyIG90aGVyIG9ibGlnYXRpb25zLgpJZiB5b3UgYXJlIGdldHRpbmcgYWxsIEFzIGluIGNsYXNzZXMsIHlvdSBhcmUgc3BlbmRpbmcgdG9vIG11Y2ggdGltZSBvbiBjb3Vyc2V3b3JrIQpbR3JhZGVzIGluIGdyYWQgc2Nob29sIGRvbid0IG1hdHRlcl0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTQ2OSkgKGFzIGxvbmcgYXMgeW91IHBhc3MgeW91ciBjbGFzc2VzOyBhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0tEVTItNzlKWiksIGFuZCB0aGUgc29vbmVyIHlvdSBmaWd1cmUgdGhhdCBvdXQsIHRoZSBiZXR0ZXIgb2ZmIGFuZCBtb3JlIHByb2R1Y3RpdmUgeW91IHdpbGwgYmUuCkluc3RlYWQgb2YgZm9jdXNpbmcgeW91ciBsZWFybmluZyBvbiBjb3Vyc2V3b3JrLCBsZWFybiBieSBkb2luZy4KVGFrZSB3aGF0IHlvdSBuZWVkIGZyb20gY2xhc3NlcyB0byBhZHZhbmNlIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KClBsZWFzZSByZWZlciB0byB0aGUgQ2xpbmljIE1hbnVhbCBmb3IgZ3VpZGVsaW5lcyByZWdhcmRpbmcgZmFjZS10by1mYWNlIGhvdXJzIChvbiB0aGUgY2xpbmljIGRyaXZlW14zXTogYFxcaW93YS51aW93YS5lZHVcc2hhcmVkXENMQVNcRGVwYXJ0bWVudGFsXFBCU1xDbGluaWNcQ2xpbmljIE1hbnVhbFxgKS4KRm9yIGNsaW5pY2FsIHN0dWRlbnRzLCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVndWxhcmx5IHRyYWNrIHlvdXIgY2xpbmljYWwgZXhwZXJpZW5jZXMgYW5kIGhvdXJzIHRvIGVuc3VyZSB0aGF0IHlvdSBhcmUgbWVldGluZyBhcHByb3ByaWF0ZSBtaWxlc3RvbmVzIGluIHlvdXIgdHJhaW5pbmcuClRoZSBwcm9ncmFtIGhhcyBhbiBpbnN0aXR1dGlvbmFsIGFjY291bnQgZm9yIFtUaW1lMlRyYWNrXShodHRwczovL3RpbWUydHJhY2suY29tKS4KWW91IGFyZSBleHBlY3RlZCB0byB1c2UgaXQgdG8gdHJhY2sgaG91cnMgYW5kIGFyZSBleHBlY3RlZCB0byBzdGF5IGNhdWdodCB1cCBpbiB5b3VyIHRyYWNraW5nLgpXZSB3aWxsIGRpc2N1c3MgeW91ciBwbGFucyBmb3IgY2xpbmljYWwgdHJhaW5pbmcgYW5kIHByYWN0aWN1bSBvcHBvcnR1bml0aWVzIGR1cmluZyBvdXIgcmVndWxhciBpbmRpdmlkdWFsIG1lZXRpbmdzLgpJIHdpbGwgYWxzbyBwcm92aWRlIGNsaW5pY2FsIHN1cGVydmlzaW9uIG9mIHNvbWUgb2YgeW91ciBjYXNlcyBhcyBwYXJ0IG9mIHRoZSBTZWFzaG9yZSBDbGluaWMuCkkgYW0gYSBsaWNlbnNlZCBjbGluaWNhbCBwc3ljaG9sb2dpc3QsIHNvIGFzc2Vzc21lbnQgaG91cnMgaW4gbXkgcmVzZWFyY2ggbGFiIGNvdW50IGFzIGNsaW5pY2FsIGhvdXJzLgoKIyMgU29mdHdhcmUgeyNzb2Z0d2FyZX0KCk15IGxhYiBwcmltYXJpbHkgdXNlcyBgUmAgZm9yIGRhdGEgbWFuYWdlbWVudCBhbmQgYW5hbHlzaXMgYmVjYXVzZSBpdCBpcyBmcmVlLCBvcGVuIHNvdXJjZSwgb3BlbiBwbGF0Zm9ybSwgY29kZS1iYXNlZCAod2hpY2ggaW5jcmVhc2VzIHNoYXJlLWFiaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSBvZiBhbmFseXNlcyksIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBzdGF0aXN0aWNzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGdyYXBoaWNzIGZyb20gcGFja2FnZXMgZGVzaWduZWQgYnkgc3RhdGlzdGljYWwgZXhwZXJ0cyBhbGwgb3ZlciB0aGUgd29ybGQsIGFuZCB0byB3aGljaCBhbnlvbmUgKGluY2x1ZGluZyB5b3UpIGNhbiBjb250cmlidXRlLgpXZSBhbHNvIHVzZSBgTUFUTEFCYCBmb3IgcHJvY2Vzc2luZyBvZiBldmVudC1yZWxhdGVkIHBvdGVudGlhbCBkYXRhIGFuZCBgTXBsdXNgIGZvciBzdHJ1Y3R1cmFsIGVxdWF0aW9uIG1vZGVsaW5nLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gbGVhcm4gYFJgIGFuZCBhbnkgb3RoZXIgc3BlY2lhbGl6ZWQgc29mdHdhcmUgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBhbnN3ZXIgdGhlIHJlc2VhcmNoIHF1ZXN0aW9ucyB5b3UgYXJlIHB1cnN1aW5nLgpJZiB0aGVyZSdzIGFub3RoZXIgdG9vbCBvciBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgY2FuIGRvIHNvbWV0aGluZyBlYXNpZXIsIGJldHRlciwgbW9yZSBlZmZpY2llbnRseSwgb3Igd2l0aCBncmVhdGVyIHJlcHJvZHVjaWJpbGl0eSB0aGFuIHdoYXQgd2UgYXJlIHVzaW5nLCBmZWVsIGZyZWUgdG8gdXNlIGl04oCUdGhvdWdoIEkgbWF5IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgZm9ybWFsIGd1aWRhbmNlLgpGb3IgaW5zdGFuY2UsIGBQeXRob25gIGlzIGEgZnJlZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIGVtZXJnaW5nIGFzIGEgbmljZSBjb21wbGVtZW50IHRvIGBSYCBmb3Igc3RhdGlzdGljYWwgcHJvZ3JhbW1pbmcuCk5vIG1hdHRlciB3aGljaCBzb2Z0d2FyZSB5b3UgdXNlLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBhbmQgZXhwbGFpbiB3aGF0IHRoZSBhbmFseXNpcyBpcyBkb2luZyBhbmQgYmUgYWJsZSB0byBpbnRlcnByZXQgYW5kIGV4cGxhaW4gdGhlIG91dHB1dC4KCiMjIEJlc3QgcHJhY3RpY2VzIHsjYmVzdFByYWN0aWNlc30KCkkgZXhwZWN0IHlvdSB0byBmb2xsb3cgb3BlbiBzY2llbmNlIHByYWN0aWNlcyAoZGVzY3JpYmVkIGFib3ZlKS4KSSBleHBlY3QgeW91IHRvIGNvbW1lbnQgeW91ciBjb2RlIHNvIHRoYXQgb3RoZXJzIGNhbiB1bmRlcnN0YW5kIGl0IChhbmQgc28geW91IGNhbiB1bmRlcnN0YW5kIGl0IHdoZW4geW91IGdvIGJhY2sgdG8gaXQgNSsgeWVhcnMgbGF0ZXIpLgpJIGV4cGVjdCB5b3UgdG8gdXNlIHZlcnNpb24gY29udHJvbCAoZ2l0IHdpdGggR2l0TGFiKSB3aXRoIGFsbCBwcm9qZWN0cyBhbmQgdG8gc2F2ZSB5b3VyIGxhYiBwcm9qZWN0cyBpbiBhIHJlcG8gb24gdGhlIFtsYWIncyBHaXRMYWIgcGFnZV0oaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKS4KQ29tbWl0IGFuZCBwdXNoIHlvdXIgd29yayB0byB0aGUgR2l0TGFiIHJlcG8gb2Z0ZW4uClVzaW5nIHZlcnNpb24gY29udHJvbCBwcm92aWRlcyBtYW55IGJlbmVmaXRzOiAoYSkgaXQgcHJvdmlkZXMgYmFja3VwcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGNsb3VkLCAoYikgaXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBjbG91ZCBmcm9tIGFueSBjb21wdXRlciB3aXRoIGFjY2VzcyB0byB0aGUgaW50ZXJuZXQsIGV2ZW4gaWYgeW91IGFyZSBhd2F5IGZyb20geW91ciBsb2NhbCBjb21wdXRlciwgKGMpIGl0IHByb3ZpZGVzIGhpc3Rvcnkgb2YgYWxsIChjb21taXR0ZWQpIGNoYW5nZXMgbWFkZSB0byBhbGwgZmlsZXMuCklmIHlvdSBtYWtlIGEgbWlzdGFrZSBpbiB5b3VyIGNvZGUsIHlvdSBjYW4gZWFzaWx5IHJldmVydCB0byBhIHByaW9yIHZlcnNpb24gYmVjYXVzZSB5b3UgdG9vayBzbmFwc2hvdHMgKGNvbW1pdHMpIG9mIHlvdXIgZmlsZXMhCihkKSBJdCBhbGxvd3MgeW91IHRvIHdyaXRlIGNsZWFuZXIgY29kZSBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIGFsbCB0aGUgb2xkLCAiY29tbWVudGVkIG91dCIgbGluZXMgb2YgY29kZSwgKGUpIGl0IGhlbHBzIHdpdGggcHJvamVjdCBvcmdhbml6YXRpb247IHlvdSBubyBsb25nZXIgaGF2ZSB0byBrZWVwIGZpbGVzIG9yIGZvbGRlcnMgbmFtZWQgInByb2plY3Rfb2xkIiAob3IgInByb2plY3RfMiIsICJbcHJvamVjdF9maW5hbF0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTE1MzEpIiAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8zUTVELVhLVEopLCBvciB3aGF0ZXZlciksIChmKSBpdCBrZWVwcyBhbGwgZmlsZXMgZm9yIHRoZSBwcm9qZWN0IHNlbGYtY29udGFpbmVkLCB3aGljaCBoZWxwcyBpbmNyZWFzZSByZXByb2R1Y2liaWxpdHksIGFuZCAoZykgaXQgYWxsb3dzIGVhc2llciBjb2xsYWJvcmF0aW9uIHdpdGggb3RoZXJzIG9uIHRoZSBwcm9qZWN0LgoKIyMgT3RoZXIgcmVzcG9uc2liaWxpdGllcyB7I290aGVyUmVzcG9uc2liaWxpdGllc30KCkkgZXhwZWN0IHlvdSB0byBiZSBhIHRlYW0gcGxheWVyLCB0byBjb250cmlidXRlIHRvIHRoZSB0ZWFtLCBhbmQgdG8gdGFrZSBhIGxlYWRlcnNoaXAgcm9sZSBpbiB0aGUgbGFiLgpTdHJpdmUgdG8gYmUgdGhlIHZlcnkgYmVzdCBsYWIgY2l0aXplbiBhbmQgY2l0aXplbiBvZiB0aGUgRGVwYXJ0bWVudCBhbmQgVW5pdmVyc2l0eS4KUmVnYXJkbGVzcyBvZiB5b3VyIHNvdXJjZSBvZiBmdW5kaW5nIChlLmcuLCB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCByZXNlYXJjaCBhc3Npc3RhbnRzaGlwLCBmZWxsb3dzaGlwL2dyYW50KSwgeW91IGNhbiBleHBlY3QgbGFiLXJlbGF0ZWQgYXNzaWdubWVudHMgdGhhdCBhcmUgZm9yIHRoZSBiZXR0ZXJtZW50IG9mIHRoZSB0ZWFtLgpGb3IgaW5zdGFuY2UsIEkgZXhwZWN0IHlvdSB0byBzdXBlcnZpc2UgYSBjb2RpbmcgdGFzay4KSSBleHBlY3QgeW91IHRvIGxlYXJuIHRoZSBsYWIgcHJvY2VkdXJlcyBhbmQgcHJvdG9jb2xzLgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdHJhaW4gcmVzZWFyY2ggYXNzaXN0YW50cyBvciBsYWIgc3RhZmYgb24gdmFyaW91cyBwcm9jZWR1cmVzLgpJIGV4cGVjdCB5b3UgdG8gd29yayB0byBlbnN1cmUgcXVhbGl0eSBjb250cm9sIG9mIGxhYiBwcm9jZWR1cmVzIHNvIHRoYXQgd2UgYXJlIGNvbGxlY3RpbmcgYW5kIHByb2Nlc3NpbmcgaGlnaC1xdWFsaXR5IGRhdGEgaW4gYW4gZWZmaWNpZW50IHdheS4KSSBleHBlY3QgeW91IHRvIGhlbHAgb3RoZXIgdGVhbSBtZW1iZXJzLCBpbmNsdWRpbmcgdW5kZXJncmFkdWF0ZSByZXNlYXJjaCBhc3Npc3RhbnRzIHdpdGggaW5kZXBlbmRlbnQgcmVzZWFyY2ggcHJvamVjdHMsIEhvbm9ycyBwcm9qZWN0cyBhbmQgdGhlc2VzLCBqb2Igb3IgZ3JhZHVhdGUgYXBwbGljYXRpb25zL2ludGVydmlld3MsIGV0Yy4KRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBidWlsZCBpbXBvcnRhbnQgc2tpbGxzIGluIG1lbnRvcmluZy4KClJlZ2FyZGxlc3Mgb2YgeW91ciBzb3VyY2Ugb2YgZnVuZGluZywgeW91IGFyZSBleHBlY3RlZCB0byBzcGVuZCBtb3N0IG9mIHlvdXIgdGltZSBkb2luZyBsYWItcmVsYXRlZCByZXNlYXJjaC4KSWYgeW91IGFyZSBmdW5kZWQgb24gYSByZXNlYXJjaCBhc3Npc3RhbnRzaGlwIGZyb20gdGhlIGxhYiwgSSBleHBlY3QgeW91IHdpbGwgc3BlbmQgYXQgbGVhc3QgMjAgaG91cnMgKGZvciBhIGZ1bGwtdGltZSBhc3Npc3RhbnRzaGlwOyBhdCBsZWFzdCAxMCBob3VycyBmb3IgYSBoYWxmLXRpbWUgYXNzaXN0YW50c2hpcCkgZG9pbmcgbGFiLXJlbGF0ZWQgcmVzZWFyY2ggZnJvbSB0aGUgcmVsZXZhbnQgZ3JhbnQocykgYW5kIGxhYi1hc3NpZ25lZCB3b3JrIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSBjb3Vyc2V3b3JrLCBjbGluaWNhbCB3b3JrLCB3b3JrIHRvd2FyZCBwcm9ncmFtIHJlcXVpcmVtZW50cyAoZS5nLiwgQ29tcHMgZXhhbXMpLCBvdGhlciByZXNlYXJjaC1yZWxhdGVkIHdvcmssIGFuZCBvdGhlciBlbmRlYXZvcnMuClRoaXMgaXMgYW4gZXRoaWNhbCBvYmxpZ2F0aW9uIGdpdmVuIG91ciBmZWRlcmFsIHNvdXJjZXMgb2YgZnVuZGluZy4KSWYgeW91IGFyZSB1bmFibGUgdG8gY29tbWl0IHRvIGEgZnVsbCByZXNlYXJjaCBsb2FkIChhbmQgdGhlcmVmb3JlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIG1lZXQgdGhlIGV4cGVjdGF0aW9ucyBvZiBhIHJlc2VhcmNoIGFzc2lzdGFudHNoaXApLCB5b3Ugc2hvdWxkIHRlbGwgbWUgYmVmb3JlIGFzc2lzdGFudHNoaXBzIGFyZSBhc3NpZ25lZCwgc28geW91IGNhbiBiZSBnaXZlbiBhIHRlYWNoaW5nIGFzc2lzdGFudHNoaXAgb3IgYW5vdGhlciBzb3VyY2Ugb2YgZnVuZGluZy4KTmV2ZXJ0aGVsZXNzLCBldmVuIHdpdGggYSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHNwZW5kIG1vc3Qgb2YgeW91ciB0aW1lIGRvaW5nIGxhYi1yZWxhdGVkIHJlc2VhcmNoLgpZb3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMTAgaG91cnMgcGVyIHdlZWsgZG9pbmcgdGVhY2hpbmctcmVsYXRlZCB3b3JrIGZvciBhIGhhbGYtdGltZSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCBhbmQgbm90IG1vcmUgdGhhbiAyMCBob3VycyBmb3IgYSBmdWxsLXRpbWUgdGVhY2hpbmcgYXNzaXN0YW50c2hpcCAoYW5kIGdlbmVyYWxseSBtdWNoIGxlc3MgdGhhbiB0aGF0KS4KCllvdSBzaG91bGQgdGFsayB3aXRoIG1lIGFuZCBnZXQgbXkgYXBwcm92YWwgYmVmb3JlIGRvaW5nIG9yIGFkZGluZyBhbnkgZXh0ZXJuYWwgcHJhY3RpY2EuClBlciBsYWIgYW5kIHByb2dyYW0gZXhwZWN0YXRpb25zLCB5b3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMS41IGZ1bGwgZGF5cyAoaS5lLiwgMTIgaG91cnMpIGRvaW5nIGNsaW5pYy1yZWxhdGVkIHdvcmsgcGVyIHdlZWsuCkRvIG5vdCBmb2N1cyB0b28gbXVjaCBvbiBjbGluaWNhbCBob3VyczsgUGguRC4gc3R1ZGVudHMgZnJvbSBub24tY2xpbmljYWwgc2NpZW5jZSBwcm9ncmFtcyBhbmQgUHN5LkQuIHN0dWRlbnRzIHdpbGwgaGF2ZSB3YXkgbW9yZSBjbGluaWNhbCBob3VycyB0aGFuIHlvdeKAlHlvdSBhcmUgbm90IGNvbXBldGluZyB3aXRoIHRoZW0gZm9yIHRoZSBzYW1lIHR5cGVzIG9mIHNpdGVzLgpZb3Ugd2lsbCBiZSBtb3N0IGNvbXBldGl0aXZlIGF0IFtjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXNdKGh0dHBzOi8vd3d3LmFjYWRwc3ljaGNsaW5pY2Fsc2NpZW5jZS5vcmcvaW50ZXJuc2hpcC1wcm9ncmFtcy5odG1sKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8yVlJLLUpSTVEpLCB3aGljaCBjYXJlIG11Y2ggbW9yZSBhYm91dCB0aGUgKnF1YWxpdHkqIG9mIHRyYWluaW5nIHRoYW4gdGhlICpxdWFudGl0eSogb2YgdHJhaW5pbmcuCkFuZCBVSSBoYXMgdG9wLW5vdGNoIGNsaW5pY2FsIHRyYWluaW5nLgpJbnRlcm5zaGlwIHNpdGVzIGFsc28gY2FyZSBoZWF2aWx5IGFib3V0IHNjaWVudGlmaWMgcHJvZHVjdGl2aXR5IGluY2x1ZGluZyBwdWJsaWNhdGlvbnMgKFtMdW5kIGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly9wc3ljbmV0LmFwYS5vcmcvcmVjb3JkLzIwMTUtNTcwNzMtMDAxKSksIGFuZCB0aGlzIGlzIGV2ZW4gbW9yZSB0cnVlIGZvciBjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXMuCkkgaGFkIGZvdXIgZmlyc3QtYXV0aG9yZWQgcHVibGljYXRpb25zIChuaW5lIHRvdGFsKSBhbmQgYW4gTlJTQSB3aGVuIEkgYXBwbGllZCBmb3IgaW50ZXJuc2hpcCBhbmQgcmVjZWl2ZWQgMTMgaW50ZXJ2aWV3IGludml0YXRpb25zIG91dCBvZiAxNSBzaXRlcy4KSSBhbSBoYXBweSB0byBzaGFyZSBteSBwcmVwYXJhdGlvbiwgYXBwbGljYXRpb24sIGFuZCBpbnRlcnZpZXcgbWF0ZXJpYWxzIGV0Yy4KZm9yIGludGVybnNoaXBzLCBqb2JzLCBldGMuIGFuZCB0byB3b3JrIHdpdGggeW91IHRvIG1ha2UgdGhlbSBhcyBzdHJvbmcgYXMgcG9zc2libGUuCgpQbGVhc2UgZG8gbm90IGhpZGUgaW4geW91ciBvZmZpY2U7IGdldCBvdXQgYW5kIG1lZXQgcGVvcGxlIGF0IGdyb3VwIGFuZCBkZXBhcnRtZW50YWwgZXZlbnRzLgpJZiBhIGNvbGxvcXVpdW0gaXMgZ2l2ZW4gaW4gYW4gYXJlYSBpbiB3aGljaCB5b3UgaGF2ZSBhIHJlc2VhcmNoIGludGVyZXN0LCBzaWduIHVwIHRvIG1lZXQgd2l0aCB0aGUgc3BlYWtlci4KR28gdXAgdG8gc3BlYWtlcnMgYWZ0ZXIgdGFsa3MsIGludHJvZHVjZSB5b3Vyc2VsZiwgYW5kIGV4cHJlc3MgaW50ZXJlc3QgaW4gdGhlaXIgd29yayBieSBhc2tpbmcgcXVlc3Rpb25zLgpOZXR3b3JraW5nIHNraWxscyBhcmUgaW1wb3J0YW50IGFuZCBjYW4gb2Z0ZW4gbGVhZCB0byBqb2Igb3Bwb3J0dW5pdGllcy4KCiMjIENhcmVlciBkZXZlbG9wbWVudCB7I2NhcmVlckRldmVsb3BtZW50fQoKSSBzdHJvbmdseSBiZWxpZXZlIHRoYXQgdGhlIGxhYiBncm93cyBiZXR0ZXIgd2l0aCBlYWNoIHRyYWluZWUgYWNoaWV2aW5nIHRoZWlyIGNhcmVlciBnb2Fscy4KSSByZXNwZWN0IGFuZCBzdXBwb3J0IGVhY2ggdHJhaW5lZSdzIGNhcmVlciBjaG9pY2UgYW5kIHVuZGVyc3RhbmQgdGhhdCB0aGluZ3MgY2FuIGNoYW5nZSBvdmVyIHRpbWUuCkF0IHRoZSBzYW1lIHRpbWUsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgYSBbcmVzZWFyY2gtb3JpZW50ZWQgdHJhaW5pbmcgcHJvZ3JhbV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9ncmFkdWF0ZSkgYW5kIGlzIGJlc3QgYWxpZ25lZCB3aXRoIGNhcmVlcnMgaW4gd2hpY2ggcmVzZWFyY2ggd2lsbCBiZSBhIGtleSBjb21wb25lbnQuCkZvciBwcm9zcGVjdGl2ZSBncmFkdWF0ZSBzdHVkZW50cywgaWYgeW91IGhhdmUgZ29hbHMgb2YgYmVpbmcgYSBjbGluaWNpYW4sIEkgd291bGQgZGlzc3VhZGUgeW91IGZyb20gam9pbmluZyBvdXIgcHJvZ3JhbSBhbmQgdGhpcyBsYWI7IHlvdSB3b3VsZCBub3QgYmUgaGFwcHkgaGVyZS4KCldlIHdpbGwgZGlzY3VzcyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucyBhbmQgaG93IEkgY2FuIGJlc3Qgc3VwcG9ydCB0aGVtLgpEdXJpbmcgZWFjaCBGYWxsIHNlbWVzdGVyLCBJIGV4cGVjdCB5b3UgdG8gY29tcGxldGUgYW4gSW5kaXZpZHVhbCBEZXZlbG9wbWVudCBQbGFuIChbaHR0cHM6Ly9teWlkcC5zY2llbmNlY2FyZWVycy5vcmddKGh0dHBzOi8vbXlpZHAuc2NpZW5jZWNhcmVlcnMub3JnKTsgYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9NVDI3LUNQUDIpLCBhbmQgdG8gcmV2aWV3IGFuZCBkaXNjdXNzIHRoZSByZXN1bHRzIHdpdGggbWUuCkkgZXhwZWN0IHlvdSB0byBpbmZvcm0gbWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSBpbiB5b3VyIGNhcmVlciBwbGFucyBzbyB0aGF0IHlvdXIgbGFiIGFjdGl2aXRpZXMgY2FuIGJlIGJldHRlciBhbGlnbmVkIHRvIHlvdXIgbmV3IGdvYWxzLgpJbiBhZGRpdGlvbiB0byBhY2FkZW1pYyBjYXJlZXJzIChlLmcuLCByZXNlYXJjaC90ZWFjaGluZy9jbGluaWNhbCB3b3JrIGF0IFIxIHVuaXZlcnNpdHksIGFjYWRlbWljIG1lZGljYWwgY2VudGVyLCBvciBsaWJlcmFsIGFydHMgY29sbGVnZSksIEkgc3VwcG9ydCBwbGFucyBmb3IgaW5kdXN0cnkgYW5kIG5vbi1hY2FkZW1pYyBjYXJlZXJzIChlLmcuLCBkYXRhIHNjaWVuY2UsIGNvbnN1bHRpbmcsIGdvdmVybm1lbnQsIE5HTzsgdGhlc2UgYXJlIGp1c3QgZXhhbXBsZXPigJR0aGVyZSBhcmUgbWFueSBvdGhlcnMpLgpZb3UgYXJlIHdlbGNvbWUgdG8gZ2V0IHRoZSB0cmFpbmluZyB5b3UgbmVlZCwgcHJvdmlkZWQgdGhhdCB5b3UgbWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiB5b3VyIGRlZ3JlZS1yZWxhdGVkIHRyYWluaW5nIGFuZCByZXNlYXJjaC4KU2VlayB0aGUgZXhwZXJpZW5jZSBvZiBmYWN1bHR5LCBwcm9mZXNzaW9uYWxzLCBwb3N0LWRvY3MsIGFuZCBvdGhlciBzdHVkZW50cyB0byBoZWxwIHlvdSBvdXQuCgpJZiB5b3Ugd2FudCBhbiBhY2FkZW1pYyBqb2IsIEkga25vdyB3aGF0IGl0IHRha2VzIHRvIGdldCBvbmUgKGluIHRlcm1zIG9mIHB1YmxpY2F0aW9ucywgZ3JhbnRzLCBldGMuKSwgc28ganVzdCBhc2suCkkgYW0gYWxzbyBoYXBweSB0byB0YWxrIHdpdGggeW91IGFib3V0IHdoYXQgYW4gUjEgYWNhZGVtaWMgam9iIGlzIGxpa2UgKGUuZy4sIHNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgYSBsYWIsIHRlYWNoaW5nKeKAlEkgbG92ZSBteSBqb2IgYW5kIGhhdmUgYSBwYXNzaW9uIGZvciB0aGUgd29yayB3ZSBkby4KSSBnZXQgdG8gYmUgcGFydCBvZiBhbiBpbnZpZ29yYXRpbmcgaW50ZWxsZWN0dWFsIGVudmlyb25tZW50IGluIHdoaWNoIEkgZ2V0IHRvIGxlYXJuIGV2ZXJ5IGRheSwgZ2V0IHRvIGJlIGFyb3VuZCBleGNpdGluZyBpZGVhcyBhbmQgd29ybGQtcmVub3duZWQgZXhwZXJ0cyBjb25kdWN0aW5nIGN1dHRpbmctZWRnZSByZXNlYXJjaCwgYW5kIGhhdmUgdGhlIGludGVsbGVjdHVhbCBmcmVlZG9tIHRvIGdldCBwYWlkIHRvIHN0dWR5IHdoYXRldmVyIEkgd2FudCB0byBzdHVkeS4KSSBjYW5ub3QgaW1hZ2luZSBhbnl0aGluZyBiZXR0ZXIuClRoYXQgc2FpZCwgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZmFjdWx0eSBwb3NpdGlvbnMgZm9yIGFsbCBQaC5ELiBncmFkdWF0ZXMgYW5kIGl0IGlzIG5vdCB0aGUgYmVzdCBmaXQgZm9yIGV2ZXJ5b25lLgpJIHdpbGwgd29yayB3aXRoIHlvdSB0byBmaW5kIHRoZSBjYXJlZXIgdGhhdCBpcyB0aGUgcmlnaHQgZml0IGZvciB5b3UuCgojIyBNeSBhcHByb2FjaCB0byBtZW50b3JzaGlwIHsjYXBwcm9hY2hUb01lbnRvcnNoaXB9CgpBcyBhIGNsaW5pY2FsLWRldmVsb3BtZW50YWwgcHN5Y2hvbG9naXN0LCBJIHRha2UgYSBkZXZlbG9wbWVudGFsIHBlcnNwZWN0aXZlIHRvIG1lbnRvcnNoaXAuCkVhcmx5IG9uIGluIHlvdXIgdHJhaW5pbmcsIEkgYWltIHRvIHByb3ZpZGUgc3VmZmljaWVudCBzdHJ1Y3R1cmUgYW5kIHNjYWZmb2xkaW5nLgpBcyB5b3UgZGV2ZWxvcCBwcm9maWNpZW5jeSBpbiBhIHNraWxsLCBJIHN0cml2ZSB0byB3aXRoZHJhdyB0aGUgc2NhZmZvbGRzIHNvIHRoYXQgeW91IGRldmVsb3AgaW5kZXBlbmRlbmNlIGFuZCBhdXRvbm9teS4KVGhlIHNlY29uZCBhcHByb2FjaCB0byBteSBtZW50b3JzaGlwIHN0eWxlIGlzIGFuIGVtcGhhc2lzIG9uIGxlYXJuaW5nIGJ5IGRvaW5nLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBsZWFybiBieSBhcHBseWluZyB0aGUgc2tpbGxzIHRvIHByb2plY3RzIHRoZXkgYXJlIHdvcmtpbmcgb24gaW4gdGhlIGxhYiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBjb3Vyc2V3b3JrIGFuZCBvdGhlciBtZXRob2RzLgpJIHZpZXcgbXkgcm9sZSBhcyBmb3N0ZXJpbmcgeW91ciBwcm9mZXNzaW9uYWwgY29uZmlkZW5jZSBhbmQgZW5jb3VyYWdpbmcgeW91ciBjcml0aWNhbCB0aGlua2luZywgc2tlcHRpY2lzbSwgYW5kIGNyZWF0aXZpdHkuCgpEbyBub3QgaGVzaXRhdGUgdG8gYXNrIHF1ZXN0aW9ucyBpZiBJIGFtIGFyb3VuZDsgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGFzayBxdWVzdGlvbnMgdGhhbiB0byBtYWtlIGEgbWlzdGFrZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBlYXNpbHkgYXZvaWRlZC4KSSBhbSBwZXJpb2RpY2FsbHkgYXdheSwgYW5kIEkgZXhwZWN0IHlvdSB0byBnZXQgdGhpbmdzIGRvbmUgd2VsbCB3aXRob3V0IG1lLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gYmUgaW5kZXBlbmRlbnQ7IGRvIG5vdCBiZSBhZnJhaWQgdG8gdHJ5IHRvIGRvIGRldGVjdGl2ZSB3b3JrIG9uIHlvdXIgb3duIGlmIEkgYW0gbm90IGFyb3VuZC4KVGhlcmUgaXMgYWxzbyBhIGJlbmVmaXQgdG8gbGVhcm5pbmcgYnkgdHJpYWwgYW5kIGVycm9yLgpXZSBoYXZlIGEgaGVscGZ1bCwgZXhwZXJpZW5jZWQgbGFiLCBzbyBrbm93IHRoYXQgcGVvcGxlIG90aGVyIHRoYW4gbWUgbWF5IGJlIGV4Y2VsbGVudCByZXNvdXJjZXMuCgpJbiBvcmRlciBmb3Igc3VwZXJ2aXNpb24gdG8gYmUgZWZmZWN0aXZlLCBJIGhvcGUgdGhhdCBvdXIgcmVsYXRpb25zaGlwIHdpbGwgaW5jbHVkZSBvcGVuIGNvbW11bmljYXRpb24gYW5kIHR3by13YXkgZmVlZGJhY2suCklmIHRoZXJlIGFyZSB3YXlzIEkgY2FuIGJlIGEgYmV0dGVyIG1lbnRvciBmb3IgeW91LCBwbGVhc2UgbGV0IG1lIGtub3cuCkkgdmFsdWUgb3Blbm5lc3MgdG8gbGVhcm5pbmcgYXMgYSBjb250aW51b3VzLCBkZXZlbG9wbWVudGFsLCBsaWZlLWxvbmcgcHJvY2VzcyBhbmQgSSB3aWxsIG1vZGVsIGFuZCBwcm9tb3RlIG9wZW5uZXNzIGFuZCByZWNlcHRpdml0eSB0byBmZWVkYmFjay4KSSBleHBlY3QgdGhhdCB0cmFpbmVlcyB3aWxsIGV4cHJlc3MgZGlzYWdyZWVtZW50cyBhbmQgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbiB3aXRoIG1lLgpJIGRvIG5vdCB2aWV3IHByb2Zlc3Npb25hbCBkaXNhZ3JlZW1lbnRzIGFzIHBlcnNvbmFsOyB0aGUgYmVzdCBzY2llbmNlIGFyaXNlcyBvdXQgb2YgdGhlIGZyZWUgYW5kIGNvbnN0cnVjdGl2ZSBleGNoYW5nZSBvZiBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgYW5kIGlkZWFzLgpJIGV4cGVjdCB0aGF0IHRyYWluZWVzIHdpbGwgYXR0ZW1wdCB0byBhZGRyZXNzIGNvbmZsaWN0cyBpbiB0aGUgbWVudG9y4oCTbWVudGVlIHJlbGF0aW9uc2hpcC4KCkkgc3RyaXZlIHRvIGJ1aWxkIGFuZCB0byBzdXBwb3J0IGEgZGl2ZXJzZSB0ZWFtLCB0byB0cmVhdCBwZW9wbGUgZXF1aXRhYmx5LCBhbmQgdG8gYmUgaW5jbHVzaXZlIG9mIHBlb3BsZSBmcm9tIGFsbCBiYWNrZ3JvdW5kcy4KSWYgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHRoZSBsYWIgb3IgSSBjYW4gZG8gdG8gaGVscCB5b3Ugb3Igb3RoZXJzIGZlZWwgbW9yZSBpbmNsdWRlZCwgcGxlYXNlIGxldCBtZSBrbm93LgoKSSBhbSBjb21taXR0ZWQgdG8gbWVudG9yaW5nIHlvdSwgZXZlbiBhZnRlciB5b3UgbGVhdmUgbXkgbGFiLgpJIGFtIGNvbW1pdHRlZCB0byB5b3VyIGVkdWNhdGlvbiBhbmQgdHJhaW5pbmcgd2hpbGUgeW91IGFyZSBpbiBteSBsYWIsIGFuZCB0byBhZHZpc2luZyBhbmQgZ3VpZGluZyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudOKAlHRvIHRoZSBleHRlbnQgeW91IHdpc2jigJRsb25nIGFmdGVyIHlvdSBsZWF2ZS4KSSB3aWxsIHByb3ZpZGUgaG9uZXN0IGxldHRlcnMgb2YgZXZhbHVhdGlvbiBmb3IgeW91IHdoZW4geW91IHJlcXVlc3QgdGhlbS4KCiMjIENvbW11bmljYXRpb24geyNjb21tdW5pY2F0aW9ufQoKRmVlbCBmcmVlIHRvIHVzZSBTbGFjayBmb3IgYnJpZWYgY29tbXVuaWNhdGlvbiB3aXRoIG1lLgpIb3dldmVyLCB3ZSBkbyBub3QgdXNlIGRpcmVjdCBtZXNzYWdlcyBpbiBTbGFjayAoc2VlIHRoZSBsYWIgbWFudWFsKS4KQWxsIFNsYWNrIGNvbW11bmljYXRpb24gc2hvdWxkIGJlIGluIHRlYW0tZmFjaW5nIGNoYW5uZWxzIHNvIG90aGVycyBjYW4gYmVuZWZpdCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBhbmQgc28gd2UgY2FuIGdvIGJhY2sgYW5kIHJlZmVyZW5jZSBpdCBsYXRlci4KRm9yIGxvbmdlciBjb21tdW5pY2F0aW9uLCBwbGVhc2UgY2FsbCBvciBzdG9wIGJ5IG15IG9mZmljZS4KSSBmaW5kIHRoaXMgbXVjaCBtb3JlIGVmZmljaWVudCBhbmQgcGxlYXNhbnQgdGhhbiB3cml0aW5nIGFuZCByZWFkaW5nIGxlbmd0aHkgY29tbXVuaWNhdGlvbi4KRm9yIHNlbmRpbmcgbWFudXNjcmlwdHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBhbmQgbWVzc2FnZXMgdGhhdCBkbyBub3QgbmVlZCBhbiB1cmdlbnQgcmVzcG9uc2UsIHlvdSBtYXkgZW1haWwgbWUuClBsZWFzZSBsaW1pdCB5b3VyIHVzZSBvZiBlbWFpbCBhcyBtdWNoIGFzIHBvc3NpYmxlLgpbSSBoYXRlIGVtYWlsXShodHRwczovL3d3dy5jaHJvbmljbGUuY29tL2FydGljbGUvaXMtZW1haWwtbWFraW5nLXByb2Zlc3NvcnMtc3R1cGlkKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9UODU1LVU5TVEpOyB3ZSBnZXQgd2F5IHRvbyBtdWNoIG9mIGl0LCBpdCBpcyBpbXBlcnNvbmFsLCBpdCBkb2VzIG5vdCBjb21tdW5pY2F0ZSB0b25lIHdlbGwgKG9mdGVuIGxlYWRpbmcgdG8gbWlzaW50ZXJwcmV0YXRpb24gYW5kIHNvbWV0aW1lcyBodXJ0IGZlZWxpbmdzKSwgYW5kIGl0IGlzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3RheSBvbiB0b3Agb2YgbXkgaW5ib3guCkkgZW5jb3VyYWdlIHlvdSB0byBzdG9wIGJ5IG15IG9mZmljZSBvciB0byBjYWxsIG15IG9mZmljZSBwaG9uZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZW1haWwsIHdoZW5ldmVyIHBvc3NpYmxlLgoKV2hlbiB5b3UgY29udGFjdCBtZSBvciBzZW5kIG1lIG1hdGVyaWFscywgeW91IGNhbiBleHBlY3QgbWUgdG8gcmVzcG9uZCBwcm9tcHRseS4KTGlrZXdpc2UsIEkgZXhwZWN0IHlvdSB0byByZXNwb25kIHByb21wdGx5IHdoZW4gSSBvciBhbm90aGVyIGxhYiBtZW1iZXIgY29udGFjdHMgeW91IChpbiBtb3N0IGNhc2VzLCB3aXRoaW4gNDggaG91cnMpLgpJZiB5b3UgbmVlZCB0aW1lIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBpbiByZXNwb25zZSB0byBhIFNsYWNrIG1lc3NhZ2Ugb3IgZW1haWwsIHBsZWFzZSBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBtZXNzYWdlIGFuZCBpbmRpY2F0ZSB3aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLgpBdCB0aW1lcywgSSBtYXkgY29udGFjdCB5b3UgYnkgZW1haWwgb3IgU2xhY2sgYWZ0ZXIgaG91cnMgKGlmIHRoYXQgaXMgd2hlbiBpdCBpcyBtb3N0IGNvbnZlbmllbnQsIHNvIHRoYXQgSSBkbyBub3QgZm9yZ2V0IHRvKS4KSG93ZXZlciwgeW91IGFyZSBcKm5vdFwqIGV4cGVjdGVkIHRvIHJlc3BvbmQgYWZ0ZXIgaG91cnMuCkkgd2lsbCBjYWxsIHlvdSBpZiBzb21ldGhpbmcgaXMgdXJnZW50LgoKQmUgbWluZGZ1bCBvZiB0aGUgY29uc3RyYWludHMgb24gbXkgdGltZS4KQWxsb3cgYSBtaW5pbXVtIG9mIG9uZSB3ZWVrIHByaW9yIHRvIHN1Ym1pc3Npb24gZGVhZGxpbmVzIGZvciBtZSB0byByZWFkIGFuZCByZXNwb25kIHRvIHNob3J0IG1hdGVyaWFscyBzdWNoIGFzIGNvbmZlcmVuY2UgYWJzdHJhY3RzIGFuZCB0aHJlZSB3ZWVrcyBmb3IgbWUgdG8gd29yayBvbiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBhbmQgbGV0dGVycyBvZiByZWNvbW1lbmRhdGlvbi4KUGxlYXNlIGRvIG5vdCBhc3N1bWUgSSBjYW4gcmVhZCBtYXRlcmlhbHMgd2l0aGluIGEgZGF5IG9yIHR3bywgZXNwZWNpYWxseSB3aGVuIEkgYW0gdHJhdmVsaW5nLgpQbGVhc2Ugb25seSBzZW5kIGRyYWZ0cyBvZiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBkaXNzZXJ0YXRpb25zLCBldGMuIHdoZW4gdGhleSBhcmUgeW91ciA8dT5iZXN0IHBvc3NpYmxlIHdvcms8L3U+ICh0aGUgSGVucnkgS2lzc2luZ2VyIGNyaXRlcmlvbikuClRoYXQgbWVhbnMgZ29pbmcgdGhyb3VnaCBtdWx0aXBsZSByZXZpc2lvbnMsIHJlYWRpbmcgaXQgb3V0IGxvdWQgdG8geW91cnNlbGYsIGV0Yy4KSGVyZSBpcyBhbiBleGNlcnB0IGFib3V0IERyLiBLaXNzaW5nZXIgKFtLcmF1c21hbiwgMjAyMV0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvandtZy4yMTk5MikpOgoKPiAiSGVucnkgS2lzc2luZ2VyLCBhIGZvcm1lciBTZWNyZXRhcnkgb2YgU3RhdGUgdW5kZXIgUHJlc2lkZW50IE5peG9uLCB1bmRlcnN0b29kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbnRpbnVhbGx5IGltcHJvdmluZyB3cml0aW5nIHNraWxscy4KPiBXaW5zdG9uIExvcmQgd2FzIEtpc3NpbmdlcidzIHNwZWVjaCB3cml0ZXIgYW5kIGR1cmluZyB0aGUgbGF0ZSAxOTYwcyBhbmQgZWFybHkgMTk3MHMsIExvcmQgaGFkIGJlZW4gdGFza2VkIHdpdGggd3JpdGluZyBhIHNwZWVjaCBhYm91dCB0aHJlZSBpbXBvcnRhbnQgZm9yZWlnbiBwb2xpY3kgcHJvamVjdHM6IHRoZSBvcGVuaW5nIG9mIENoaW5hIHRvIHRoZSBXZXN0LCBicmluZ2luZyB0aGUgVmlldG5hbSBXYXIgdG8gYSBjbG9zZSwgYW5kIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSByZWxhdGlvbnMgd2l0aCB0aGUgUnVzc2lhbnMuCldyaXRpbmcgYSBzcGVlY2ggZm9yIEtpc3NpbmdlciB3YXMgbm90IGFuIGVhc3kgam9iIGJlY2F1c2UgS2lzc2luZ2VyIHdhcyBhIHNwZWVjaCB3cml0ZXIgaGltc2VsZiBhbmQgaGFyc2ggY3JpdGljLgo+IAo+IFRoZSBzdG9yeSBnb2VzIHRoYXQgTG9yZCBwcmVwYXJlZCBhbmQgc3VibWl0dGVkIGEgZmlyc3QgZHJhZnQgb2YgYSBzcGVlY2ggdG8gS2lzc2luZ2VyIG9uZSBldmVuaW5nLgo+IEtpc3NpbmdlciB0aGVuIGNhbGxlZCBMb3JkIHRoZSBuZXh0IG1vcm5pbmcgZm9yIGZlZWRiYWNrIG9uIHRoZSBzcGVlY2ggYW5kIGFza3MgIklzIHRoaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCByZXBsaWVzICJIZW5yeSwgSSB0aG91Z2h0IHNvLCBidXQgSSdsbCB0cnkgYWdhaW4uIgo+IAo+IExvcmQgdGhlbiB3ZW50IGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQsIHR3ZWFrZWQsIHJldmlzZWQsIGFuZCByZXN1Ym1pdHRlZCBhbm90aGVyIGRyYWZ0IGEgZmV3IGRheXMgbGF0ZXIuCj4gCj4gVGhlIG5leHQgZGF5LCBLaXNzaW5nZXIgY2FsbGVkIExvcmQgaW50byBoaXMgb2ZmaWNlIGFuZCBhZ2FpbiBhc2tlZCAiQXJlIHlvdSBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCBiZWdhbiB0byBxdWVzdGlvbiBoaXMgd29yayBhbmQgc2FpZCAiV2VsbCwgSSByZWFsbHkgdGhvdWdodCBzby4gSSdsbCB0cnkgYWdhaW4uIgo+IAo+IEJlbGlldmUgaXQgb3Igbm90LCB0aGlzIHVuY29tZm9ydGFibGUgYW5kIHJlamVjdGluZyBwcm9jZXNzIHdlbnQgb24gZm9yIDggZHJhZnRzLCBlYWNoIHRpbWUgS2lzc2luZ2VyIHN0YW5kaW5nIGZpcm0gdG8gaGlzIG9yaWdpbmFsIGZlZWRiYWNrIG9mICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQgcmV0dXJuZWQgdG8gS2lzc2luZ2VyJ3Mgb2ZmaWNlIHdpdGggdGhlIG5vdyBuaW50aCBkcmFmdCBhbmQgYXdhaXRlZCBoaXMgcmVzcG9uc2UuCj4gCj4gU3VyZWx5IGVub3VnaCwgS2lzc2luZ2VyIGNhbGxlZCBMb3JkIGluIHRoZSBuZXh0IGRheSBhbmQgYXNrcyBoaW0gdGhlIHNhbWUgcXVlc3Rpb24sICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQsIG5vdyBjb21wbGV0ZWx5IGZlZCB1cCwgZnVyaW91c2x5IHJlcGxpZWQgIkhlbnJ5ISBJJ3ZlIGJlYXRlbiBteSBicmFpbnMgb3V04oCUdGhpcyBpcyB0aGUgbmludGggZHJhZnQhIEkga25vdyBpdCdzIHRoZSBiZXN0IEkgY2FuIGRvOyBJIGNhbid0IHBvc3NpYmx5IGltcHJvdmUgb25lIG1vcmUgd29yZCEhISIKPiAKPiBLaXNzaW5nZXIgdGhlbiBsb29rZWQgYXQgTG9yZCBhbmQgbm9uY2hhbGFudGx5IHNhaWQgIldlbGwsIGluIHRoYXQgY2FzZSwgbm93IEknbGwgcmVhZCBpdC4iCgojIyBMYWIgY3VsdHVyZSB7I2xhYkN1bHR1cmV9CgpXaXRoaW4gYSBsYWIgZW52aXJvbm1lbnQsIG9jY2FzaW9uYWxseSBjb21wZXRpdGl2ZSB0aG91Z2h0cyBvciBlbW90aW9ucyBtYXkgYXJpc2UuClRoaXMgbGFiIGlzIG5vdCBhIHBsYWNlIGZvciBjb21wZXRpdGlvbiwgYnV0IGNvbGxhYm9yYXRpb24uCldlIGFyZSBhIGdyb3VwIG9mIHJlc2VhcmNoZXJzIHdvcmtpbmcgdG93YXJkIGEgY29tbW9uIGdvYWwsIGFuZCBhbGwgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byB3b3JrIHRvZ2V0aGVyIGNvbGxhYm9yYXRpdmVseS4KQSByaXNpbmcgdGlkZSBsaWZ0cyBhbGwgYm9hdHMuCkNvbXBldGl0aXZlIGJlaGF2aW9yIGlzIG5vdCBjb25kdWNpdmUgdG8gYSBwcm9kdWN0aXZlIGxhYm9yYXRvcnksIGFuZCB0aGlzIHNvcnQgb2YgYmVoYXZpb3Igd2lsbCBzdHJpY3RseSBub3QgYmUgdG9sZXJhdGVkLgpEbyBub3QgY29tcGFyZSB5b3Vyc2VsZiB0byBvdGhlcnMuCllvdSBhcmUgb24geW91ciBvd24gcGF0aC4KRWFjaCBtZW50ZWUgbmVlZHMgZGlmZmVyZW50IHRoaW5ncywgYW5kIEkgd2lsbCBkbyBteSBiZXN0IHRvIGdldCB0byBrbm93IHlvdSBhcyBhbiBpbmRpdmlkdWFsLCBhbmQgeW91ciBpbmRpdmlkdWFsIHNraWxscywgcHJlZmVyZW5jZXMsIGFuZCBnb2Fscy4KQ3VsdGl2YXRpbmcgYSBjb21tb24gdmFsdWUgb2YgaHVtaWxpdHkgaXMgaW1wb3J0YW50IGluIHJlc2VhcmNoLCBiZWNhdXNlIHdlIGFyZSBhbHdheXMgYXNraW5nIHF1ZXN0aW9ucyB0byB3aGljaCB3ZSBpbmhlcmVudGx5IGRvIG5vdCBrbm93IHRoZSBhbnN3ZXIuCkVsaXRpc3QgYmVoYXZpb3IgaXMgbm90IGNvbmR1Y2l2ZSB0byBncm93dGggYW5kIGRldmVsb3BtZW50LCBhbmQgYXMgc3VjaCwgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgbGFiIGVudmlyb25tZW50LgpUaGUgbGFiIGN1bHR1cmUgaXMgb2YgdXRtb3N0IGltcG9ydGFuY2UgdG8gYSBoZWFsdGh5LCBmdW5jdGlvbmFsIGdyb3VwLCBhbmQgcHJvZmVzc2lvbmFsIGJlaGF2aW9yIGlzIGF0IHRoZSBjZW50ZXIgb2YgYnVpbGRpbmcgdGhpcyBjdWx0dXJlLgpJZiB5b3UgaGF2ZSBqb2luZWQgdGhlIGxhYiwgeW91IGhhdmUgYmVlbiBzZWxlY3RlZCBhbW9uZyBtYW55IHF1YWxpZmllZCBhcHBsaWNhbnRzIGZvciB0aGlzIHBvc2l0aW9uLgpJIGVuY291cmFnZSB5b3UgdG8gc2hhcmUgeW91ciB0aG91Z2h0cyBhbmQgaWRlYXMgd2l0aCB0aGUgbGFiLgpLZWVwaW5nIHRoZW0gdG8geW91cnNlbGYgd291bGQgYmUgYSBkaXNzZXJ2aWNlIHRvIHRoZSB0ZWFtLgoKIyMgUHJvZmVzc2lvbmFsaXNtIHsjcHJvZmVzc2lvbmFsaXNtfQoKU2hvdyB1cCBvbiB0aW1lLCBmdWxseSBwcmVwYXJlZCBmb3IgbWVldGluZ3MuCklmIHlvdSB3aWxsIG5lZWQgdG8gbWlzcyBhIG1lZXRpbmcsIGxldCB0aGUgcmVsZXZhbnQgdGVhbSBtZW1iZXJzIGtub3cgaW4gYWR2YW5jZSwgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxlLgpVbmV4Y3VzZWQgYWJzZW5jZXMgYXJlIG5vdCBhY2NlcHRhYmxlIGluIGEgcHJvZmVzc2lvbmFsIGVudmlyb25tZW50LgoKSWYgeW91IGhhdmUgY3JpdGljYWwgdGhvdWdodHMgdG8gc2hhcmUgd2l0aCBzb21lb25lLCBkbyBub3Qgc2VuZCB0aGVtIGluIFNsYWNrIG9yIGluIGVtYWlsOyBpbnN0ZWFkLCBjYWxsIG9yIHRhbGsgdG8gdGhlIHBlcnNvbiBkaXJlY3RseS4KQmUgcmVzcG9uc2l2ZSB0byBhZHZpY2UgYW5kIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20uClRoZSBmZWVkYmFjayB5b3UgZ2V0IGZyb20gbWUsIHlvdXIgY29sbGVhZ3VlcywgeW91ciBjb21taXR0ZWUgbWVtYmVycywgeW91ciBjb3Vyc2UgaW5zdHJ1Y3RvcnMsIHlvdXIgY2xpbmljYWwgc3VwZXJ2aXNvcnMsIGFuZCB5b3VyIHRlYWNoaW5nIHN1cGVydmlzb3JzIGlzIGludGVuZGVkIHRvIGltcHJvdmUgeW91ciB3b3JrIGFuZCBoZWxwIHlvdSBzdWNjZWVkLgpEbyB5b3VyIGJlc3Qgbm90IHRvIHRha2UgaXQgcGVyc29uYWxseS4KV2UgYWxsIGhhdmUgcm9vbSB0byBncm93LgoKIyMgSW50ZXJhY3Rpb25zIHdpdGggb3RoZXJzIHsjaW50ZXJhY3Rpb25zfQoKSSBleHBlY3QgYWxsIGxhYiBtZW1iZXJzIHRvIHJlc3BlY3QgZWFjaCBvdGhlci4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHlvdSBhcmUgZXhwZWN0ZWQgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlcnMsIHNlZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvbiAiSW50ZXJhY3Rpb25zIHdpdGggT3RoZXJzIiBpbiB0aGUgcGFnZSBvbiBbRXhwZWN0YXRpb25zIGZvciBFdmVyeW9uZSBpbiB0aGUgTGFiXShleHBlY3RhdGlvbnMtZXZlcnlvbmUuaHRtbCNpbnRlcmFjdGlvbnMpLgoKSWYgYW5vdGhlciBtZW1iZXIgb2YgdGhlIGxhYiBpcyBub3QgY29tcGx5aW5nIHdpdGggdGhlc2UgcG9saWNpZXMsIHBsZWFzZSBmaXJzdCBhdHRlbXB0IHRvIHNwZWFrIHRvIHRoZSBwZXJzb24gZGlyZWN0bHkuClRoZSBBUEEgQ29kZSBvZiBFdGhpY3MgYWR2aXNlcyB0aGF0IHRoaXMgaXMgYSBmaXJzdCBzdGVwIHRvd2FyZCByZXNvbHV0aW9uLgpJZiB0aGF0IGlzIG5vdCBwb3NzaWJsZSwgYXBwcm9wcmlhdGUsIG9yIHByb3ZlcyBpbmVmZmVjdGl2ZSAoaS5lLiwgZG9lcyBub3QgY2hhbmdlIGJlaGF2aW9yKSwgcGxlYXNlIHNwZWFrIHRvIG1lIGFib3V0IHRoZSBwcm9ibGVtIGltbWVkaWF0ZWx5LgpQbGVhc2UgYWxzbyBzcGVhayB0byBtZSBpZiB5b3UgdGhpbmsgeW91IGhhdmUgYW4gaW50ZXJwZXJzb25hbCBpc3N1ZSB3aXRoIG1lLgpJZiwgYWZ0ZXIgaGF2aW5nIHRhbGtlZCB3aXRoIG1lLCB5b3UgZmVlbCB0aGUgaXNzdWUgd2lsbCBub3QgYmUgcmVzb2x2ZWQgYW5kIHlvdSB3YW50IHRvIHNwZWFrIHRvIHNvbWVvbmUgZWxzZSB0byBhZGRyZXNzIHRoZSBpc3N1ZSwgZm9sbG93IHRoZSBjaGFpbiBvZiBjb21tYW5kIGFuZCB0YWxrIHRvIHRoZSBBcmVhIENvb3JkaW5hdG9yLCB0aGUgRGlyZWN0b3Igb2YgR3JhZHVhdGUgU3R1ZGllcywgYW5kL29yIHRoZSBEZXBhcnRtZW50YWwgRXhlY3V0aXZlIE9mZmljZXIuClRoZSBjaGFpbiBvZiBjb21tYW5kIGlzIGRlcGljdGVkIGluIHRoZSBbbGFiIG9yZ2FuaXphdGlvbmFsIGNoYXJ0XShtYW51YWwuaHRtbCNvcmdhbml6YXRpb25hbENoYXJ0KS4KCiMjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHBsYW4geyNwZXJmb3JtYW5jZUltcHJvdmVtZW50UGxhbn0KCkluIHRoZSBjYXNlIHRoYXQgeW91ciBwcm9ncmVzcyBpcyB1bnNhdGlzZmFjdG9yeSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kLCB3ZSBuZWVkIHRvIGRpc2N1c3MgYW5kIGltcGxlbWVudCBhIHBsYW4gdG8gaW1wcm92ZSB5b3VyIHBlcmZvcm1hbmNlLCB3aGljaCBldmVudHVhbGx5IHdpbGwgYmUgaGVscGZ1bCBmb3IgeW91ciBjYXJlZXIgcGxhbiwgdG9vLgpUaGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGxhbiB3aWxsIGxpa2VseSBpbnZvbHZlIGNsb3NlciBtb25pdG9yaW5nIG9mIHlvdXIgcHJvZ3Jlc3MgYW5kIHJlc2VhcmNoIGFjdGl2aXRpZXMgdW50aWwgYSBwcmVkZWZpbmVkIGdvYWwgaXMgcmVhY2hlZCAoZS5nLiwgcHVibGlzaGluZyBhIHBhcGVyKS4KCiMjIEFjY29tbW9kYXRpb25zIHsjYWNjb21tb2RhdGlvbnN9CgpTb21ldGltZXMsIGxpZmUgZXZlbnRzIG9yIG1lZGljYWwvaGVhbHRoLXJlbGF0ZWQgaXNzdWVzIG1heSBpbXBhY3QgeW91ciBhYmlsaXR5IHRvIG1lZXQgc29tZSBvZiB0aGUgbGFiIGV4cGVjdGF0aW9ucy4KWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNlZWsgbWVkaWNhbC9wcm9mZXNzaW9uYWwgaGVscCBpZiBzdWNoIGlzc3VlcyBhcmlzZSwgZXZlbiBpZiB0aGUgYXBwb2ludG1lbnRzIG9jY3VyIGR1cmluZyB5b3VyIHJlZ3VsYXIgbGFiIGhvdXJzLgpJZiB0aGVyZSBhcmUgbGFiLXJlbGF0ZWQgYWNjb21tb2RhdGlvbnMgdGhhdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHlvdSwgcGxlYXNlIGxldCBtZSBrbm93IGFuZC9vciBjb250YWN0IHRoZSBVSSBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgKGh0dHBzOi8vc2RzLnN0dWRlbnRsaWZlLnVpb3dhLmVkdSkuCkFueSBkZXZpYXRpb25zIGZyb20gdGhlIGxhYiBleHBlY3RhdGlvbnMgc2hvdWxkIGJlIGFwcHJvdmVkIGJ5IG1lIG9yIHNob3VsZCBjb2luY2lkZSB3aXRoIGRvY3VtZW50YXRpb24gZnJvbSBVSSBIdW1hbiBSZXNvdXJjZXMgb3IgU3R1ZGVudCBEaXNhYmlsaXR5IFNlcnZpY2VzIG91dGxpbmluZyBhbHRlcmF0aW9ucy4KSWYgeW91IGhhdmUgY29uY2VybnMgYWJvdXQgbWVldGluZyB5b3VyIHJlc3BvbnNpYmlsaXRpZXMgb3IgZXhwZWN0YXRpb25zLCBwbGVhc2UgdGFsayB0byBtZS4KCiMjIFdlbGwtYmVpbmcgeyN3ZWxsYmVpbmd9CgpMYXN0IGJ1dCBub3QgbGVhc3QsIHlvdXIgd2VsbC1iZWluZyBpcyB2ZXJ5IGltcG9ydGFudC4KSSB3ZW50IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgZ3JhZHVhdGUgc2Nob29sIGFuZCB1bmRlcnN0YW5kIGhvdyBzdHJlc3NmdWwgdGhpbmdzIGNhbiBiZSBmcm9tIG15IG93biBleHBlcmllbmNlcy4KSWYgeW91IGZlZWwgZG93biBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIHRhbGsgdG8gbWUgb3IgYW55b25lIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHRhbGtpbmcgdG8uCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHNlZWsgcHJvZmVzc2lvbmFsIGhlbHDigJRpdCBpcyBub3QgYSBzaWduIG9mIHdlYWtuZXNzOyBpdCBpcyBhIHNpZ24gb2YgeW91IHRha2luZyBjYXJlIG9mIHlvdXJzZWxmLgoKUmVtZW1iZXIgdGhhdCBhbGwgb2YgdXMgYXJlICJuZXciIGF0IHZhcmlvdXMgcG9pbnRzIGluIG91ciBjYXJlZXJzLgpJbXBvc3RlciBzeW5kcm9tZSBpcyBub3JtYWw7IEkgZW5jb3VyYWdlIHlvdSB0byBhZG9wdCBhIGdyb3d0aCBtaW5kc2V0LgpZb3UgYXJlIG1lYW50IHRvIGJlIGhlcmUhCkZhaWx1cmUgaXMgY29tbW9uIGluIGFjYWRlbWlhLgpUYWtlIGEgbG9vayBhdCB0aGUgW0NWIG9mIEZhaWx1cmVzXShodHRwczovL3d3dy51bmktZ29ldHRpbmdlbi5kZS9kZS9kb2N1bWVudC9kb3dubG9hZC9iZWQyNzA2ZmQzNGUyOTgyMjAwNGRiZTI5Y2QwMGJiNS5wZGYvSm9oYW5uZXNfSGF1c2hvZmVyX0NWX29mX0ZhaWx1cmVzJTViMSU1ZC5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzZVRlItWkJWNCkuClBlcnNpc3RlbmNlIHBheXMgb2ZmLgpJIGhhdmUgZm91bmQgaXQgaGVscGZ1bCB0byBoYXZlIGEgWyJmZWVsZ29vZCIgZW1haWwgZm9sZGVyXShodHRwczovL2Jsb2dzLnNjaWVudGlmaWNhbWVyaWNhbi5jb20vZ3Vlc3QtYmxvZy90aGUtYXdlc29tZXN0LTcteWVhci1wb3N0ZG9jLW9yLWhvdy1pLWxlYXJuZWQtdG8tc3RvcC13b3JyeWluZy1hbmQtbG92ZS10aGUtdGVudXJlLXRyYWNrLWZhY3VsdHktbGlmZS8pIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0MzQ0ItMjVMVSkgdGhhdCBJIGNhbiByZWZlciBiYWNrIHRvIHdoZW4gdGhpbmdzIGFyZSBkaWZmaWN1bHQuCgpEbyBub3QgZm9yZ2V0IHRvIGxhdWdoIGFuZCBoYXZlIGZ1biEKR3JhZHVhdGUgc2Nob29sIGlzIGEgY2hhbGxlbmdpbmcgam9iIHdpdGggdmVyeSBoaWdoIGV4cGVjdGF0aW9ucywgYnV0IGl0IHNob3VsZCBhbHNvIGJlIGZ1bi4KWW91IGdldCB0byBzdHVkeSBzb21ldGhpbmcgdGhhdCBpcyBleGNpdGluZyB0byB5b3UgYW5kIGdldCBwYWlkIHRvIGRvIGl0IQpUbyBxdW90ZSBbTm9ybWFuIFJhbXNleSdzIGd1aWRlIGZvciBncmFkdWF0ZSBzdHVkZW50c10oaHR0cHM6Ly93d3cuY3MudHVmdHMuZWR1L35uci9zdHVkZW50cy9ndWlkZS5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzNXRlktU0gzTCksICJUbyBzdXN0YWluIHlvdXJzZWxmIHRocm91Z2ggZGlmZmljdWx0IHRpbWVzLCBmaW5kIHJlc2VhcmNoIHRoYXQgbWVhbnMgYSBsb3QgdG8geW91LgpTdWNjZXNzZnVsIHJlc2VhcmNoZXJzIGZpbmQgaW50ZXJlc3RpbmcgcHJvYmxlbXMgYW5kIGZhbGwgaW4gbG92ZSB3aXRoIHRoZW0uCkluIG9wZXJhdGlvbmFsIHRlcm1zLCBzb21lIEZyaWRheSBuaWdodHMgc2hvdWxkIGJlIHNwZW50IGhhdmluZyBmdW4gb3V0IGluIHRoZSB3b3JsZCwgYnV0IGlmIHlvdSBhcmVuJ3QgYWxzbyBzcGVuZGluZyBzb21lIEZyaWRheSBuaWdodHMgaGF2aW5nIGZ1biB3aXRoIHlvdXIgcmVzZWFyY2gsIHlvdSdyZSBub3QgZG9pbmcgdGhlIHJpZ2h0IHJlc2VhcmNoLiIKCiMjIEV4cGVjdGF0aW9ucyBmb3IgRXZlcnlvbmUgaW4gTGFiIHsjZXhwZWN0YXRpb25zRm9yRXZlcnlvbmV9CgpJbiBhZGRpdGlvbiB0byB0aGUgZXhwZWN0YXRpb25zIGRlc2NyaWJlZCBhYm92ZSBmb3IgZ3JhZHVhdGUgc3R1ZGVudHMsIHBsZWFzZSBhbHNvIHJlYWQgdGhlIFtleHBlY3RhdGlvbnMgZm9yIGV2ZXJ5b25lIGluIHRoZSBsYWJdKGV4cGVjdGF0aW9ucy1ldmVyeW9uZS5odG1sKS4KCiMgU2lnbmF0dXJlIHsjc2lnbmF0dXJlfQoKUGxlYXNlIGRvd25sb2FkLCBzaWduLCBhbmQgZW1haWwgdGhlIGJlbG93IGRvY3VtZW50IHRvIERyLiBQZXRlcnNlbiBwcmlvciB0byB5b3VyIGZpcnN0IGRheSBpbiBsYWIuCgo8ZW1iZWQgc3JjPSJGaWxlcy9zaWduYXR1cmVfcGFnZS5wZGYiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjYwMCI+CgojIEFwcGVuZGl4IHsjYXBwZW5kaXh9CgojIyBBcHByb3hpbWF0ZSBFeHBlY3RlZCBUaW1lbGluZXMgeyN0aW1lbGluZXN9CgojIyMgUmVzZWFyY2ggVGltZWxpbmUgeyN0aW1lbGluZS1yZXNlYXJjaH0KCnwgKipTZW1lc3RlcioqICAgfCAqKlJlc2VhcmNoIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgRm9ybSBSZXNlYXJjaCBBZHZpc29yeSBDb21taXR0ZWUgKFJBQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTZWxlY3QgdG9waWMgZm9yIDFzdC15ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJhY2tncm91bmQgcmVhZGluZ3Mgb24gdG9waWMgYW5kIHF1YW50aXRhdGl2ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gd3JpdGluZyBsaXRlcmF0dXJlIHJldmlldyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IENvbXBsZXRlIGxpdGVyYXR1cmUgcmV2aWV3IGZvciAxc3QgeWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gbWV0aG9kcyBhbmQgZGF0YSBhbmFseXNpcyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IENvbXBsZXRlIGFuYWx5c2lzIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUtdXAgcmVzdWx0cyBhbmQgZGlzY3Vzc2lvbiBzZWN0aW9uIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCAxc3QgeWVhciBwcm9qZWN0IHdyaXR0ZW4gZG9jdW1lbnQgZHVlIChNb25kYXkgYWZ0ZXIgVGhhbmtzZ2l2aW5nKSAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJBQyBNZWV0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgMXN0LXllYXIgcHJvamVjdCBwcmVzZW50YXRpb24gdG8gZGVwYXJ0bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTdWJtaXQgMXN0LXllYXIgcHJvamVjdCBmb3IgcHVibGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJlZ2luIGZvcm11bGF0aW5nIGNvbXByZWhlbnNpdmUgcGFwZXIgdG9waWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUkFDIE1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBGb3JtIGNvbXByZWhlbnNpdmUgZXhhbSBjb21taXR0ZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IEZsZXNoIG91dCBjb21wcmVoZW5zaXZlIHBhcGVyIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUgY29tcHJlaGVuc2l2ZSBwYXBlciBwcm9wb3NhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBDb21wcmVoZW5zaXZlIHBhcGVyIHByb3Bvc2FsIG1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdyaXRlIGNvbXByZWhlbnNpdmUgcGFwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgVHVybiBpbiBjb21wcmVoZW5zaXZlIHBhcGVyIGRyYWZ0IDEgKHNlY29uZCBNb25kYXkgaW4gRmVicnVhcnkpICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZWNlaXZlIGZlZWRiYWNrIGZyb20gY29tbWl0dGVlICgzIHdlZWsgdHVybi1hcm91bmQpICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJldmlzZSBhbmQgcmVzdWJtaXQgY29tcHJlaGVuc2l2ZSBwYXBlciAoTW9uZGF5IGJlZm9yZSBsYXN0IHdlZWsgb2YgY2xhc3NlcykgfAp8ICAgICAgICAgICAgICAgIHwgRmluYWwgY29tcHJlaGVuc2l2ZSBleGFtIGNvbW1pdHRlZSBtZWV0aW5nIHdpdGggb3JhbCBkZWZlbnNlICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBCZWdpbiB3b3JrIG9uIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IEZhbGwgICB8IEZvcm0gZGlzc2VydGF0aW9uIGNvbW1pdHRlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQ29udGludWUgd3JpdGluZyBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTcHJpbmcgfCBDb21wbGV0ZSBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IERlZmVuZCBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAoYnkgc3ByaW5nIGJyZWFrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gZGlzc2VydGF0aW9uIHJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTdW1tZXIgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiByZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXBwbHkgZm9yIGludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlldyBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgRGVmZW5kIGRpc3NlcnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2OiBTdW1tZXIgfCBbQ2xpbmljYWwgc3R1ZGVudHM6IEJlZ2luIEludGVybnNoaXBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDY6IEZhbGwgICB8IFtDbGluaWNhbCBzdHVkZW50czogSW50ZXJuc2hpcF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNjogU3ByaW5nIHwgW0NsaW5pY2FsIHN0dWRlbnRzOiBJbnRlcm5zaGlwXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA3OiBTdW1tZXIgfCBHcmFkdWF0ZSB3aXRoIFBoLkQuISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKClRoZXNlIGFyZSBndWlkZXBvc3RzIHRvd2FyZCBjb21wbGV0aW5nIHByb2dyYW0gcmVxdWlyZW1lbnRzIHdpdGhpbiBhIDUteWVhciB0aW1lZnJhbWUuClRoZSB5ZWFyIG9mIGNsaW5pY2FsIGludGVybnNoaXAgaXMgb25seSBmb3Igc3R1ZGVudHMgaW4gdGhlIENsaW5pY2FsIFNjaWVuY2UgYXJlYS4KQXMgd2UgaGF2ZSBkaXNjdXNzZWQsIG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgeW91IHdpbGwgYmUgZW5nYWdlZCBpbiByZXNlYXJjaCBhY3Rpdml0aWVzICpiZXlvbmQqIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgoKIyMjIENvdXJzZXdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jb3Vyc2V3b3JrfQoKfCAqKlNlbWVzdGVyKiogICB8ICoqQ291cnNld29yayBHb2FsKHMpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgT3JpZW50YXRpb24gdG8gQ2xpbmljYWwgUmVzZWFyY2ggKHdpdGggRENUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFF1YW50aXRhdGl2ZSBNZXRob2RzIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50cm9kdWN0b3J5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAxOiBTcHJpbmcgfCBRdWFudGl0YXRpdmUgQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUHJpbmNpcGxlcyBvZiBQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlIChIaXN0b3J5LCBDb2duaXRpdmUsIFNvY2lhbCwgQmlvbG9naWNhbCwgRGV2ZWxvcG1lbnRhbCkgICB8CnwgICAgICAgICAgICAgICAgfCBBc3Nlc3NtZW50IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQnJlYWR0aCBDb3Vyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgQnJlYWR0aC9CQklQIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IFRoZXJhcHkgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBTcHJpbmcgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBUaGVyYXB5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogRmFsbCAgIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogU3ByaW5nIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgVGhlcmFweSBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5L0V4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3ByaW5nIHwgRGlzc2VydGF0aW9uIFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkvRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKKipDbGluaWNhbCBTY2llbmNlIEFyZWEgQ291cnNlIFJlcXVpcmVtZW50cyoqCgotIDMgQ2xpbmljYWwgQ29yZSBDb3Vyc2VzIChQc3ljaG9wYXRob2xvZ3ksIFRoZXJhcGllcywgQXNzZXNzbWVudCkKLSAyIFF1YW50aXRhdGl2ZSBDb3Vyc2VzCi0gNCBCcmVhZHRoIENvdXJzZXMgKEJpb2xvZ2ljYWwsIENvZ25pdGl2ZSwgRGV2ZWxvcG1lbnRhbCwgYW5kIFNvY2lhbCBCYXNlcyBvZiBCZWhhdmlvcikKLSBIaXN0b3J5IGFuZCBTeXN0ZW1zCi0gXCpCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHJlcXVpcmVkIGNvdXJzZSAoaWYgeW91IGFyZSBwYXJ0IG9mIEJCSVApCgpOb3RlOiBCcmVhZHRoIGNvdXJzZXMgY2FuIGJlIGNvbXBsZXRlZCB3aXRoIGRpcmVjdGVkIHJlYWRpbmdzLgoKIyMjIENsaW5pY2FsIFdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jbGluaWNhbH0KCnwgKipTZW1lc3RlcioqICAgfCAqKkNsaW5pY2FsIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgWWVhciAxOiBGYWxsICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCBhZHZhbmNlZCBncmFkdWF0ZSBzdHVkZW50cyBvbiBhc3Nlc3NtZW50IHNraWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlld2luZyBwcmFjdGljdW0gd2l0aCBDbGluaWMgRGlyZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIGFkdmFuY2VkIGdyYWR1YXRlIHN0dWRlbnRzIG9uIGFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gY29tcGxldGluZyBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eSBhc3Nlc3NtZW50cyBpbiBjbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50ZXJ2aWV3aW5nIHByYWN0aWN1bSB3aXRoIENsaW5pYyBEaXJlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3VtbWVyIHwgQ29udGludWUgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkgYXNzZXNzbWVudHMsIGJlZ2luIFNEUyBhc3Nlc3NtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogRmFsbCAgIHwgQ29tcGxldGUgU0RTIGFuZCBESFMgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgMm5kLXllYXIgc2VtaW5hciB3aXRoIENsaW5pYyBEaXJlY3RvciAoTW90aXZhdGlvbmFsIEludGVydmlld2luZywgQmVoYXZpb3JhbCBBY3RpdmF0aW9uKSB8CnwgWWVhciAyOiBTcHJpbmcgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiB0YWtpbmcgdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdlZWtseSAybmQteWVhciBzZW1pbmFyIHdpdGggQ2xpbmljIERpcmVjdG9yIChNb3RpdmF0aW9uYWwgSW50ZXJ2aWV3aW5nLCBCZWhhdmlvcmFsIEFjdGl2YXRpb24pIHwKfCBZZWFyIDM6IFN1bW1lciB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IEZhbGwgICB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV2Vla2x5IDNyZC15ZWFyIHNlbWluYXIgKEV4cG9zdXJlIFRoZXJhcHkgYW5kIG90aGVyIGFwcHJvYWNoZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgQ29tcGxldGUgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIHRoZXJhcHkgY2FzZXMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgM3JkLXllYXIgc2VtaW5hciAoRXhwb3N1cmUgVGhlcmFweSBhbmQgb3RoZXIgYXBwcm9hY2hlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXb3JrIHdpdGggdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBGYWxsICAgfCBTZWFzaG9yZSBDbGluaWMgd29yayBhbmQvb3IgRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFNwcmluZyB8IFNlYXNob3JlIENsaW5pYyB3b3JrIGFuZC9vciBFeHRlcm5hbCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogRmFsbCAgIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBcHBseSBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBJbnRlcnZpZXcgZm9yIEludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBBUEEtQWNjcmVkaXRlZCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgpbXjFdOiBNYW55IG9mIHRoZSBsYWIgZXhwZWN0YXRpb25zIHdlcmUgY29iYmxlZCB0b2dldGhlciBmcm9tIGEgdmFyaWV0eSBvZiBvdGhlciBsYWJzIGFuZCBhcmUgbm90IHVuaXF1ZSB0byB0aGlzIGxhYi4KICBMaWtld2lzZSwgc29tZSBvZiB0aGUgbGFuZ3VhZ2UgdXNlZCBpbiB0aGlzIGRvY3VtZW50IHdhcyBib3Jyb3dlZCBmcm9tIG90aGVyIHNvdXJjZXMuCiAgClteMl06IEFzayBtZSB0byBnaXZlIHlvdSBhY2Nlc3MuCiAgSXQgaXMgZWFzaWVzdCB0byBzaGFyZSB0aGUgW0dvb2dsZSBEcml2ZSBmb2xkZXIgb2YgcHJpbWVyIGFydGljbGVzXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvdS8wL2ZvbGRlcnMvMVhsUFczN0FEZm42aUNDdnB0M3M2VndXeE9NS2tqSk51KSB3aXRoIHlvdXIgR29vZ2xlIGFjY291bnQuCgpbXjNdOiBZb3UgbmVlZCB0byBiZSBvbiB0aGUgVlBOIHRvIGFjY2Vzcy4KICBZb3UgbWF5IG5lZWQgdG8gY29udGFjdCB0aGUgY2xpbmljIGRpcmVjdG9yIHRvIGdldCBhY2Nlc3MgdG8gdGhlIENsaW5pYyBEcml2ZS4K