December 29, 2025: Data updated to be current as of
30 November, 2025. Update adds 393 filings. No material changes to
interpretations.
November 20, 2025: Data has been updated to be
current as of 31 October, 2025. This has resulted in material changes to
some interpretations - in the process of working through the new
data.
Note: This is a work in progress and the estimates
generated are neither final, nor guaranteed to be accurate. Please do
not circulate or cite without permission - contact
dlasby@imaginecanada.ca for permissions / more detail.
Introduction
The key issue to explore is whether qualifying disbursements have
increased with the shift to a higher disbursement quota, starting in
2023. Our primary focus is on the contributions of organizations that
have historically tended to disburse less than required by the revised
DQ (i.e., less than 5% on non-charitable assets valued at $1 million or
more). Organizations that have historically contributed above this level
are not the target of this shift. While understanding their behaviour is
interesting, it is not central to the policy question.
Secondary issue is understanding the impact of any increases in
qualifying disbursements on foundation assets. Likely going to be very
difficult to disentangle from market events; also note that there will
be significant lag effects given that the basis of value is 24 months
prior (need to understand market dynamics 36 months ago),
Background
It is important to understand that this policy change has been
enacted in an environment of tremendous growth in foundations and
foundation assets, with the further significant complication of a global
pandemic and its ongoing aftermath.
Between 2013 and 2023, the number of private foundations increased by
over a quarter (26.4%), while the number of public foundations has
contracted by about 7.1%.
The pandemic does not seem to have significantly affected growth in
the number and assets of foundations, but it does seem to have affected
granting patterns. The percentages of both public and private
foundations making gifts to qualified donees decreased somewhat during
the pandemic (potentially even somewhat prior, starting in 2018). While
rates of making gifts have increased since the depths of the pandemic,
they have not yet reached pre-pandemic norms, at least among private
foundations. The new ability to make grants to
non-qualified donees is clearly not the driver of the pandemic-period
decline as this only came into effect in 2022, though this channel looks
to be materially increasing.
Paralleling the increase in the number and assets of foundations, the
fraction of foundations reporting unused assets on lines 5900 and 5910
is increasing. Below the surface, there is an increase in
both the number of private foundations and the percentage of public and
private foundations (both new and previously existing) reporting assets
not being used in their charitable programs. Not surprisingly, the
absolute value of these assets is increasing significantly, both in
absolute terms and as a percentage of total foundation assets.
Non-charitable assets summary
Again, keep in mind that 2024 filings are not complete. Clearly there
has been a significant increase in the reporting of non-charitable
assets. Will have to see whether this is due entirely to the new form,
or filers paying more attention given the increased CRA focus on the
issue. Note also the impact on non-charitable assets when excluding
MasterCard Foundation.
It is particularly important to keep in mind that if the new filers
tend to have smaller fractions of their assets in non-charitable form
(this seems a reasonable guess), it could potentially juice naive
cross-sectional assessments (i.e., if we just restrict the analytical
universe to foundations with non-charitable assets in any period, we’ll
potentially end up including new, generally better performing
foundations in the post-DQ measures and excluding them from prior
measures).
% Foundations
Amazing what happens if one gives someone a form to fill out rather
than vague, non-enforced guidance. To really nail the case down, need to
divide 2023 into pre- and post-DQ change components.

% of total assets - wi. MC
Note that these line items are naive - they are not adjusted for
permission to accumulate property, nor do they account for permission to
reduce disbursements.

% of total assets - excl. MC
Once we exclude MasterCard Foundation we can see that for private
foundations a materially higher fraction of total assets (about 10
percentage points 2022 / 2023) are being reported as non-charitable.

Line 5900 summary

Line 5910 summary

DQ shifts
The new DQ requirements took effect for taxation years beginning on
or after January 1, 2023. By extension, this means that only foundations
with a fiscal year end of December 31 were required to meet the new
requirements for 2023. For this this reason, 2023 filings are divided
into pre- and post-DQ change groups. From 2024 onwards, all foundations
are subject to the new requirements.
Although most public foundations have earlier year ends, nearly three
quarters of private foundations have December 31 year ends.
Significantly, private foundations with December 31 year ends account
for roughly 85% of private foundation assets not used in charitable
programs.
Cross-sectional data
Have qualifying disbursements increased?
Looking at the aggregate data (total qualifying disbursements against
varying measures of total assets), there is little indication that
disbursements have increased significantly as a result the new DQ
requirements. The observed 2023/2024 fluctuations have more to do with
the types of foundations that have December 31 year ends vs. earlier
year ends and/or file early in the 6-month period after year end (and
dominate current 2024 filings) than with any observed changes in
aggregate disbursements.
It is important to understand that we shouldn’t necessarily expect to
see significant shifts in the aggregate measure. Bottom line, this
measure is just too blunt to show anything meaningful given: the rapid
increase in asset value, the 24 month lag between assets and the
calculation of the DQ requirement, and the extent to which the increase
in asset value is being dominated by a single very large foundation
(MasterCard Foundation) all reduce the acuity of this measure.
Total qualifying disbursements
Note that these figures are restricted to foundations reporting
non-charitable assets. This is different from the universe above, which
was all foundations.
% of Line 5900

% of Line 5910

% of Line 815

% of total assets

What are foundations disbursing for?
If the new DQ measures are effective, we should see qualifying
disbursements accounting for increased percentages of expenditures. If
qualifying expenditures do not account for a larger proportion of total
expenditures, this would indicate a policy failure if not by the letter
of the law, certainly by its spirit.
Complicating our assessment, we are seeing some significant problems
with the reporting of qualifying expenditures - principally double
reporting of lines 5000 and 5050; need to both control for this and
understand the impact on reporting.
In the sections below, the tabs labelled total and
average show the shifts in qualifying disbursement patterns the
others evaluate the potential impact reporting issues:
- filtered: aggregate with problematic records filtered
out
- problem rate: percentage of records that are
problematic
- % asset value: percentage of total foundation assets
captured by problematic records
- % L815: percentage of L815 (non-charitable assets, adjusted
for permission to accumulate) captured by problematic records
- % disbursement / gift / activity / grant value: percentage
of total expenditure type captured by problematic records
Qualifying disbursements as a fraction of total
expenditures
Bottom line, it does look like we are seeing increases in the
percentage of expenditures allocated to qualifying disbursements. These
can be seen in the aggregate private foundation estimates (both raw and
filtering out problematic records) and in the average data for both
public and private foundations.
Overall, the percentage of clearly problematic records (qualifying
disbursements > total expenditures) though reasonably high does not
appear to involve enough assets or disbursements to call these
conclusions into doubt.
Total

Filtered

Average
Excludes records where qualifying disbursements are greater than
total expenditures (logically impossible).

Problem rate

% asset value

% L815

% disbursement value

Gifts as a fraction of total expenditures
Incorporating the new data, looks like there isn’t huge movement in
the aggregates, though the incompleteness of the 2024 data could well be
a factor.
Whether one believes that there has been an increase in gift levels
very much depends on the timespan one is looking at. There is some
indication of near term changes (i.e., since 2020/2021), but post-DQ
change levels are actually quite in line with pre-pandemic norms.
Problematic records (gifts > total expenditures) don’t look to be
having a massive impact here, though should probably take a look at
qualifying disbursements > total expenditures filter as well.
Total

Filtered

Average
Excludes records where gifts are greater than total expenditures
(logically impossible).

Problem rate

% asset value

% L815

% gift value

Charitable activities as fraction of total
expenditures
Significant 2024 increase in aggregate among public foundations, but
this looks to be a reporting error. Private foundation data volatile
enough that it is difficult to be certain. Again, need to be cautious
because of the incompleteness of 2024 data.
Looking at the averages, there appear to be some near-term increases
for private foundations, reversing the long-term trend. Public
foundations look much more in-line with long term trends (which
increased after 2018). Key question here will be whether we are seeing
substitution of charitable activities for gifting or if this is an
artifact of increased reporting of non-charitable assets.
Problematic records (activities > total expenditures) are
relatively rare but do appear to have a material impact on the
aggregates for public foundations. Average will be substantially
unaffected by this, given the nature of the measure (one charity, one
equally weighted data point).
Total

Filtered

Average
Excludes records where activities are greater than total expenditures
(logically impossible).

Problem rate

% asset value

% L815

% activity value

Grants as fraction of total expenditures
Role of grants is clearly increasing and the amounts involved are
significant enough that they account for a material component of the
shift. Bigger impact on public foundations than private, likely driven
by the strong international component.
Error rate is non-existent here, due to the relatively marginal
character of the support (i.e., few organizations are going to give
enough grants that there is a chance that grants > total
expenditures). Given this, need to also see what the impact of a
qualifying disbursements > total expenditures filter is.
Parenthetically, two issues here: 1) MasterCard has a major impact
here, accounting for a significant fraction of total granting, 2) there
are issues with an indeterminate fraction of grants (i.e., gifts and
operating expenses being mis-identified as grants); unsure what the
monetary impact of this is.
Total

Filtered

Average
This data presentation excludes records where grants are greater than
total expenditures (logically impossible).

Problem rate

% asset value

% L815

% grants value

Changes in the distributions of disbursement percentages
In these vizes, “Baseline” refers to the filing period prior to the
DQ change, “Post-DQ changes” refers to the filing period immediately
after the DQ change, and “Sustaining” refers to the second period
following the DQ change, if the foundation has filed a T3010 for the
period.
These vizes restrict observations to foundations with qualifying
disbursements equivalent to 10% or less of non-charitable assets, so as
to give us an indication of what is going on in the part of the
distribution that is the target of the policy shift.
In interpreting these vizes, note that it is completely normal to see
significant levels of disbursement below the mandated thresholds.
Because organizations can pull prior over-contributions forward for up
to five years and following over-contributions for one year to make up
annual shortfalls, it is quite common for in-compliance foundations to
be slightly or even significantly below the DQ threshold in multiple
years and counter this by being above it in a few (or even one)
year(s).
Year over year change
Year over year changes look at changes from one year to the next,
without accounting for the fact that DQ compliance is calculated over a
7 year period (charities are able to pull forward excess qualifying
expenditures up to five years and pull them back up to one year to
compensate for under-disbursement in a particular year).
Foundations with L815 >= $1e6
Scope is foundations with non-charitable assets of $1 million or
more.

Foundations with L815 < $1e6
Scope is foundations with non-charitable assets less than $1
million.

In-range foundations with L815 > $1e6
Scope is foundations that had qualifying expenditures ranging between
3.45% and 5% of non-charitable assets prior to the DQ shifts. The
in-scope range is computed accounting for the ability to pull forward
excess qualifying expenditures to compensate for under-disbursement.

Rolling changes
Rolling changes attempt to account for the fact that DQ compliance is
calculated over a 7 year period. The data show what we would expect -
there has been a material increase in qualifying disbursements, but the
scale of the increase is small, given that organizations have only had
one or two periods at the higher contribution rate, and shows an
increase in succeeding years.
Foundations with L815 >= $1e6
Scope is foundations with non-charitable assets of $1 million or
more.

Foundations with L815 < $1e6
Scope is foundations with non-charitable assets less than $1
million.

In-range foundations with L815 > $1e6
Scope is foundations that had qualifying expenditures ranging between
3.45% and 5% of non-charitable assets prior to the DQ shifts. This is
computed accounting for the ability to pull forward excess qualifying
expenditures to compensate for under-disbursement.

Longitudinal data
While the above analyses are consistent with an increase in
disbursements, they are cross-sectional (rather than longitudinal) and
do not focus on foundations that have historically tended to disburse
less than 5% of non-charitable assets. Beyond the relatively limited
analytic potential, I include them primarily because most other analyses
will take these types of approaches. To really evaluate whether
disbursements are increasing to meet the new requirements, we need to
look at the data longitudinally (i.e., tracking changes in individual
foundation behaviour) and focus on the foundations that are actually the
object of the policy change.
Broadly, it looks like there has been a significant increase in
qualifying disbursements. Depending on how one defines the increase
(i.e., against baseline pre-DQ shift organizational norms or against an
arbitrary 3.5%) the scale of the increase appears to be somewhere in the
range of $660 million to $1 billion.
While this top line figure is certainly striking, it is notable that
MasterCard Foundation accounts for two thirds of the increase,
regardless of how one defines baseline.
To progress towards a publication, first we need to explain the
boundaries of the target population - how many foundations report
non-charitable assets of $1 million or more, disbursing less than 5% of
the value of non-charitable assets annually. Then we need to
characterize their role, in terms of the fraction of assets (both total
and non-charitable) they control, as well as the proportion of
qualifying disbursements they account for.
One could try to argue that the missing non-charitable assets data is
causing an under-estimate of any DQ shifts, but this shouldn’t actually
be viewed as a major deal for exploring this issue. Collectively, these
foundations account for only about a tenth of total assets, but about a
quarter of total expenditures and about 45% of charitable program
expenses - in sum, they don’t have a huge financial role, have pretty
high flow through of revenues, and aren’t primarily focused on
grantmaking.
Appendix A - Aggregates Excluding MasterCard Foundation
Non-charitable assets summary
% of total assets
Note that these line items are naive - they are not adjusted for
permission to accumulate property, nor do they account for permission to
reduce disbursements.

Line 5900 summary

Line 5910 summary

Total qualifying disbursements
Note that these figures are restricted to foundations reporting
non-charitable assets. This is different from the universe above, which
was all foundations.
% of Line 5900

% of Line 5910

% of Line 815

% of total assets

Appendix B - Methodology
Data completeness
Line 815 missingness
Baseline
range >= $1 million < $1 million L815 missing
Above range 15.0% 10.8% 3.6%
In range 7.5% 2.0% 0.2%
Below range 3.4% 2.4% 0.1%
Missing L815 0.0% 2.2% 52.9%
1st post-DQ
range >= $1 million < $1 million L815 missing
Above range 17.5% 13.2% 3.1%
In range 8.0% 2.0% 0.1%
Below range 3.0% 2.4% 0.2%
Missing L815 0.0% 2.3% 48.2%
2nd post-DQ
range >= $1 million < $1 million L815 missing
Above range 17.7% 13.6% 2.4%
In range 10.0% 2.3% 0.0%
Below range 2.4% 1.9% 0.2%
Missing L815 0.0% 2.5% 47.0%
Evaluating impact of Expenditures reporting issues
Filtered qualifying disbursements as a fraction of
total expenditures
These analyses exclude records where the difference between
activities (Lines 5000, 5010, 5020, 5040, 5045, and 5050) and total
expenditures exceed 2% of expenditures and $500. Broadly, the story
seems to be the same as with the unfiltered data.
Total

Filtered

Average
Excludes records where qualifying disbursements are greater than
total expenditures (logically impossible).

Problem rate

% asset value

% L815

% disbursement value

Filtered gifts as a fraction of total
expenditures
Total

Filtered

Average
Excludes records where gifts are greater than total expenditures
(logically impossible).

Problem rate

% asset value

% L815

% gift value

Filtered charitable activities as fraction of total
expenditures
Total

Filtered

Average
Excludes records where activities are greater than total expenditures
(logically impossible).

Problem rate

% asset value

% L815

% activity value

Filtered grants as fraction of total
expenditures
Total

Filtered

Average
This data presentation excludes records where grants are greater than
total expenditures (logically impossible).

Problem rate

% asset value

% L815

% grants value

LS0tCnRpdGxlOiAiQW5hbHlzaXMgbm90ZWJvb2s6IHByZWxpbWluYXJ5IGV4YW1pbmF0aW9uIG9mIHRoZSBpbXBhY3Qgb2YgRFEgY2hhbmdlcyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBkZl9wcmludDogcGFnZWQKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCi0tLQoKYGBge3Igc2V0dXAsIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0KCiMgU0VUVVAgLS0tLQoKIyMgTGlicmFyaWVzIC0tLS0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZGVzY3IpCmxpYnJhcnkocHVycnIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShzbGlkZXIpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGphbml0b3IpCmxpYnJhcnkoc2psYWJlbGxlZCkKbGlicmFyeShzdW1tYXJ5dG9vbHMpCgojIyBLbml0ciBvcHRpb25zCgprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBUUlVFLAogIGZpZy53aWR0aCA9IDYuNSwgZmlnLmhlaWdodCA9IDQuMDIpCgojIyBGdW5jdGlvbnMgLS0tLQoKc2NhbGVfZmlsbF9kaXNjcmV0ZSA8LSBmdW5jdGlvbiguLi4pIHsKICBnZ3Bsb3QyOjpzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKAogICAgIiNjODEwMmUiLCAiIzdiYWZkNCIsICIjNTBhNjg0IiwgIiNmZmM3MmMiLCAiIzMyNjI5NSIsICIjN2E0YTg5IgogICkpCn0KCnNhZmVfZGl2aWRlIDwtIGZ1bmN0aW9uKHgsIHkpIHsKICBvdXQgPC0geCAvIHkKICBvdXRbaXMuaW5maW5pdGUob3V0KV0gPC0gTkFfcmVhbF8KICBvdXQKfQoKIyMgRGF0YQoKbG9hZCgnL1VzZXJzL2RhdmlkL0xpYnJhcnkvQ2xvdWRTdG9yYWdlL0Ryb3Bib3gvUiBwcm9qZWN0cy9OZXcgQ2hhcml0eSBDb250ZW50IEV4cGxvcmF0aW9ucy9mZG5fZGF0YS5SRGF0YScpCgpgYGAKCioqRGVjZW1iZXIgMjksIDIwMjU6KiogRGF0YSB1cGRhdGVkIHRvIGJlIGN1cnJlbnQgYXMgb2YgMzAgTm92ZW1iZXIsIDIwMjUuIFVwZGF0ZSBhZGRzIDM5MyBmaWxpbmdzLiBObyBtYXRlcmlhbCBjaGFuZ2VzIHRvIGludGVycHJldGF0aW9ucy4KCioqTm92ZW1iZXIgMjAsIDIwMjU6KiogRGF0YSBoYXMgYmVlbiB1cGRhdGVkIHRvIGJlIGN1cnJlbnQgYXMgb2YgMzEgT2N0b2JlciwgMjAyNS4gVGhpcyBoYXMgcmVzdWx0ZWQgaW4gbWF0ZXJpYWwgY2hhbmdlcyB0byBzb21lIGludGVycHJldGF0aW9ucyAtIGluIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcgdGhyb3VnaCB0aGUgbmV3IGRhdGEuCgoqKk5vdGU6KiogVGhpcyBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBlc3RpbWF0ZXMgZ2VuZXJhdGVkIGFyZSBuZWl0aGVyIGZpbmFsLCBub3IgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZS4gUGxlYXNlIGRvIG5vdCBjaXJjdWxhdGUgb3IgY2l0ZSB3aXRob3V0IHBlcm1pc3Npb24gLSBjb250YWN0IGRsYXNieVxAaW1hZ2luZWNhbmFkYS5jYSBmb3IgcGVybWlzc2lvbnMgLyBtb3JlIGRldGFpbC4KCiMjIyMjIFRvIGRvIGxpc3Q6CgotIFsgXSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgY2hhbmdlcyB0byB0aGUgRFEsIGluY2x1ZGluZyBzdW1tYXJ5IG9mIGNvbnN1bHRhdGlvbiBwcm9jZXNzCi0gWyBdIGNvbWUgdXAgd2l0aCBzb21lIHNvcnQgb2YgaW1wdXRhdGlvbiBhcHByb2FjaCB0byBkZWFsIHdpdGggbWlzc2luZyBub24tY2hhcml0YWJsZSBhc3NldHMgZGF0YQogIC0gWyBdIGFsdGVybmF0aXZlbHksIGF0IGxlYXN0IGNoYXJhY3Rlcml6ZSB0aGUgZWZmZWN0cyBvZiBtaXNzaW5nIGRhdGFeW2Rvbid0IGZvcmdldCB0aGF0IGluY3JlYXNlZCByZXBvcnRpbmcgaXMgZ29pbmcgdG8gaGF2ZSBpdHMgb3duIGVmZmVjdHMgLS0gd2lsbCB0aGlzIHN5c3RlbWF0aWNhbGx5IG92ZXItIC8gdW5kZXItc3RhdGUgaW1wYWN0P10KICAKLSBbWF0gZ2VuZXJhdGUgYmFzaWMgZGF0YSBmaWxlcwoKLSBbWF0gdG9wIGxpbmUgdHJlbmQgZGF0YQogIC0gW1hdIGRpc2J1cnNlbWVudCBwYXR0ZXJucwogIC0gW1hdIG5vbi1jaGFyaXRhYmxlIGFzc2V0cwogIAotIFtYXSBjcm9zcy1zZWN0aW9uYWwgRFEgc2hpZnQgZGF0YQogIC0gW1hdIGFnZ3JlZ2F0ZSBxdWFsaWZ5aW5nIGRpc2J1cnNlbWVudHMKICAtIFtYXSBkaXN0cmlidXRpb25zIG9mIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cwogIC0gW1hdIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBhbmQgZXhwZW5kaXR1cmVzIG92ZXJhbGwKICAtIFsgXSBzZWUgd2hhdCBjaGFuZ2VzIHRoZXJlIGFyZSB3aXRoIGdyYW50cyBnb2luZyBhYnJvYWQgLSBjb21wYXJlIHRvIFNjaGVkdWxlIGRhdGEKICAtIFsgXSBsb29rIGF0IGFzc29jaWF0ZWQgb3JnYW5pemF0aW9uIGRhdGEgdG8gdHJ5IGFuZCBmaWx0ZXIgb3V0IHRyYW5zZmVycwogIAotIFsgXSBsb25naXR1ZGluYWwgRFEgc2hpZnQgZGF0YQogIC0gWyBdIGRldGVybWluZSBob3cgdG8gaWRlbnRpZnkgbW92ZXJzCiAgLSBbIF0gY2hhcmFjdGVyaXplIGJhc2VsaW5lCiAgLSBbIF0gcXVhbnRpZnkgaW5jcmVhc2UKICAKLSBbIF0gRmluZCB3YXkgb2Ygdml6aW5nIG11bHRpcGxlIGRpc3RyaWJ1dGlvbnMgb3RoZXIgdGhhbiB0cmFuc3BhcmVuY3kKLSBbIF0gZGF0YSBxdWFsaXR5IGlzc3VlcwogIC0gWyBdIGRvdWJsZSByZXBvcnRpbmcgb2YgbGluZXMgNTAwMCBhbmQgNTA1MAogIC0gWyBdIGNyb3NzLWNoZWNrIGdpZnRzIGRhdGEgb2ZmIFQxMjM2CiAgLSBbIF0gcnVuIGRvd24gY2F1c2Ugb2YgMjAyNCBhY3Rpdml0aWVzIGlzc3VlCiAgLSBbIF0gc29tZSBzb3J0IG9mIGVzdGltYXRlIG9mIHRoZSBmcmFjdGlvbiBvZiBncmFudHMgdmFsdWUgc2hvdWxkIGFjdHVhbGx5IGJlIGdpZnRzCgojIEludHJvZHVjdGlvbgoKVGhlIGtleSBpc3N1ZSB0byBleHBsb3JlIGlzIHdoZXRoZXIgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGhhdmUgaW5jcmVhc2VkIHdpdGggdGhlIHNoaWZ0IHRvIGEgaGlnaGVyIGRpc2J1cnNlbWVudCBxdW90YSwgc3RhcnRpbmcgaW4gMjAyMy4gT3VyIHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGNvbnRyaWJ1dGlvbnMgb2Ygb3JnYW5pemF0aW9ucyB0aGF0IGhhdmUgaGlzdG9yaWNhbGx5IHRlbmRlZCB0byBkaXNidXJzZSBsZXNzIHRoYW4gcmVxdWlyZWQgYnkgdGhlIHJldmlzZWQgRFEgKGkuZS4sIGxlc3MgdGhhbiA1JSBvbiBub24tY2hhcml0YWJsZSBhc3NldHMgdmFsdWVkIGF0IFwkMSBtaWxsaW9uIG9yIG1vcmUpLiBPcmdhbml6YXRpb25zIHRoYXQgaGF2ZSBoaXN0b3JpY2FsbHkgY29udHJpYnV0ZWQgYWJvdmUgdGhpcyBsZXZlbCBhcmUgbm90IHRoZSB0YXJnZXQgb2YgdGhpcyBzaGlmdC4gV2hpbGUgdW5kZXJzdGFuZGluZyB0aGVpciBiZWhhdmlvdXIgaXMgaW50ZXJlc3RpbmcsIGl0IGlzIG5vdCBjZW50cmFsIHRvIHRoZSBwb2xpY3kgcXVlc3Rpb24uCgpTZWNvbmRhcnkgaXNzdWUgaXMgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGFueSBpbmNyZWFzZXMgaW4gcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIG9uIGZvdW5kYXRpb24gYXNzZXRzLiBMaWtlbHkgZ29pbmcgdG8gYmUgdmVyeSBkaWZmaWN1bHQgdG8gZGlzZW50YW5nbGUgZnJvbSBtYXJrZXQgZXZlbnRzOyBhbHNvIG5vdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpZ25pZmljYW50IGxhZyBlZmZlY3RzIGdpdmVuIHRoYXQgdGhlIGJhc2lzIG9mIHZhbHVlIGlzIDI0IG1vbnRocyBwcmlvciAobmVlZCB0byB1bmRlcnN0YW5kIG1hcmtldCBkeW5hbWljcyAzNiBtb250aHMgYWdvKSwgCgojIEJhY2tncm91bmQKCkl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhpcyBwb2xpY3kgY2hhbmdlIGhhcyBiZWVuIGVuYWN0ZWQgaW4gYW4gZW52aXJvbm1lbnQgb2YgdHJlbWVuZG91cyBncm93dGggaW4gZm91bmRhdGlvbnMgYW5kIGZvdW5kYXRpb24gYXNzZXRzLCB3aXRoIHRoZSBmdXJ0aGVyIHNpZ25pZmljYW50IGNvbXBsaWNhdGlvbiBvZiBhIGdsb2JhbCBwYW5kZW1pYyBhbmQgaXRzIG9uZ29pbmcgYWZ0ZXJtYXRoLgoKQmV0d2VlbiAyMDEzIGFuZCAyMDIzLCB0aGUgbnVtYmVyIG9mIHByaXZhdGUgZm91bmRhdGlvbnMgaW5jcmVhc2VkIGJ5IG92ZXIgYSBxdWFydGVyIChgciBwZXJjZW50KDY1NjkgLyA1MTk3IC0gMSwgYWNjdXJhY3kgPSAwLjEpYCksIHdoaWxlIHRoZSBudW1iZXIgb2YgcHVibGljIGZvdW5kYXRpb25zIGhhcyBjb250cmFjdGVkIGJ5IGFib3V0IGByIHBlcmNlbnQoKDUwNjUgLSA0NzA0KS8gNTA2NSwgYWNjdXJhY3kgPSAwLjEpYC4KClRoZSBwYW5kZW1pYyBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgc2lnbmlmaWNhbnRseSBhZmZlY3RlZCBncm93dGggaW4gdGhlIG51bWJlciBhbmQgYXNzZXRzIG9mIGZvdW5kYXRpb25zLCBidXQgaXQgZG9lcyBzZWVtIHRvIGhhdmUgYWZmZWN0ZWQgZ3JhbnRpbmcgcGF0dGVybnMuIFRoZSBwZXJjZW50YWdlcyBvZiBib3RoIHB1YmxpYyBhbmQgcHJpdmF0ZSBmb3VuZGF0aW9ucyBtYWtpbmcgZ2lmdHMgdG8gcXVhbGlmaWVkIGRvbmVlcyBkZWNyZWFzZWQgc29tZXdoYXQgZHVyaW5nIHRoZSBwYW5kZW1pYyAocG90ZW50aWFsbHkgZXZlbiBzb21ld2hhdCBwcmlvciwgc3RhcnRpbmcgaW4gMjAxOCkuIFdoaWxlIHJhdGVzIG9mIG1ha2luZyBnaWZ0cyBoYXZlIGluY3JlYXNlZCBzaW5jZSB0aGUgZGVwdGhzIG9mIHRoZSBwYW5kZW1pYywgdGhleSBoYXZlIG5vdCB5ZXQgcmVhY2hlZCBwcmUtcGFuZGVtaWMgbm9ybXMsIGF0IGxlYXN0IGFtb25nIHByaXZhdGUgZm91bmRhdGlvbnMuXltGaWd1cmVzIGZvciAyMDI0IHJlZmxlY3Qgb25seSBmb3VuZGF0aW9ucyB0aGF0IGhhdmUgZmlsZWQgYXMgb2YgdGhlIGVuZCBvZiBTZXB0ZW1iZXIsIDIwMjUgYW5kIHNob3VsZCBub3QgYmUgdmlld2VkIGFzIHJlZmxlY3RpbmcgdGhlIHBvcHVsYXRpb24gYXMgYSB3aG9sZS5dIFRoZSBuZXcgYWJpbGl0eSB0byBtYWtlIGdyYW50cyB0byBub24tcXVhbGlmaWVkIGRvbmVlcyBpcyBjbGVhcmx5IG5vdCB0aGUgZHJpdmVyIG9mIHRoZSBwYW5kZW1pYy1wZXJpb2QgZGVjbGluZSBhcyB0aGlzIG9ubHkgY2FtZSBpbnRvIGVmZmVjdCBpbiAyMDIyLCB0aG91Z2ggdGhpcyBjaGFubmVsIGxvb2tzIHRvIGJlIG1hdGVyaWFsbHkgaW5jcmVhc2luZy4KCiMjIyMgR3Jvd3RoIGluIGZvdW5kYXRpb25zIGFuZCBwYW5kZW1pYy1yZWxhdGVkIHNoaWZ0cyB7LnRhYnNldH0KCk5vdGUgdGhhdCAyMDI0IGZpbGluZ3MgYXJlIG5vdCBjb21wbGV0ZSwgd2hpY2ggaGFzIGFuIGltcGFjdCBvbiBtb3N0IG9mIHRoZXNlIHZpc3VhbGl6YXRpb25zLgoKYGBge3IgZm91bmRhdGlvbi1ncm93dGgtYW5kLWdpZnRpbmctb3ItZ3JhbnRpbmctaW5jaWRlbmNlfQoKZGZfZmRuX2dyb3d0aCA8LSB0cmFuc2Zvcm1lZF9kZiB8PiAKICBzZWxlY3QoQk4sIEZQRSwgeWVhciwgRGVzaWdDb2RlLCBMMTgwMCwgTDIwMDAsIEw1ODQwLCBMNDIwMENoaywgTDUwNTAsIEw1MDQ1KSB8PiAKICBmaWx0ZXIoRGVzaWdDb2RlICE9ICJDIikgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICBjb3VudCA9IG4oKSwKICAgIEwxODAwX1kgPSBzdW0oTDE4MDAgPT0gIlkiLCBuYS5ybSA9IFRSVUUpLAogICAgTDE4MDBfTiA9IHN1bShMMTgwMCA9PSAiTiIsIG5hLnJtID0gVFJVRSksCiAgICBMMTgwMF9OQSA9IHN1bShpcy5uYShMMTgwMCkpLAogICAgTDIwMDBfWSA9IHN1bShMMjAwMCA9PSAiWSIsIG5hLnJtID0gVFJVRSksCiAgICBMMjAwMF9OID0gc3VtKEwyMDAwID09ICJOIiwgbmEucm0gPSBUUlVFKSwKICAgIEwyMDAwX05BID0gc3VtKGlzLm5hKEwyMDAwKSksCiAgICBMNTg0MF9ZID0gc3VtKEw1ODQwID09ICJZIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1ODQwX04gPSBzdW0oTDU4NDAgPT0gIk4iLCBuYS5ybSA9IFRSVUUpLAogICAgTDU4NDBfTkEgPSBzdW0oaXMubmEoTDU4NDApKSwKICAgIEw0MjAwQ2hrID0gc3VtKEw0MjAwQ2hrLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNTAgPSBzdW0oTDUwNTAsIG5hLnJtID0gVFJVRSksCiAgICBMNTA0NSA9IHN1bShMNTA0NSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+IAogIG11dGF0ZSgKICAgIERlc2lnQ29kZSA9IHN0cl9yZXBsYWNlX2FsbCgKICAgICAgRGVzaWdDb2RlLCBjKCJQdWJsaWMgZm91bmRhdGlvbiIgPSAiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbiIgPSAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpCiAgICApLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKAogICAgICBEZXNpZ0NvZGUsIGxldmVscyA9IGMoIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb25zIikKICAgICksCiAgICBwZXJMMTgwMCA9IEwxODAwX1kgLyByb3dTdW1zKGFjcm9zcyhjKEwxODAwX04sIEwxODAwX1ksIEwxODAwX05BKSkpLAogICAgcGVyTDIwMDAgPSBMMjAwMF9ZIC8gcm93U3VtcyhhY3Jvc3MoYyhMMjAwMF9OLCBMMjAwMF9ZLCBMMjAwMF9OQSkpKSwKICAgIHBlckw1ODQwID0gTDU4NDBfWSAvIHJvd1N1bXMoYWNyb3NzKGMoTDU4NDBfTiwgTDU4NDBfWSwgTDU4NDBfTkEpKSkKICAgICkKCmBgYAoKIyMjIyMgTnVtYmVyIG9mIGZvdW5kYXRpb25zCgpVbmRlcnN0YW5kaW5nIHRoZSB0eXBlcyBvZiBmb3VuZGF0aW9ucyB0aGF0IGFyZSBkcml2aW5nIHRoZXNlIHBhdHRlcm5zIGlzIGdvaW5nIHRvIGJlIHNpZ25pZmljYW50IGZvciBmdXR1cmUgcmVzZWFyY2guCgpgYGB7cn0KCmdncGxvdChkZl9mZG5fZ3Jvd3RoLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGNvdW50LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IG51bWJlcihjb3VudCwgYmlnLm1hcmsgPSAiLCIpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJOdW1iZXIgb2YgZm91bmRhdGlvbnMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9mZG5fZ3Jvd3RoJGNvdW50LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBBc3NldCB2YWx1ZQoKTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHRlbnQgdG8gd2hpY2ggREFGcyBhcmUgZHJpdmluZyBwdWJsaWMgZm91bmRhdGlvbiBncm93dGguIFByaXZhdGUgZm91bmRhdGlvbiBncm93dGggZG9taW5hdGVkIGJ5IE1hc3RlckNhcmQgZm91bmRhdGlvbiwgYnV0IGRvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIgZm91bmRhdGlvbnMgYXJlIGZhcmluZy4gQWx0aG91Z2ggb3VyIHByaW1hcnkgZm9jdXMgaXMgb24gZGV0ZXJtaW5pbmcgd2hldGhlciBnaWZ0cyBhcmUgaW5jcmVhc2luZywgd2UgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHNoaWZ0cyBpbiBhc3NldHMgLSBsaWtlbHkgdG9vIGVhcmx5IGZvciB0aGlzLCBidXQgbmVlZCB0byBwdXQgZG93biBzb21lIHNvcnQgb2YgbWFya2VyIHRvIGZpbGwgdGhlIHZhY3V1bS4KCmBgYHtyfQoKZ2dwbG90KGRmX2Zkbl9ncm93dGgsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gTDQyMDBDaGssIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gZG9sbGFyKEw0MjAwQ2hrLCBzY2FsZSA9IDEvMWU5LCBiaWcubWFyayA9ICIsIiwgc3VmZml4ID0gIkIiLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIHZhbHVlIG9mIGZvdW5kYXRpb24gYXNzZXRzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZmRuX2dyb3d0aCRMNDIwMENoaywgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBtYWtpbmcgZ2lmdHMKCkkgaGF2ZSBhIHNuZWFraW5nIHN1c3BpY2lvbiB0aGF0IGF0IGxlYXN0IHNvbWUgb2YgdGhpcyBpcyBidXNpbmVzcyBsaWZlLWN5Y2xlIGR5bmFtaWNzOiBwdWJsaWMgZm91bmRhdGlvbnMgZ2lmdGluZyBhdCBsb3dlciBsZXZlbHMgYmVmb3JlIGRlLXJlZ2lzdGVyaW5nIGFuZCBuZXdseSByZWdpc3RlcmVkIHByaXZhdGUgZm91bmRhdGlvbnMgbm90IHlldCBnaWZ0aW5nLiBGb3IgY29udGV4dCwgdGhlIG51bWJlciBvZiBmb3VuZGF0aW9ucyByZXF1aXJlZCBmb3IgdGhlIG9ic2VydmVkIDIwMTcgLSAyMDE5IHNoaWZ0cyB3b3VsZCBiZSBvbiB0aGUgb3JkZXIgb2YgODAgcHVibGljIGZvdW5kYXRpb25zIGFuZCA3NSBwcml2YXRlIGZvdW5kYXRpb25zLgoKYGBge3J9CgpnZ3Bsb3QoZGZfZmRuX2dyb3d0aCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJMMjAwMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlckwyMDAwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnQgb2YgZm91bmRhdGlvbnMgbWFraW5nIGdpZnRzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZmRuX2dyb3d0aCRwZXJMMjAwMCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKYGBgCgojIyMjIyBWYWx1ZSBvZiBnaWZ0cwoKTG9va2luZyBhdCB0aGUgc3RlcCBmdW5jdGlvbiBzaGlmdCBpbiBwcml2YXRlIGZvdW5kYXRpb24gc3VwcG9ydCBmcm9tIDIwMjAsIE1hc3RlckNhcmQgYW5kIFRlbWVydHkgdG9nZXRoZXIgYWNjb3VudCBmb3IgYWJvdXQgJDEuMSBiaWxsaW9uIG9mIHRoZSAyMDIxIHNoaWZ0OyAyMDIyIGlzIGEgbGl0dGxlIG1vcmUgYnJvYWRseSBiYXNlZCwgd2l0aCBNYXN0ZXJDYXJkIGFjY291bnRpbmcgZm9yIGFib3V0IGhhbGYgYW5kIHRyYW5zZm9ybWF0aXZlIGdpZnRzIHRvIEhVQ3MgZnJvbSB2YXJpb3VzIGZvdW5kYXRpb25zIGRyaXZpbmcgYSBiaWcgY2h1bmsgb2YgdGhlIHJlc3Q7IGZvciAyMDIzIHRoaW5ncyBhcmUgZXZlbiBtb3JlIGJyb2FkbHkgYmFzZWQgLSBNYXN0ZXJDYXJkIGFjY291bnRzIGZvciBhYm91dCBhIHRoaXJkLCB3aXRoIG11Y2ggb2YgdGhlIHJlc3QgZnJvbSBwcml2YXRlIGZvdW5kYXRpb25zIG1ha2luZyBzdWJzdGFudGlhbCBnaWZ0cyAoYWdhaW4sIGdlbmVyYWxseSB0byBIVUNzKS4gRm9yIDIwMjMsIG5lZWQgdG8gcnVuIGRvd24gdGhlIHRhaWxzIG9mIHRoZSBkaXN0cmlidXRpb247IHRoaXMgbWF5IGFjdHVhbGx5IGJlIGEgcmVhbCBwb2xpY3ktaW5kdWNlZCBzaGlmdC4gS2V5IGlzIGdvaW5nIHRvIGJlIHNlcGFyYXRpbmcgb3V0IHRoZSBjb250cmlidXRpb25zIGZyb20gZm91bmRhdGlvbnMgd2l0aCBub24tY2hhcml0YWJsZSBhc3NldHMgdnMuIG90aGVycyAtIGxvb2sgZm9yIG90aGVyIGFuYWx5c2VzIHRvIG5vdCBkbyB0aGlzLgoKYGBgIHtyfQoKZ2dwbG90KGRmX2Zkbl9ncm93dGgsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gTDUwNTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gZG9sbGFyKEw1MDUwLCBzY2FsZSA9IDEvMWU5LCBiaWcubWFyayA9ICIsIiwgc3VmZml4ID0gIkIiLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIHZhbHVlIG9mIGZvdW5kYXRpb24gZ2lmdHMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9mZG5fZ3Jvd3RoJEw1MDUwLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIG1ha2luZyBncmFudHMKCmBgYHtyfQoKZ2dwbG90KGRmX2Zkbl9ncm93dGgsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyTDU4NDAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJMNTg0MCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50IG9mIGZvdW5kYXRpb25zIG1ha2luZyBncmFudHMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9mZG5fZ3Jvd3RoJHBlckw1ODQwLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBWYWx1ZSBvZiBncmFudHMKCmBgYCB7cn0KCmdncGxvdChkZl9mZG5fZ3Jvd3RoLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IEw1MDQ1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IGRvbGxhcihMNTA0NSwgc2NhbGUgPSAxLzFlNiwgYmlnLm1hcmsgPSAiLCIsIHN1ZmZpeCA9ICJNIiwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJUb3RhbCB2YWx1ZSBvZiBmb3VuZGF0aW9uIGdpZnRzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZmRuX2dyb3d0aCRMNTA0NSwgbmEucm0gPSBUUlVFKSAqIDEuMTcpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMKClBhcmFsbGVsaW5nIHRoZSBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIGFuZCBhc3NldHMgb2YgZm91bmRhdGlvbnMsIHRoZSBmcmFjdGlvbiBvZiBmb3VuZGF0aW9ucyByZXBvcnRpbmcgdW51c2VkIGFzc2V0cyBvbiBsaW5lcyA1OTAwIGFuZCA1OTEwIGlzIGluY3JlYXNpbmcuXltBZ2FpbiwgMjAyNCBmaWd1cmVzIGFyZSBmcm9tIHBhcnRpYWwgZmlsaW5ncyBhbmQgc2hvdWxkIG5vdCBiZSB0YWtlbiBhcyBhIHJlbGlhYmxlIGluZGljYXRvciBvZiBjaGFuZ2UuXSBCZWxvdyB0aGUgc3VyZmFjZSwgdGhlcmUgaXMgYW4gaW5jcmVhc2UgaW4gYm90aCB0aGUgbnVtYmVyIG9mIHByaXZhdGUgZm91bmRhdGlvbnMgYW5kIHRoZSBwZXJjZW50YWdlIG9mIHB1YmxpYyBhbmQgcHJpdmF0ZSBmb3VuZGF0aW9ucyAoYm90aCBuZXcgYW5kIHByZXZpb3VzbHkgZXhpc3RpbmcpIHJlcG9ydGluZyBhc3NldHMgbm90IGJlaW5nIHVzZWQgaW4gdGhlaXIgY2hhcml0YWJsZSBwcm9ncmFtcy4gTm90IHN1cnByaXNpbmdseSwgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZXNlIGFzc2V0cyBpcyBpbmNyZWFzaW5nIHNpZ25pZmljYW50bHksIGJvdGggaW4gYWJzb2x1dGUgdGVybXMgYW5kIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBmb3VuZGF0aW9uIGFzc2V0cy4KCiMjIyMgTm9uLWNoYXJpdGFibGUgYXNzZXRzIHN1bW1hcnkgey50YWJzZXR9CgpBZ2Fpbiwga2VlcCBpbiBtaW5kIHRoYXQgMjAyNCBmaWxpbmdzIGFyZSBub3QgY29tcGxldGUuIENsZWFybHkgdGhlcmUgaGFzIGJlZW4gYSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbiB0aGUgcmVwb3J0aW5nIG9mIG5vbi1jaGFyaXRhYmxlIGFzc2V0cy4gV2lsbCBoYXZlIHRvIHNlZSB3aGV0aGVyIHRoaXMgaXMgZHVlIGVudGlyZWx5IHRvIHRoZSBuZXcgZm9ybSwgb3IgZmlsZXJzIHBheWluZyBtb3JlIGF0dGVudGlvbiBnaXZlbiB0aGUgaW5jcmVhc2VkIENSQSBmb2N1cyBvbiB0aGUgaXNzdWUuIE5vdGUgYWxzbyB0aGUgaW1wYWN0IG9uIG5vbi1jaGFyaXRhYmxlIGFzc2V0cyB3aGVuIGV4Y2x1ZGluZyBNYXN0ZXJDYXJkIEZvdW5kYXRpb24uCgpJdCBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCB0aGF0IGlmIHRoZSBuZXcgZmlsZXJzIHRlbmQgdG8gaGF2ZSBzbWFsbGVyIGZyYWN0aW9ucyBvZiB0aGVpciBhc3NldHMgaW4gbm9uLWNoYXJpdGFibGUgZm9ybSAodGhpcyBzZWVtcyBhIHJlYXNvbmFibGUgZ3Vlc3MpLCBpdCBjb3VsZCBwb3RlbnRpYWxseSBqdWljZSBuYWl2ZSBjcm9zcy1zZWN0aW9uYWwgYXNzZXNzbWVudHMgKGkuZS4sIGlmIHdlIGp1c3QgcmVzdHJpY3QgdGhlIGFuYWx5dGljYWwgdW5pdmVyc2UgdG8gZm91bmRhdGlvbnMgd2l0aCBub24tY2hhcml0YWJsZSBhc3NldHMgaW4gYW55IHBlcmlvZCwgd2UnbGwgcG90ZW50aWFsbHkgZW5kIHVwIGluY2x1ZGluZyBuZXcsIGdlbmVyYWxseSBiZXR0ZXIgcGVyZm9ybWluZyBmb3VuZGF0aW9ucyBpbiB0aGUgcG9zdC1EUSBtZWFzdXJlcyBhbmQgZXhjbHVkaW5nIHRoZW0gZnJvbSBwcmlvciBtZWFzdXJlcykuCgojIyMjIyAlIEZvdW5kYXRpb25zCgpBbWF6aW5nIHdoYXQgaGFwcGVucyBpZiBvbmUgZ2l2ZXMgc29tZW9uZSBhIGZvcm0gdG8gZmlsbCBvdXQgcmF0aGVyIHRoYW4gdmFndWUsIG5vbi1lbmZvcmNlZCBndWlkYW5jZS5eW1NuYXJreSwgYnV0IHRydWUuXSBUbyByZWFsbHkgbmFpbCB0aGUgY2FzZSBkb3duLCBuZWVkIHRvIGRpdmlkZSAyMDIzIGludG8gcHJlLSBhbmQgcG9zdC1EUSBjaGFuZ2UgY29tcG9uZW50cy4KCmBgYHtyIHJhdGUtZmlsaW5nLWw1OTAwLWw1OTEwLCB3YXJuaW5nPUZBTFNFfQoKZGZfZmlsaW5nX3JhdGUgPC0gbm9uX3Byb2dfYXNzZXRzX3N1bW1hcnkgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICB0b3Rfb3Jnc19MNTkwMCA9IG4oKSwKICAgIHJlcF9vcmdzX0w1OTAwID0gc3VtKCFpcy5uYShMNTkwMCkpLAogICAgbm9uX3JlcF9vcmdzX0w1OTAwID0gc3VtKGlzLm5hKEw1OTAwKSksCiAgICB2YWx1ZV9MNTkwMCA9IHJlcF9vcmdzX0w1OTAwIC8gdG90X29yZ3NfTDU5MDAsCiAgICB0b3Rfb3Jnc19MNTkxMCA9IG4oKSwKICAgIHJlcF9vcmdzX0w1OTEwID0gc3VtKCFpcy5uYShMNTkxMCkpLAogICAgbm9uX3JlcF9vcmdzX0w1OTEwID0gc3VtKGlzLm5hKEw1OTEwKSksCiAgICB2YWx1ZV9MNTkxMCA9IHJlcF9vcmdzX0w1OTEwIC8gdG90X29yZ3NfTDU5MTAsCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBtYXRjaGVzKCJfKEw1OTAwfEw1OTEwKSQiKSwgICAjIHBhdHRlcm4gZm9yIGJvdGggdmFyaWFibGUgc2V0cwogICAgbmFtZXNfdG8gPSBjKCIudmFsdWUiLCAidmFyaWFibGUiKSwgICMgc3BsaXQgbmFtZSBpbnRvICJiYXNlIiArICJ2YXJpYWJsZSIKICAgIG5hbWVzX3BhdHRlcm4gPSAiKC4qKV8oTDU5MDB8TDU5MTApIgogICkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB2YXJpYWJsZSkgfD4gCiAgYXJyYW5nZSh5ZWFyLCBEZXNpZ0NvZGUsIHZhcmlhYmxlKSB8PiAKICBtdXRhdGUoCiAgICBub25fcmVwX29yZ3NfaW5kZXggPSBub25fcmVwX29yZ3MgLyBmaXJzdChub25fcmVwX29yZ3MpLAogICAgcmVwX29yZ3NfaW5kZXggPSByZXBfb3JncyAvIGZpcnN0KHJlcF9vcmdzKSwKICAgIHZhcmlhYmxlID0gc3RyX3JlcGxhY2VfYWxsKAogICAgICB2YXJpYWJsZSwKICAgICAgYygKICAgICAgICAiTDU5MDAiID0gIkxpbmUgNTkwMCIsCiAgICAgICAgIkw1OTEwIiA9ICJMaW5lIDU5MTAiCiAgICAgICAgKQogICAgICApCiAgICApCgojIFBlcmNlbnQgb2Ygb3JncyByZXBvcnRpbmcgbGluZXMgNTkwMCBhbmQgNTkxMAoKZGZfdG1wIDwtIGRmX2ZpbGluZ19yYXRlCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gdmFyaWFibGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudCh2YWx1ZSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50IG9mIGZvdW5kYXRpb25zIHJlcG9ydGluZyBub24tY2hhcml0YWJsZSBhc3NldHMgb24gbGluZXMgNTkwMCBhbmQgNTkxMCIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX3RtcCR2YWx1ZSwgbmEucm0gPSBUUlVFKSAqIDEuMykpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhEZXNpZ0NvZGUpKQpgYGAKCiMjIyMjICUgb2YgdG90YWwgYXNzZXRzIC0gd2kuIE1DCgpOb3RlIHRoYXQgdGhlc2UgbGluZSBpdGVtcyBhcmUgbmFpdmUgLSB0aGV5IGFyZSBub3QgYWRqdXN0ZWQgZm9yIHBlcm1pc3Npb24gdG8gYWNjdW11bGF0ZSBwcm9wZXJ0eSwgbm9yIGRvIHRoZXkgYWNjb3VudCBmb3IgcGVybWlzc2lvbiB0byByZWR1Y2UgZGlzYnVyc2VtZW50cy4KCmBgYHtyfQoKIyBDb21wdXRlIG5ldyBlc3RpbWF0ZXMgb2YgdW51c2VkIGFzc2V0cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGFzc2V0cwoKZGZfbm9uX2NoYXJfYXNzZXRzIDwtIHRyYW5zZm9ybWVkX2RmIHw+CiAgZmlsdGVyKERlc2lnQ29kZSAlaW4lIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiwgIlByaXZhdGUgZm91bmRhdGlvbiIpKSB8PiAKICBzZWxlY3QoQk4sIERlc2lnQ29kZSwgQWNjb3VudE5hbWUsIHllYXIsIEw1OTAwLCBMNTkxMCwgTDQyMDBDaGspIHw+CiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MobWF0Y2hlcygiXkw1OXxeTDQyMDAiKSwgc3VtLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgfD4gCiAgbXV0YXRlKAogICAgYWNyb3NzKAogICAgICAuY29scyA9IG1hdGNoZXMoIl5MNTkiKSwKICAgICAgLmZucyA9IH4gaWZlbHNlKEw0MjAwQ2hrID09IDAsIE5BLCAueCAvIEw0MjAwQ2hrKSwKICAgICAgLm5hbWVzID0gInBlcl9hc3NldHNfey5jb2x9IgogICAgKQogICkgfD4gCiAgc2VsZWN0KCFjKEw1OTAwLCBMNTkxMCwgTDQyMDBDaGspKSB8PiAKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gbWF0Y2hlcygiXnBlcl9hc3NldHMiKSwKICAgIG5hbWVzX3RvID0gIm1lYXN1cmUiLAogICAgdmFsdWVzX3RvID0gInZhbHVlIiwKICAgIG5hbWVzX3BhdHRlcm4gPSAicGVyX2Fzc2V0c18oLiopIgogICkgfD4gCiAgbXV0YXRlKAogICAgbWVhc3VyZSA9IHN0cl9yZXBsYWNlX2FsbChtZWFzdXJlLCBjKCJMNTkwMCIgPSAiTGluZSA1OTAwIiwgIkw1OTEwIiA9ICJMaW5lIDU5MTAiKSksCiAgICBEZXNpZ0NvZGUgPSBzdHJfcmVwbGFjZV9hbGwoCiAgICAgIERlc2lnQ29kZSwgYygiUHVibGljIGZvdW5kYXRpb24iID0gIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb24iID0gIlByaXZhdGUgZm91bmRhdGlvbnMiKSksCiAgICBEZXNpZ0NvZGUgPSBmYWN0b3IoRGVzaWdDb2RlLCBsZXZlbHMgPSBjKCJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpKQogICkKCiMgVW51c2VkIGFzc2V0cyBhcyBhIHBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXRzCgpkZl90bXAgPC0gZGZfbm9uX2NoYXJfYXNzZXRzCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHZhbHVlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIk5vbi1jaGFyaXRhYmxlIGFzc2V0cyBhcyBhIHBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXRzIC0gd2l0aCBNYXN0ZXJDYXJkIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCmBgYAoKIyMjIyMgJSBvZiB0b3RhbCBhc3NldHMgLSBleGNsLiBNQwoKT25jZSB3ZSBleGNsdWRlIE1hc3RlckNhcmQgRm91bmRhdGlvbiB3ZSBjYW4gc2VlIHRoYXQgZm9yIHByaXZhdGUgZm91bmRhdGlvbnMgYSBtYXRlcmlhbGx5IGhpZ2hlciBmcmFjdGlvbiBvZiB0b3RhbCBhc3NldHMgKGFib3V0IDEwIHBlcmNlbnRhZ2UgcG9pbnRzIDIwMjIgLyAyMDIzKSBhcmUgYmVpbmcgcmVwb3J0ZWQgYXMgbm9uLWNoYXJpdGFibGUuCgpgYGB7cn0KCiMgQ29tcHV0ZSBuZXcgZXN0aW1hdGVzIG9mIHVudXNlZCBhc3NldHMgYXMgcGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldHMKCmRmX25vbl9jaGFyX2Fzc2V0c18yIDwtIHRyYW5zZm9ybWVkX2RmIHw+CiAgZmlsdGVyKERlc2lnQ29kZSAlaW4lIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiwgIlByaXZhdGUgZm91bmRhdGlvbiIpICYgQk4gIT0gIjgxNzM4NzI3N1JSMDAwMSIpIHw+IAogIHNlbGVjdChCTiwgRGVzaWdDb2RlLCBBY2NvdW50TmFtZSwgeWVhciwgTDU5MDAsIEw1OTEwLCBMNDIwMENoaykgfD4KICBncm91cF9ieSh5ZWFyLCBEZXNpZ0NvZGUpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcyhtYXRjaGVzKCJeTDU5fF5MNDIwMCIpLCBzdW0sIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gbWF0Y2hlcygiXkw1OSIpLAogICAgICAuZm5zID0gfiBpZmVsc2UoTDQyMDBDaGsgPT0gMCwgTkEsIC54IC8gTDQyMDBDaGspLAogICAgICAubmFtZXMgPSAicGVyX2Fzc2V0c197LmNvbH0iCiAgICApCiAgKSB8PiAKICBzZWxlY3QoIWMoTDU5MDAsIEw1OTEwLCBMNDIwMENoaykpIHw+IAogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBtYXRjaGVzKCJecGVyX2Fzc2V0cyIpLAogICAgbmFtZXNfdG8gPSAibWVhc3VyZSIsCiAgICB2YWx1ZXNfdG8gPSAidmFsdWUiLAogICAgbmFtZXNfcGF0dGVybiA9ICJwZXJfYXNzZXRzXyguKikiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBtZWFzdXJlID0gc3RyX3JlcGxhY2VfYWxsKG1lYXN1cmUsIGMoIkw1OTAwIiA9ICJMaW5lIDU5MDAiLCAiTDU5MTAiID0gIkxpbmUgNTkxMCIpKSwKICAgIERlc2lnQ29kZSA9IHN0cl9yZXBsYWNlX2FsbCgKICAgICAgRGVzaWdDb2RlLCBjKCJQdWJsaWMgZm91bmRhdGlvbiIgPSAiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbiIgPSAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpKSwKICAgIERlc2lnQ29kZSA9IGZhY3RvcihEZXNpZ0NvZGUsIGxldmVscyA9IGMoIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb25zIikpCiAgKQoKIyBVbnVzZWQgYXNzZXRzIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldHMKCmRmX3RtcCA8LSBkZl9ub25fY2hhcl9hc3NldHNfMgoKZ2dwbG90KGRmX3RtcCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSB2YWx1ZSwgZmlsbCA9IG1lYXN1cmUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudCh2YWx1ZSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJOb24tY2hhcml0YWJsZSBhc3NldHMgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIGFzc2V0cyAtIGV4Y2x1ZGluZyBNYXN0ZXJDYXJkIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCmBgYAoKIyMjIyMgTGluZSA1OTAwIHN1bW1hcnkKCmBgYHtyfQoKIyBSZXNoYXBlIHRvIGxvbmcgZm9ybWF0IGZvciBMNTkwMCBhbmQgTDU5MTAKCmRmX2w1OTAwX3N1bW1hcnkgPC0gbm9uX3Byb2dfYXNzZXRzX3N1bW1hcnkgfD4KICBncm91cF9ieSh5ZWFyLCBEZXNpZ0NvZGUpIHw+IAogIHN1bW1hcml6ZSgKICAgIHRvdF9vcmdzID0gc3VtKG4oKSksCiAgICBMNTkwMF9jb3VudCA9IHN1bShMNTkwMEZsYWcgPT0gIlllcyIsIG5hLnJtID0gVFJVRSksCiAgICBMNTkxMF9jb3VudCA9IHN1bShMNTkxMEZsYWcgPT0gIlllcyIsIG5hLnJtID0gVFJVRSksCiAgICBMNTkwMF90b3QgPSBzdW0oTDU5MDAsIG5hLnJtID0gVFJVRSksCiAgICBMNTkxMF90b3QgPSBzdW0oTDU5MTAsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gbWF0Y2hlcygiXkw1OVswMV0wXyhjb3VudHx0b3QpJCIpLAogICAgbmFtZXNfdG8gPSBjKCJsaW5lX2l0ZW0iLCAibWVhc3VyZSIpLAogICAgbmFtZXNfcGF0dGVybiA9ICIoTDU5WzAxXTApXyhjb3VudHx0b3QpIgogICkgfD4gCiAgc2VsZWN0KC10b3Rfb3JncykgCgojIENvbXB1dGUgc2NhbGUgZmFjdG9yIHRvIGFsaWduIGJhciBoZWlnaHRzCm1heF90b3QgPC0gbWF4KGRmX2w1OTAwX3N1bW1hcnkkdmFsdWVbZGZfbDU5MDBfc3VtbWFyeSRtZWFzdXJlID09ICJ0b3QiXSwgbmEucm0gPSBUUlVFKQptYXhfY291bnQgIDwtIG1heChkZl9sNTkwMF9zdW1tYXJ5JHZhbHVlW2RmX2w1OTAwX3N1bW1hcnkkbWVhc3VyZSA9PSAiY291bnQiXSwgbmEucm0gPSBUUlVFKQpjb3VudF9zY2FsZSA8LSBtYXhfdG90IC8gbWF4X2NvdW50CgoKIyBQcmVwYXJlIGRhdGEgZm9yIHBsb3R0aW5nCgpkZl90bXAgPC0gZGZfbDU5MDBfc3VtbWFyeSAgfD4KICBtdXRhdGUoCiAgICBsYWJlbCA9IGNhc2Vfd2hlbigKICAgICAgbWVhc3VyZSA9PSAidG90IiB+IGRvbGxhcih2YWx1ZSwgc2NhbGUgPSAxLzFlOSwgc3VmZml4ID0gIkIiLCBhY2N1cmFjeSA9IDAuMSksCiAgICAgIG1lYXN1cmUgPT0gImNvdW50IiB+IG51bWJlcih2YWx1ZSwgYmlnLm1hcmsgPSAiLCIpCiAgICApLCAgCiAgICB2YWx1ZSA9IGNhc2Vfd2hlbigKICAgICAgbWVhc3VyZSA9PSAiY291bnQiIH4gdmFsdWUgKiBjb3VudF9zY2FsZSwKICAgICAgLmRlZmF1bHQgPSB2YWx1ZQogICAgKSwKICAgIG1lYXN1cmUgPSBzdHJfcmVwbGFjZV9hbGwobWVhc3VyZSwgYygidG90IiA9ICJUb3RhbCBhc3NldHMiLCAiY291bnQiID0gIiMgZm91bmRhdGlvbnMiKSksCiAgICBtZWFzdXJlID0gZmFjdG9yKG1lYXN1cmUsIGxldmVscyA9IGMoIiMgZm91bmRhdGlvbnMiLCAiVG90YWwgYXNzZXRzIikpCiAgKQoKIyBMaW5lIDU5MDAgc3VtbWFyeQoKZ2dwbG90KGRmX3RtcCB8PiBmaWx0ZXIobGluZV9pdGVtID09ICJMNTkwMCIpLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBsYWJlbCksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiTGluZSA1OTAwIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCmBgYAoKIyMjIyMgTGluZSA1OTEwIHN1bW1hcnkKCmBgYHtyfQoKIyBMaW5lIDU5MTAgc3VtbWFyeQoKZ2dwbG90KGRmX3RtcCB8PiBmaWx0ZXIobGluZV9pdGVtID09ICJMNTkxMCIpLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBsYWJlbCksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiTGluZSA1OTEwIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCiAKYGBgCgojIERRIHNoaWZ0cwoKVGhlIG5ldyBEUSByZXF1aXJlbWVudHMgdG9vayBlZmZlY3QgZm9yIHRheGF0aW9uIHllYXJzIGJlZ2lubmluZyBvbiBvciBhZnRlciBKYW51YXJ5IDEsIDIwMjMuIEJ5IGV4dGVuc2lvbiwgdGhpcyBtZWFucyB0aGF0IG9ubHkgZm91bmRhdGlvbnMgd2l0aCBhIGZpc2NhbCB5ZWFyIGVuZCBvZiBEZWNlbWJlciAzMSB3ZXJlIHJlcXVpcmVkIHRvIG1lZXQgdGhlIG5ldyByZXF1aXJlbWVudHMgZm9yIDIwMjMuIEZvciB0aGlzIHRoaXMgcmVhc29uLCAyMDIzIGZpbGluZ3MgYXJlIGRpdmlkZWQgaW50byBwcmUtIGFuZCBwb3N0LURRIGNoYW5nZSBncm91cHMuIEZyb20gMjAyNCBvbndhcmRzLCBhbGwgZm91bmRhdGlvbnMgYXJlIHN1YmplY3QgdG8gdGhlIG5ldyByZXF1aXJlbWVudHMuCgpBbHRob3VnaCBtb3N0IHB1YmxpYyBmb3VuZGF0aW9ucyBoYXZlIGVhcmxpZXIgeWVhciBlbmRzLCBuZWFybHkgdGhyZWUgcXVhcnRlcnMgb2YgcHJpdmF0ZSBmb3VuZGF0aW9ucyBoYXZlIERlY2VtYmVyIDMxIHllYXIgZW5kcy4gU2lnbmlmaWNhbnRseSwgcHJpdmF0ZSBmb3VuZGF0aW9ucyB3aXRoIERlY2VtYmVyIDMxIHllYXIgZW5kcyBhY2NvdW50IGZvciByb3VnaGx5IDg1JSBvZiBwcml2YXRlIGZvdW5kYXRpb24gYXNzZXRzIG5vdCB1c2VkIGluIGNoYXJpdGFibGUgcHJvZ3JhbXMuCgojIyBDcm9zcy1zZWN0aW9uYWwgZGF0YQoKIyMjIEhhdmUgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGluY3JlYXNlZD8KCkxvb2tpbmcgYXQgdGhlIGFnZ3JlZ2F0ZSBkYXRhICh0b3RhbCBxdWFsaWZ5aW5nIGRpc2J1cnNlbWVudHMgYWdhaW5zdCB2YXJ5aW5nIG1lYXN1cmVzIG9mIHRvdGFsIGFzc2V0cyksIHRoZXJlIGlzIGxpdHRsZSBpbmRpY2F0aW9uIHRoYXQgZGlzYnVyc2VtZW50cyBoYXZlIGluY3JlYXNlZCBzaWduaWZpY2FudGx5IGFzIGEgcmVzdWx0IHRoZSBuZXcgRFEgcmVxdWlyZW1lbnRzLiBUaGUgb2JzZXJ2ZWQgMjAyMy8yMDI0IGZsdWN0dWF0aW9ucyBoYXZlIG1vcmUgdG8gZG8gd2l0aCB0aGUgdHlwZXMgb2YgZm91bmRhdGlvbnMgdGhhdCBoYXZlIERlY2VtYmVyIDMxIHllYXIgZW5kcyB2cy4gZWFybGllciB5ZWFyIGVuZHMgYW5kL29yIGZpbGUgZWFybHkgaW4gdGhlIDYtbW9udGggcGVyaW9kIGFmdGVyIHllYXIgZW5kIChhbmQgZG9taW5hdGUgY3VycmVudCAyMDI0IGZpbGluZ3MpIHRoYW4gd2l0aCBhbnkgb2JzZXJ2ZWQgY2hhbmdlcyBpbiBhZ2dyZWdhdGUgZGlzYnVyc2VtZW50cy4KCkl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgd2Ugc2hvdWxkbid0IG5lY2Vzc2FyaWx5IGV4cGVjdCB0byBzZWUgc2lnbmlmaWNhbnQgc2hpZnRzIGluIHRoZSBhZ2dyZWdhdGUgbWVhc3VyZS4gQm90dG9tIGxpbmUsIHRoaXMgbWVhc3VyZSBpcyBqdXN0IHRvbyBibHVudCB0byBzaG93IGFueXRoaW5nIG1lYW5pbmdmdWwgZ2l2ZW46IHRoZSByYXBpZCBpbmNyZWFzZSBpbiBhc3NldCB2YWx1ZSwgdGhlIDI0IG1vbnRoIGxhZyBiZXR3ZWVuIGFzc2V0cyBhbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBEUSByZXF1aXJlbWVudCwgYW5kIHRoZSBleHRlbnQgdG8gd2hpY2ggdGhlIGluY3JlYXNlIGluIGFzc2V0IHZhbHVlIGlzIGJlaW5nIGRvbWluYXRlZCBieSBhIHNpbmdsZSB2ZXJ5IGxhcmdlIGZvdW5kYXRpb24gKE1hc3RlckNhcmQgRm91bmRhdGlvbikgYWxsIHJlZHVjZSB0aGUgYWN1aXR5IG9mIHRoaXMgbWVhc3VyZS4KCiMjIyMgVG90YWwgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIHsudGFic2V0fQoKTm90ZSB0aGF0IHRoZXNlIGZpZ3VyZXMgYXJlIHJlc3RyaWN0ZWQgdG8gZm91bmRhdGlvbnMgcmVwb3J0aW5nIG5vbi1jaGFyaXRhYmxlIGFzc2V0cy4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdW5pdmVyc2UgYWJvdmUsIHdoaWNoIHdhcyBhbGwgZm91bmRhdGlvbnMuCgpgYGB7ciBhZ2dyZWdhdGUtZGF0YX0KCmRmX2FnZ19kaXNidXJzZW1lbnRzIDwtIHRyYW5zZm9ybWVkX2RmIHw+IAogIGZpbHRlcighRGVzaWdDb2RlID09ICJDIikgfD4gCiAgc2VsZWN0KEJOLCBGUEUsIHllYXIsIEFjY291bnROYW1lLCBEZXNpZ0NvZGUsIEw0MjAwQ2hrLCBMNTkwMCwgTDU5MTAsIEw1MDAwLCBMNTA1MCwgTDUwNDUsIHF1YWxFeHBlbnNlLCBMODE1KSB8PiAKICBtdXRhdGUoaXNfZGVjXzMxID0gaWZfZWxzZSgKICAgIG1vbnRoKEZQRSkgPT0gMTIgJiBkYXkoRlBFKSA9PSAzMSwKICAgICJZIiwgIk4iCiAgICApCiAgKSB8PiAKICBhcnJhbmdlKEJOLCBkZXNjKEZQRSkpIHw+IAogIGdyb3VwX2J5KEJOLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBpc19kZWNfMzEgPSBsYXN0KGlzX2RlY18zMSksCiAgICBGUEUgPSBsYXN0KEZQRSksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhBY2NvdW50TmFtZSwgRGVzaWdDb2RlLCBMNDIwMENoaywgTDU5MDAsIEw1OTEwLCBMODE1KSwKICAgICAgLmZucyA9IH4gZmlyc3QoLngpCiAgICApLAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoTDUwMDAsIEw1MDUwLCBMNTA0NSwgcXVhbEV4cGVuc2UpLAogICAgICAuZm5zID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSkKICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICByZW5hbWUoeWVhcjIgPSB5ZWFyKSB8PiAKICBtdXRhdGUoeWVhciA9IGNhc2Vfd2hlbigKICAgIHllYXIyIDw9IDIwMjIgfiBhcy5jaGFyYWN0ZXIoeWVhcjIpLAogICAgeWVhcjIgPT0gMjAyMyAmIGlzX2RlY18zMSA9PSAiTiIgfiAiMjAyM1xucHJlLURRIiwKICAgIHllYXIyID09IDIwMjMgJiBpc19kZWNfMzEgPT0gIlkiIH4gIjIwMjNcbnBvc3QtRFEiLAogICAgeWVhcjIgPiAyMDIzIH4gYXMuY2hhcmFjdGVyKHllYXIyKQogICAgKQogICAgKSB8PiAKICBtdXRhdGUoeWVhciA9IGZhY3Rvcih5ZWFyLCBsZXZlbHMgPSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiLCAiMjAyMSIsICIyMDIyIiwgIjIwMjNcbnByZS1EUSIsICIyMDIzXG5wb3N0LURRIiwgIjIwMjQiKSkpIHw+IAogIGdyb3VwX2J5KHllYXIsIERlc2lnQ29kZSkgfD4gCiAgc3VtbWFyaXplKAogICAgY291bnQgPSBzdW0obigpKSwKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw0MjAwQ2hrLCBMNTkwMCwgTDU5MTAsIEw1MDAwLCBMNTA1MCwgTDUwNDUsIHF1YWxFeHBlbnNlLCBMODE1KSwKICAgICAgLmZucyA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIGdyb3VwX2J5KERlc2lnQ29kZSkgfD4gCiAgbXV0YXRlKAogICAgcGVyT3JncyA9IGNvdW50IC8gc3VtKGNvdW50KSwKICAgIHBlckw0MjAwQ2hrID0gcXVhbEV4cGVuc2UgLyBMNDIwMENoaywKICAgIHBlckw1OTAwID0gcXVhbEV4cGVuc2UgLyBMNTkwMCwKICAgIHBlckw1OTEwID0gcXVhbEV4cGVuc2UgLyBMNTkxMCwKICAgIHBlckw4MTUgPSBxdWFsRXhwZW5zZSAvIEw4MTUsCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNDIwMENoaywgTDU5MDAsIEw1OTEwLCBMNTAwMCwgTDUwNTAsIEw1MDQ1LCBxdWFsRXhwZW5zZSwgTDgxNSksCiAgICAgIC5mbnMgPSB+IC54IC0gbGFnKC54KSwKICAgICAgLm5hbWVzID0gInsuY29sfV95b3kiCiAgICAgICksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gZW5kc193aXRoKCJfeW95IiksCiAgICAgIC5mbnMgPSB+IGNhc2Vfd2hlbigKICAgICAgICAueCA+PSAxZTkgfiBkb2xsYXIoLngsIHNjYWxlID0gMS8xZTksIHN1ZmZpeCA9ICJCIiksCiAgICAgICAgLnggPCAxZTkgfiBkb2xsYXIoLngsIHNjYWxlID0gMS8xZTYsIHN1ZmZpeCA9ICJNIikKICAgICAgICApLAogICAgICAubmFtZXMgPSAiey5jb2x9X2Zvcm1hdHRlZCIKICAgICAgKQogICAgKSB8PiAKICBtdXRhdGUoCiAgICBEZXNpZ0NvZGUgPSBmYWN0b3IoCiAgICAgIHN0cl9yZXBsYWNlX2FsbCgKICAgICAgICBEZXNpZ0NvZGUsIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9uIiA9ICJQcml2YXRlIGZvdW5kYXRpb25zIikKICAgICAgICApLAogICAgICBsZXZlbHMgPSBjKCJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpCiAgICAgICkKICAgICkKCgpgYGAKCiMjIyMjICUgb2YgTGluZSA1OTAwCgpgYGB7cn0KCmdncGxvdChkZl9hZ2dfZGlzYnVyc2VtZW50cywgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJMNTkwMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlckw1OTAwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkFnZ3JlZ2F0ZSBxdWFsaWZpZWQgZGlzYnVyc2VtZW50cyBhcyAlIG9mIExpbmUgNTkwMCIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2FnZ19kaXNidXJzZW1lbnRzJHBlckw1OTAwLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIG9mIExpbmUgNTkxMAoKYGBge3J9CgpnZ3Bsb3QoZGZfYWdnX2Rpc2J1cnNlbWVudHMsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyTDU5MTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJMNTkxMCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJBZ2dyZWdhdGUgcXVhbGlmaWVkIGRpc2J1cnNlbWVudHMgYXMgJSBvZiBMaW5lIDU5MTAiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9hZ2dfZGlzYnVyc2VtZW50cyRwZXJMNTkxMCwgbmEucm0gPSBUUlVFKSAqIDEuMzUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBvZiBMaW5lIDgxNQoKYGBge3J9CgpnZ3Bsb3QoZGZfYWdnX2Rpc2J1cnNlbWVudHMsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyTDgxNSwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlckw4MTUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiQWdncmVnYXRlIHF1YWxpZmllZCBkaXNidXJzZW1lbnRzIGFzICUgb2YgTGluZSA4MTUiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9hZ2dfZGlzYnVyc2VtZW50cyRwZXJMODE1LCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIG9mIHRvdGFsIGFzc2V0cwoKYGBge3J9CgpnZ3Bsb3QoZGZfYWdnX2Rpc2J1cnNlbWVudHMsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyTDQyMDBDaGssIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJMNDIwMENoaywgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJBZ2dyZWdhdGUgcXVhbGlmaWVkIGRpc2J1cnNlbWVudHMgYXMgJSBvZiBMaW5lIDQyMDAiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9hZ2dfZGlzYnVyc2VtZW50cyRwZXJMNDIwMENoaywgbmEucm0gPSBUUlVFKSAqIDEuMzUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCgpgYGAKCiMjIyBNZWRpYW4gZGF0YQoKTG9va2luZyBhdCBtZWRpYW4gdmFsdWVzXltXZSBmb2N1cyBvbiBtZWRpYW4gdmFsdWVzIGJlY2F1c2UgbWVhbiB2YWx1ZXMgYXJlIHRvbyBza2V3ZWQgYnkgb3V0bGllcnMuXSBmb3IgZGlzYnVyc2VtZW50cyBhcyBhIHBlcmNlbnRhZ2Ugb2Ygbm9uLWNoYXJpdGFibGUgYXNzZXRzLCB0aGVyZSAqKmlzKiogY2xlYXIgZXZpZGVuY2UgZm9yIGFuIGluY3JlYXNlIGluIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBieSBwcml2YXRlIGZvdW5kYXRpb25zLiBUaGUgZXZpZGVuY2UgZm9yIHB1YmxpYyBmb3VuZGF0aW9ucyBpcyBsZXNzIGNsZWFyLCBnaXZlbiB0aGUgMjAyMyBwcmUtRFEgY2hhbmdlIHNwaWtlIChpLmUuLCB5ZWFyLWVuZCBlZmZlY3RzIGNvdWxkIGJlIHByZWRvbWluYXRpbmcgaGVyZSkuCgojIyMjIE1lZGlhbiBxdWFsaWZ5aW5nIGRpc2J1cnNlbWVudHMgey50YWJzZXR9CgpgYGB7ciBtZWRpYW4tZGF0YX0KCmRmX21lZGlhbl9kaXNidXJzZW1lbnRzIDwtIHRyYW5zZm9ybWVkX2RmIHw+IAogIGZpbHRlcighRGVzaWdDb2RlID09ICJDIikgfD4gCiAgc2VsZWN0KEJOLCBGUEUsIHllYXIsIEFjY291bnROYW1lLCBEZXNpZ0NvZGUsIEw0MjAwQ2hrLCBMNTkwMCwgTDU5MTAsIEw4MTUsIEw1MDAwLCBMNTA1MCwgTDUwNDUsIHF1YWxFeHBlbnNlKSB8PiAKICBtdXRhdGUoaXNfZGVjXzMxID0gaWZfZWxzZSgKICAgIG1vbnRoKEZQRSkgPT0gMTIgJiBkYXkoRlBFKSA9PSAzMSwKICAgICJZIiwgIk4iCiAgICApCiAgKSB8PiAKICBhcnJhbmdlKEJOLCBkZXNjKEZQRSkpIHw+IAogIGdyb3VwX2J5KEJOLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBpc19kZWNfMzEgPSBsYXN0KGlzX2RlY18zMSksCiAgICBGUEUgPSBsYXN0KEZQRSksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhBY2NvdW50TmFtZSwgRGVzaWdDb2RlLCBMNDIwMENoaywgTDU5MDAsIEw1OTEwLCBMODE1KSwKICAgICAgLmZucyA9IH4gZmlyc3QoLngpCiAgICApLAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoTDUwMDAsIEw1MDUwLCBMNTA0NSwgcXVhbEV4cGVuc2UpLAogICAgICAuZm5zID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSkKICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTkwMCwgTDU5MTAsIEw4MTUsIEw0MjAwQ2hrKSwKICAgICAgLmZucyA9IH4gcXVhbEV4cGVuc2UgLyAueCwKICAgICAgLm5hbWVzID0gInBlcl97LmNvbH0iCiAgICApCiAgKSB8PiAKICByZW5hbWUoeWVhcjIgPSB5ZWFyKSB8PiAKICBtdXRhdGUoeWVhciA9IGNhc2Vfd2hlbigKICAgIHllYXIyIDw9IDIwMjIgfiBhcy5jaGFyYWN0ZXIoeWVhcjIpLAogICAgeWVhcjIgPT0gMjAyMyAmIGlzX2RlY18zMSA9PSAiTiIgfiAiMjAyM1xucHJlLURRIiwKICAgIHllYXIyID09IDIwMjMgJiBpc19kZWNfMzEgPT0gIlkiIH4gIjIwMjNcbnBvc3QtRFEiLAogICAgeWVhcjIgPiAyMDIzIH4gYXMuY2hhcmFjdGVyKHllYXIyKQogICAgKQogICkgfD4gCiAgbXV0YXRlKHllYXIgPSBmYWN0b3IoeWVhciwgbGV2ZWxzID0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIiwgIjIwMjEiLCAiMjAyMiIsICIyMDIzXG5wcmUtRFEiLCAiMjAyM1xucG9zdC1EUSIsICIyMDI0IikpKQoKYGBgCgojIyMjIyAlIG9mIExpbmUgNTkwMAoKYGBge3J9CgpkZl90bXAgPC0gZGZfbWVkaWFuX2Rpc2J1cnNlbWVudHMgfD4gCiAgZmlsdGVyKCFpcy5uYShwZXJfTDU5MDApKSB8PiAKICBncm91cF9ieSh5ZWFyLCBEZXNpZ0NvZGUpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKHBlcl9MNTkwMCwgcGVyX0w1OTEwLCBwZXJfTDQyMDBDaGspLAogICAgICAuZm5zID0gfiBtZWRpYW4oLnhbaXMuZmluaXRlKC54KV0sIG5hLnJtID0gVFJVRSksCiAgICAgIC5uYW1lcyA9ICJtZWRpYW5fey5jb2x9IgogICAgKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+IAogIG11dGF0ZSgKICAgIERlc2lnQ29kZSA9IHN0cl9yZXBsYWNlX2FsbChEZXNpZ0NvZGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiUHVibGljIGZvdW5kYXRpb24iID0gIlB1YmxpYyBmb3VuZGF0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcml2YXRlIGZvdW5kYXRpb24iID0gIlByaXZhdGUgZm91bmRhdGlvbnMiKSksCiAgICBEZXNpZ0NvZGUgPSBmYWN0b3IoRGVzaWdDb2RlLCBsZXZlbHMgPSBjKCJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpKQogICkKCmdncGxvdChkZl90bXAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gbWVkaWFuX3Blcl9MNTkwMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KG1lZGlhbl9wZXJfTDU5MDAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSBwYXN0ZTAoIk1lZGlhbiBxdWFsaWZpZWQgZGlzYnVyc2VtZW50cyBhcyAlIG9mIExpbmUgNTkwMCIpLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl90bXAkbWVkaWFuX3Blcl9MNTkwMCwgbmEucm0gPSBUUlVFKSAqIDEuMzUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBvZiBMaW5lIDU5MTAKCmBgYHtyfQoKZGZfdG1wIDwtIGRmX21lZGlhbl9kaXNidXJzZW1lbnRzIHw+IAogIGZpbHRlcighaXMubmEocGVyX0w1OTEwKSkgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhwZXJfTDU5MDAsIHBlcl9MNTkxMCwgcGVyX0w0MjAwQ2hrKSwKICAgICAgLmZucyA9IH4gbWVkaWFuKC54W2lzLmZpbml0ZSgueCldLCBuYS5ybSA9IFRSVUUpLAogICAgICAubmFtZXMgPSAibWVkaWFuX3suY29sfSIKICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBEZXNpZ0NvZGUgPSBzdHJfcmVwbGFjZV9hbGwoRGVzaWdDb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSBmb3VuZGF0aW9uIiA9ICJQcml2YXRlIGZvdW5kYXRpb25zIikpLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKERlc2lnQ29kZSwgbGV2ZWxzID0gYygiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbnMiKSkKICApCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IG1lZGlhbl9wZXJfTDU5MTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChtZWRpYW5fcGVyX0w1OTEwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gcGFzdGUwKCJNZWRpYW4gcXVhbGlmaWVkIGRpc2J1cnNlbWVudHMgYXMgJSBvZiBMaW5lIDU5MTAiKSwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJG1lZGlhbl9wZXJfTDU5MTAsIG5hLnJtID0gVFJVRSkgKiAxLjM1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgb2YgTGluZSA4MTUKCmBgYHtyfQoKZGZfdG1wIDwtIGRmX21lZGlhbl9kaXNidXJzZW1lbnRzIHw+IAogIGZpbHRlcighaXMubmEocGVyX0w4MTUpKSB8PiAKICBncm91cF9ieSh5ZWFyLCBEZXNpZ0NvZGUpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKHBlcl9MNTkwMCwgcGVyX0w1OTEwLCBwZXJfTDgxNSwgcGVyX0w0MjAwQ2hrKSwKICAgICAgLmZucyA9IH4gbWVkaWFuKC54W2lzLmZpbml0ZSgueCldLCBuYS5ybSA9IFRSVUUpLAogICAgICAubmFtZXMgPSAibWVkaWFuX3suY29sfSIKICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBEZXNpZ0NvZGUgPSBzdHJfcmVwbGFjZV9hbGwoRGVzaWdDb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSBmb3VuZGF0aW9uIiA9ICJQcml2YXRlIGZvdW5kYXRpb25zIikpLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKERlc2lnQ29kZSwgbGV2ZWxzID0gYygiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbnMiKSkKICApCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IG1lZGlhbl9wZXJfTDgxNSwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KG1lZGlhbl9wZXJfTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiTWVkaWFuIHF1YWxpZmllZCBkaXNidXJzZW1lbnRzIGFzICUgb2YgTGluZSA4MTUiKSwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJG1lZGlhbl9wZXJfTDgxNSwgbmEucm0gPSBUUlVFKSAqIDEuMzUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKCiMjIyMjICUgb2YgdG90YWwgYXNzZXRzCgpgYGB7cn0KCmRmX3RtcCA8LSBkZl9tZWRpYW5fZGlzYnVyc2VtZW50cyB8PiAKICBmaWx0ZXIoIWlzLm5hKHBlcl9MNTkwMCkgJiAhaXMubmEocGVyX0w1OTEwKSkgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhwZXJfTDU5MDAsIHBlcl9MNTkxMCwgcGVyX0w0MjAwQ2hrKSwKICAgICAgLmZucyA9IH4gbWVkaWFuKC54W2lzLmZpbml0ZSgueCldLCBuYS5ybSA9IFRSVUUpLAogICAgICAubmFtZXMgPSAibWVkaWFuX3suY29sfSIKICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBEZXNpZ0NvZGUgPSBzdHJfcmVwbGFjZV9hbGwoRGVzaWdDb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSBmb3VuZGF0aW9uIiA9ICJQcml2YXRlIGZvdW5kYXRpb25zIikpLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKERlc2lnQ29kZSwgbGV2ZWxzID0gYygiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbnMiKSkKICApCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IG1lZGlhbl9wZXJfTDQyMDBDaGssIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChtZWRpYW5fcGVyX0w0MjAwQ2hrLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gcGFzdGUwKCJNZWRpYW4gcXVhbGlmaWVkIGRpc2J1cnNlbWVudHMgYXMgJSBvZiBMaW5lIDQyMDAgKGZkbnMgd2kuIG5vbi1jaGFyaXRhYmxlIGFzc2V0cyBvbmx5KSIpLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl90bXAkbWVkaWFuX3Blcl9MNDIwMENoaywgbmEucm0gPSBUUlVFKSAqIDEuMzUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkgCgpgYGAKCiMjIyBXaGF0IGFyZSBmb3VuZGF0aW9ucyBkaXNidXJzaW5nICpmb3IqPwoKSWYgdGhlIG5ldyBEUSBtZWFzdXJlcyBhcmUgZWZmZWN0aXZlLCB3ZSBzaG91bGQgc2VlIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBhY2NvdW50aW5nIGZvciBpbmNyZWFzZWQgcGVyY2VudGFnZXMgb2YgZXhwZW5kaXR1cmVzLiBJZiBxdWFsaWZ5aW5nIGV4cGVuZGl0dXJlcyBkbyBub3QgYWNjb3VudCBmb3IgYSBsYXJnZXIgcHJvcG9ydGlvbiBvZiB0b3RhbCBleHBlbmRpdHVyZXMsIHRoaXMgd291bGQgaW5kaWNhdGUgYSBwb2xpY3kgZmFpbHVyZSBpZiBub3QgYnkgdGhlIGxldHRlciBvZiB0aGUgbGF3LCBjZXJ0YWlubHkgYnkgaXRzIHNwaXJpdC4KCkNvbXBsaWNhdGluZyBvdXIgYXNzZXNzbWVudCwgd2UgYXJlIHNlZWluZyBzb21lIHNpZ25pZmljYW50IHByb2JsZW1zIHdpdGggdGhlIHJlcG9ydGluZyBvZiBxdWFsaWZ5aW5nIGV4cGVuZGl0dXJlcyAtIHByaW5jaXBhbGx5IGRvdWJsZSByZXBvcnRpbmcgb2YgbGluZXMgNTAwMCBhbmQgNTA1MDsgbmVlZCB0byBib3RoIGNvbnRyb2wgZm9yIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiByZXBvcnRpbmcuIAoKSW4gdGhlIHNlY3Rpb25zIGJlbG93LCB0aGUgdGFicyBsYWJlbGxlZCAqdG90YWwqIGFuZCAqYXZlcmFnZSogc2hvdyB0aGUgc2hpZnRzIGluIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50IHBhdHRlcm5zIHRoZSBvdGhlcnMgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBpbXBhY3QgcmVwb3J0aW5nIGlzc3VlczoKCi0gKmZpbHRlcmVkKjogYWdncmVnYXRlIHdpdGggcHJvYmxlbWF0aWMgcmVjb3JkcyBmaWx0ZXJlZCBvdXQKLSAqcHJvYmxlbSByYXRlKjogcGVyY2VudGFnZSBvZiByZWNvcmRzIHRoYXQgYXJlIHByb2JsZW1hdGljCi0gKiUgYXNzZXQgdmFsdWUqOiBwZXJjZW50YWdlIG9mIHRvdGFsIGZvdW5kYXRpb24gYXNzZXRzIGNhcHR1cmVkIGJ5IHByb2JsZW1hdGljIHJlY29yZHMKLSAqJSBMODE1KjogcGVyY2VudGFnZSBvZiBMODE1IChub24tY2hhcml0YWJsZSBhc3NldHMsIGFkanVzdGVkIGZvciBwZXJtaXNzaW9uIHRvIGFjY3VtdWxhdGUpIGNhcHR1cmVkIGJ5IHByb2JsZW1hdGljIHJlY29yZHMKLSAqJSBkaXNidXJzZW1lbnQgLyBnaWZ0IC8gYWN0aXZpdHkgLyBncmFudCB2YWx1ZSo6IHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmUgdHlwZSBjYXB0dXJlZCBieSBwcm9ibGVtYXRpYyByZWNvcmRzCgpgYGAge3IgZGlzYnVyc2VtZW50cy12cy1leHBlbmRpdHVyZXMtZGF0YX0KCmRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgPC0gdHJhbnNmb3JtZWRfZGYgfD4gCiAgZmlsdGVyKCFEZXNpZ0NvZGUgPT0gIkMiKSB8PiAKICBzZWxlY3QoCiAgICBCTiwgRlBFLCB5ZWFyLCBBY2NvdW50TmFtZSwgRGVzaWdDb2RlLCBMNDk1MCwgTDUwMTAsIEw1MDIwLCBMNTA0MCwgcXVhbEV4cGVuc2UsCiAgICBMNTAwMCwgTDUwNTAsIGdpZnRfYW1vdW50X3N1bSwgTDUwNDUsIEw0OTUwQ2hrLCBMNTEwMENoaywgTDUxMDAsIEw0OTUwRmxhZywKICAgIEw1MTAwRmxhZywgRmluYW5jaWFsSW5kaWMsIEw4MTUsIEw1OTAwCiAgICApIHw+IAogIG11dGF0ZSgKICAgIEw0OTUwQ29tcG9uZW50cyA9IHJvd1N1bXMoCiAgICAgIGFjcm9zcygKICAgICAgICBjKEw1MDAwLCBMNTAxMCwgTDUwMjAsIEw1MDQwKQogICAgICAgICksCiAgICAgIG5hLnJtID0gVFJVRQogICAgICApLAogICAgbm9uUXVhbEV4cGVuc2UgPSByb3dTdW1zKAogICAgICBhY3Jvc3MoCiAgICAgICAgYyhMNTAxMCwgTDUwMjAsIEw1MDQwKQogICAgICAgICksCiAgICAgIG5hLnJtID0gVFJVRQogICAgICApLAogICAgdGVzdFF1YWxFeHBlbnNlID0gcm93U3VtcygKICAgICAgYWNyb3NzKAogICAgICAgIGMoTDUwMDAsIEw1MDQ1LCBMNTA1MCkKICAgICAgICApLCAKICAgICAgbmEucm0gPSBUUlVFCiAgICAgICksCiAgICBpc19kZWNfMzEgPSBpZl9lbHNlKAogICAgICBtb250aChGUEUpID09IDEyICYgZGF5KEZQRSkgPT0gMzEsIlkiLCAiTiIKICAgICAgKQogICAgKSB8PiAKICBhcnJhbmdlKEJOLCBkZXNjKEZQRSkpIHw+IAogIGdyb3VwX2J5KEJOLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBpc19kZWNfMzEgPSBsYXN0KGlzX2RlY18zMSksCiAgICBGUEUgPSBsYXN0KEZQRSksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYygKICAgICAgICBBY2NvdW50TmFtZSwgRGVzaWdDb2RlLCBMNTEwMEZsYWcsIEw0OTUwRmxhZywgRmluYW5jaWFsSW5kaWMKICAgICAgICApLAogICAgICAuZm5zID0gfiBmaXJzdCgueCkKICAgICksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYygKICAgICAgICBMNDk1MCwgTDUwMTAsIEw1MDIwLCBMNTA0MCwgTDUwMDAsIEw1MDUwLCBnaWZ0X2Ftb3VudF9zdW0sIEw1MDQ1LCAKICAgICAgICBxdWFsRXhwZW5zZSwgbm9uUXVhbEV4cGVuc2UsIHRlc3RRdWFsRXhwZW5zZSwgTDUxMDBDaGssIEw1MTAwLCAKICAgICAgICBMNDk1MENoaywgTDQ5NTBDb21wb25lbnRzLCBMODE1LCBMNTkwMAogICAgICAgICksCiAgICAgIC5mbnMgPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICByZW5hbWUoeWVhcjIgPSB5ZWFyKSB8PiAKICBtdXRhdGUoeWVhciA9IGNhc2Vfd2hlbigKICAgIHllYXIyIDw9IDIwMjIgfiBhcy5jaGFyYWN0ZXIoeWVhcjIpLAogICAgeWVhcjIgPT0gMjAyMyAmIGlzX2RlY18zMSA9PSAiTiIgfiAiMjAyM1xucHJlLURRIiwKICAgIHllYXIyID09IDIwMjMgJiBpc19kZWNfMzEgPT0gIlkiIH4gIjIwMjNcbnBvc3QtRFEiLAogICAgeWVhcjIgPiAyMDIzIH4gYXMuY2hhcmFjdGVyKHllYXIyKQogICAgKQogICkgfD4gCiAgbXV0YXRlKAogICAgeWVhciA9IGZhY3RvcigKICAgICAgeWVhciwgCiAgICAgIGxldmVscyA9IGMoCiAgICAgICAgIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsCiAgICAgICAgIjIwMjAiLCAiMjAyMSIsICIyMDIyIiwgIjIwMjNcbnByZS1EUSIsICIyMDIzXG5wb3N0LURRIiwgIjIwMjQiCiAgICAgICAgKQogICAgICApLAogICAgRGVzaWdDb2RlID0gc3RyX3JlcGxhY2VfYWxsKAogICAgICBEZXNpZ0NvZGUsCiAgICAgIGMoCiAgICAgICAgIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLAogICAgICAgICJQcml2YXRlIGZvdW5kYXRpb24iID0gIlByaXZhdGUgZm91bmRhdGlvbnMiCiAgICAgICAgKQogICAgICApLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKAogICAgICBEZXNpZ0NvZGUsIAogICAgICBsZXZlbHMgPSBjKAogICAgICAgICJQdWJsaWMgZm91bmRhdGlvbnMiLAogICAgICAgICJQcml2YXRlIGZvdW5kYXRpb25zIgogICAgICAgICkKICAgICAgKSwKICAgIHF1YWxFeHBlbnNlRmxhZ0NoayA9IGlmX2Vsc2UoCiAgICAgIHF1YWxFeHBlbnNlID4gTDUxMDBDaGssICJGYWlsIiwgIlBhc3MiCiAgICAgICksCiAgICBxdWFsRXhwZW5zZUZsYWdPcmlnID0gaWZfZWxzZSgKICAgICAgcXVhbEV4cGVuc2UgPiBMNTEwMCwgIkZhaWwiLCAiUGFzcyIKICAgICAgKSwKICAgIEw1MDAwRmxhZyA9IGlmX2Vsc2UoCiAgICAgIEw1MDAwID4gTDUxMDBDaGssICJGYWlsIiwgIlBhc3MiCiAgICAgICksCiAgICBMNTAwMEZsYWcyID0gaWZfZWxzZSgKICAgICAgTDUwMDAgPiBMNDk1MCwgIkZhaWwiLCAiUGFzcyIKICAgICAgKSwKICAgIEw1MDAwX0w1MDUwX2VxdWl2ID0gaWZfZWxzZSgKICAgICAgKEw1MDAwID09IEw1MDUwKSAmIChMNTEwMENoayA9PSBMNTEwMCAqIDIpLCAiVHJ1ZSIsICJGYWxzZSIKICAgICAgKSwKICAgIHRlc3RRdWFsRXhwZW5zZUZsYWcgPSBpZl9lbHNlKAogICAgICB0ZXN0UXVhbEV4cGVuc2UgPT0gcXVhbEV4cGVuc2UsICJQYXNzIiwgIkZhaWwiCiAgICAgICksCiAgICBMNDk1MENvbXBvbmVudHNSZXBvcnRlZEZsYWcgPSBpZl9lbHNlKAogICAgICBhYnMoTDQ5NTBDb21wb25lbnRzIC0gTDQ5NTApIC8gTDQ5NTAgPD0gMC4wMiB8CiAgICAgICAgYWJzKEw0OTUwQ29tcG9uZW50cyAtTDQ5NTApIDw9IDUwMCwKICAgICAgIlBhc3MiLAogICAgICAiRmFpbCIKICAgICAgKSwKICAgIEw0OTUwQ29tcG9uZW50c0Noa0ZsYWcgPSBpZl9lbHNlKAogICAgICBhYnMoTDQ5NTBDb21wb25lbnRzIC0gTDQ5NTBDaGspIC8gTDQ5NTBDaGsgPCAwLjAyIHwKICAgICAgICBhYnMoTDQ5NTBDb21wb25lbnRzIC0gTDQ5NTApIDw9IDUwMCwKICAgICAgIlBhc3MiLCAiRmFpbCIKICAgICAgKSwKICAgIFRvdGFsQWN0aXZpdGllc0ZsYWcgPSBpZl9lbHNlKAogICAgICBMNDk1MCArIEw1MDUwICsgTDUwNDUgPD0gTDUxMDBDaGssCiAgICAgICJQYXNzIiwgIkZhaWwiCiAgICAgICksCiAgICBDb21wb25lbnRzT3Zlckw0OTUwRmxhZyA9IGlmX2Vsc2UoCiAgICAgIEw0OTUwQ29tcG9uZW50cyA+IEw0OTUwIHwgTDQ5NTBDb21wb25lbnRzID4gTDQ5NTBDaGssCiAgICAgICJGYWlsIiwgIlBhc3MiCiAgICAgICksCiAgICBBY3Rpdml0aWVzID0gcm93U3VtcygKICAgICAgYWNyb3NzKAogICAgICAgIGMoTDUwMDAsIEw1MDEwLCBMNTAyMCwgTDUwNDAsIEw1MDQ1LCBMNTA1MCkKICAgICAgICApLAogICAgICBuYS5ybSA9IFRSVUUKICAgICAgKSwKICAgIEFjdGl2aXRpZXNGbGFnID0gaWZfZWxzZSgKICAgICAgYWJzKEFjdGl2aXRpZXMgLSBMNTEwMENoaykgLyBMNTEwMENoayA8IDAuMDIgfAogICAgICAgIGFicyhBY3Rpdml0aWVzIC0gTDUxMDBDaGspIDw9IDUwMCwKICAgICAgIlBhc3MiLCAiRmFpbCIKICAgICAgKSwKICAgIE1hc3RlckZsYWcgPSBpZl9lbHNlKAogICAgICBMNDk1MENvbXBvbmVudHNDaGtGbGFnID09ICJGYWlsIiAmIEFjdGl2aXRpZXNGbGFnID09ICJGYWlsIiwKICAgICAgIkZhaWwiLCAiUGFzcyIKICAgICAgKSwKICAgIHF1YWxFeHBlbnNlUGVyQ2hrID0gcXVhbEV4cGVuc2UgLyBMNTEwMENoaywKICAgIHF1YWxFeHBlbnNlUGVyT3JpZyA9IHF1YWxFeHBlbnNlIC8gTDUxMDAKICAgICkgfD4gCiAgcmVsb2NhdGUoCiAgICBjKEw0OTUwQ2hrLCBMNDk1MENvbXBvbmVudHMsIEw0OTUwQ29tcG9uZW50c1JlcG9ydGVkRmxhZywgTDQ5NTBDb21wb25lbnRzQ2hrRmxhZyksCiAgICAuYWZ0ZXIgPSBMNDk1MAogICAgKSB8PiAKICByZWxvY2F0ZSgKICAgIGMoCiAgICAgIEw0OTUwRmxhZywgTDUxMDBGbGFnLCBMNDk1MENoaywgTDQ5NTAsIEw0OTUwQ29tcG9uZW50cywgQ29tcG9uZW50c092ZXJMNDk1MEZsYWcsIAogICAgICBMNTAwMCwgTDUwMTAsIEw1MDIwLCBMNTA0MCwgTDUwNDUsIEw1MDUwLCBnaWZ0X2Ftb3VudF9zdW0sIHF1YWxFeHBlbnNlLCBBY3Rpdml0aWVzLCAKICAgICAgTDUxMDBDaGssIEw1MTAwLCBBY3Rpdml0aWVzRmxhZywgTWFzdGVyRmxhZwogICAgICApLAogICAgLmFmdGVyID0gRmluYW5jaWFsSW5kaWMKICAgICkKCgoKZGZfaXNzdWVzIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlLCBMNTEwMEZsYWcpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw0OTUwQ2hrLCBMNTEwMENoaywgcXVhbEV4cGVuc2UsIEw1MDAwLCBMNTA1MCwgTDUwNDUsIEw1OTAwLCBMODE1KSwKICAgICAgLmZucyA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIGZpbHRlcighaXMubmEoTDUxMDBGbGFnKSkgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBtdXRhdGUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNDk1MENoaywgTDUxMDBDaGssIHF1YWxFeHBlbnNlLCBMNTAwMCwgTDUwNTAsIEw1MDQ1LCBMNTkwMCwgTDgxNSksCiAgICAgIC5mbnMgPSB+IC54IC8gc3VtKC54LCBuYS5ybSA9IFRSVUUpLAogICAgICAubmFtZXMgPSAiey5jb2x9X3BjdCIKICAgICAgKQogICAgKSB8PiAKICB1bmdyb3VwKCkgfD4gCiAgYXJyYW5nZShEZXNpZ0NvZGUsIHllYXIpCgoKYGBgCgojIyMjIFF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBhcyBhIGZyYWN0aW9uIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyB7LnRhYnNldH0KCkJvdHRvbSBsaW5lLCBpdCBkb2VzIGxvb2sgbGlrZSB3ZSBhcmUgc2VlaW5nIGluY3JlYXNlcyBpbiB0aGUgcGVyY2VudGFnZSBvZiBleHBlbmRpdHVyZXMgYWxsb2NhdGVkIHRvIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cy4gVGhlc2UgY2FuIGJlIHNlZW4gaW4gdGhlIGFnZ3JlZ2F0ZSBwcml2YXRlIGZvdW5kYXRpb24gZXN0aW1hdGVzIChib3RoIHJhdyBhbmQgZmlsdGVyaW5nIG91dCBwcm9ibGVtYXRpYyByZWNvcmRzKSBhbmQgaW4gdGhlIGF2ZXJhZ2UgZGF0YSBmb3IgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUgZm91bmRhdGlvbnMuCgpPdmVyYWxsLCB0aGUgcGVyY2VudGFnZSBvZiBjbGVhcmx5IHByb2JsZW1hdGljIHJlY29yZHMgKHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyA+IHRvdGFsIGV4cGVuZGl0dXJlcykgdGhvdWdoIHJlYXNvbmFibHkgaGlnaCBkb2VzIG5vdCBhcHBlYXIgdG8gaW52b2x2ZSBlbm91Z2ggYXNzZXRzIG9yIGRpc2J1cnNlbWVudHMgdG8gY2FsbCB0aGVzZSBjb25jbHVzaW9ucyBpbnRvIGRvdWJ0LgoKYGBgIHtyIHF1YWwtZGlzYi1kYXRhfQoKdG90YWwgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgdG90YWwgPSBxdWFsRXhwZW5zZSAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIHF1YWxFeHBlbnNlX3RvdCA9IHF1YWxFeHBlbnNlLAogICAgTDUxMDBDaGtfdG90ID0gTDUxMDBDaGsKICAgICkKCmZpbHRlcmVkIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgbXV0YXRlKHF1YWxFeHBlbnNlX3BlciA9IHF1YWxFeHBlbnNlIC8gTDUxMDBDaGspIHw+IAogIGZpbHRlcihxdWFsRXhwZW5zZV9wZXIgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhxdWFsRXhwZW5zZSwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIGZpbHRlcmVkID0gcXVhbEV4cGVuc2UgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBxdWFsRXhwZW5zZV9maWx0ID0gcXVhbEV4cGVuc2UsCiAgICBMNTEwMENoa19maWx0ID0gTDUxMDBDaGsKICAgICkKCnByb2JsZW1fcmF0ZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgcXVhbEV4cGVuc2VfcGVyID0gc2FmZV9kaXZpZGUocXVhbEV4cGVuc2UsIEw1MTAwQ2hrKSwKICAgIHF1YWxFeHBlbnNlX2ZsYWcgPSBpZl9lbHNlKHF1YWxFeHBlbnNlX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgcXVhbEV4cGVuc2VfWSA9IHN1bShxdWFsRXhwZW5zZV9mbGFnID09ICJZIiwgbmEucm0gPSBUUlVFKSwKICAgIHF1YWxFeHBlbnNlX04gPSBzdW0ocXVhbEV4cGVuc2VfZmxhZyA9PSAiTiIsIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9OQSA9IHN1bShpcy5uYShxdWFsRXhwZW5zZV9mbGFnKSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZSgKICAgIHByb2JsZW1fcmF0ZSA9IHF1YWxFeHBlbnNlX1kgLyAocXVhbEV4cGVuc2VfTiArIHF1YWxFeHBlbnNlX05BKQogICAgKSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwcm9ibGVtX3JhdGUpCiAgCnBlcl9hc3NldHMgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIHF1YWxFeHBlbnNlX3BlciA9IHNhZmVfZGl2aWRlKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICBxdWFsRXhwZW5zZV9mbGFnID0gaWZfZWxzZShxdWFsRXhwZW5zZV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MTAwQ2hrX2FtdF9ZID0gc3VtKEw1MTAwQ2hrW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OID0gc3VtKEw1MTAwQ2hrW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OQSA9IHN1bShMNTEwMENoa1tpcy5uYShxdWFsRXhwZW5zZV9mbGFnKV0pLAogICAgTDUxMDBDaGtfYW10X3RvdCA9IHN1bShMNTEwMENoaywgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9hc3NldHMgPSBMNTEwMENoa19hbXRfWSAvIEw1MTAwQ2hrX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9hc3NldHMpCgpwZXJfTDgxNSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgcXVhbEV4cGVuc2VfcGVyID0gc2FmZV9kaXZpZGUocXVhbEV4cGVuc2UsIEw1MTAwQ2hrKSwKICAgIHF1YWxFeHBlbnNlX2ZsYWcgPSBpZl9lbHNlKHF1YWxFeHBlbnNlX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDgxNV9hbXRfWSA9IHN1bShMODE1W3F1YWxFeHBlbnNlX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X04gPSBzdW0oTDgxNVtxdWFsRXhwZW5zZV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMODE1X2FtdF9OQSA9IHN1bShMODE1W2lzLm5hKHF1YWxFeHBlbnNlX2ZsYWcpXSksCiAgICBMODE1X2FtdF90b3QgPSBzdW0oTDgxNSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9MODE1ID0gTDgxNV9hbXRfWSAvIEw4MTVfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX0w4MTUpCgpwZXJfcXVhbEV4cGVuc2UgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIHF1YWxFeHBlbnNlX3BlciA9IHNhZmVfZGl2aWRlKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICBxdWFsRXhwZW5zZV9mbGFnID0gaWZfZWxzZShxdWFsRXhwZW5zZV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIHF1YWxFeHBlbnNlX2FtdF9ZID0gc3VtKHF1YWxFeHBlbnNlW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIHF1YWxFeHBlbnNlX2FtdF9OID0gc3VtKHF1YWxFeHBlbnNlW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIHF1YWxFeHBlbnNlX2FtdF9OQSA9IHN1bShxdWFsRXhwZW5zZVtpcy5uYShxdWFsRXhwZW5zZV9mbGFnKV0pLAogICAgcXVhbEV4cGVuc2VfYW10X3RvdCA9IHN1bShxdWFsRXhwZW5zZSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9xdWFsRXhwZW5zZSA9IHF1YWxFeHBlbnNlX2FtdF9ZIC8gcXVhbEV4cGVuc2VfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX3F1YWxFeHBlbnNlKQoKYXZnX3F1YWxFeHBlbnNlIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBhdmdfcXVhbEV4cGVuc2UgPSBzYWZlX2RpdmlkZShxdWFsRXhwZW5zZSwgTDUxMDBDaGspCiAgICApIHw+CiAgZmlsdGVyKGF2Z19xdWFsRXhwZW5zZSA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKGF2Z19xdWFsRXhwZW5zZSksCiAgICAgIC5mbiA9IH4gbWVhbigueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApCgpkZl9kaXNwX2V4cCA8LSB0b3RhbCB8PiAKICBsZWZ0X2pvaW4oZmlsdGVyZWQsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHByb2JsZW1fcmF0ZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX2Fzc2V0cywgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX0w4MTUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9xdWFsRXhwZW5zZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4oYXZnX3F1YWxFeHBlbnNlLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpCgpybSh0b3RhbCwgZmlsdGVyZWQsIHByb2JsZW1fcmF0ZSwgcGVyX2Fzc2V0cywgcGVyX0w4MTUsIHBlcl9xdWFsRXhwZW5zZSwgYXZnX3F1YWxFeHBlbnNlKQoKCmBgYAoKIyMjIyMgVG90YWwKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSB0b3RhbCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHRvdGFsLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHRvdGFsLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBGaWx0ZXJlZAoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGZpbHRlcmVkLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoZmlsdGVyZWQsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiRmlsdGVyZWQgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFyZSBncmVhdGVyIHRoYW4gdG90YWwgZXhwZW5kaXR1cmVzIChsb2dpY2FsbHkgaW1wb3NzaWJsZSkuCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gYXZnX3F1YWxFeHBlbnNlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoYXZnX3F1YWxFeHBlbnNlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkF2ZXJhZ2UgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkYXZnX3F1YWxFeHBlbnNlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBQcm9ibGVtIHJhdGUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwcm9ibGVtX3JhdGUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwcm9ibGVtX3JhdGUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiByZWNvcmRzIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcHJvYmxlbV9yYXRlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFzc2V0IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX2Fzc2V0cywgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9hc3NldHMsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldCB2YWx1ZSB3aXRoIHF1YWxpZnlpbmcgZXhwZW5kaXR1cmVzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9hc3NldHMsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgTDgxNQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9MODE1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w4MTUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBMODE1IHZhbHVlIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX0w4MTUsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgZGlzYnVyc2VtZW50IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX3F1YWxFeHBlbnNlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX3F1YWxFeHBlbnNlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIHZhbHVlIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX3F1YWxFeHBlbnNlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgoKIyMKCiMjIyMgR2lmdHMgYXMgYSBmcmFjdGlvbiBvZiB0b3RhbCBleHBlbmRpdHVyZXMgey50YWJzZXR9CgpJbmNvcnBvcmF0aW5nIHRoZSBuZXcgZGF0YSwgbG9va3MgbGlrZSB0aGVyZSBpc24ndCBodWdlIG1vdmVtZW50IGluIHRoZSBhZ2dyZWdhdGVzLCB0aG91Z2ggdGhlIGluY29tcGxldGVuZXNzIG9mIHRoZSAyMDI0IGRhdGEgY291bGQgd2VsbCBiZSBhIGZhY3Rvci4gCgpXaGV0aGVyIG9uZSBiZWxpZXZlcyB0aGF0IHRoZXJlIGhhcyBiZWVuIGFuIGluY3JlYXNlIGluIGdpZnQgbGV2ZWxzIHZlcnkgbXVjaCBkZXBlbmRzIG9uIHRoZSB0aW1lc3BhbiBvbmUgaXMgbG9va2luZyBhdC4gVGhlcmUgaXMgc29tZSBpbmRpY2F0aW9uIG9mIG5lYXIgdGVybSBjaGFuZ2VzIChpLmUuLCBzaW5jZSAyMDIwLzIwMjEpLCBidXQgcG9zdC1EUSBjaGFuZ2UgbGV2ZWxzIGFyZSBhY3R1YWxseSBxdWl0ZSBpbiBsaW5lIHdpdGggcHJlLXBhbmRlbWljIG5vcm1zLgoKUHJvYmxlbWF0aWMgcmVjb3JkcyAoZ2lmdHMgPiB0b3RhbCBleHBlbmRpdHVyZXMpIGRvbid0IGxvb2sgdG8gYmUgaGF2aW5nIGEgbWFzc2l2ZSBpbXBhY3QgaGVyZSwgdGhvdWdoIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBxdWFsaWZ5aW5nIGRpc2J1cnNlbWVudHMgPiB0b3RhbCBleHBlbmRpdHVyZXMgZmlsdGVyIGFzIHdlbGwuCgpgYGAge3IgZ2lmdHMtZGlzYi1kYXRhfQoKdG90YWwgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw1MDUwLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgdG90YWwgPSBMNTA1MCAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIEw1MDUwX3RvdCA9IEw1MDUwLAogICAgTDUxMDBDaGtfdG90ID0gTDUxMDBDaGsKICAgICkKCmZpbHRlcmVkIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgbXV0YXRlKEw1MDUwX3BlciA9IEw1MDUwIC8gTDUxMDBDaGspIHw+IAogIGZpbHRlcihMNTA1MF9wZXIgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTA1MCwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIGZpbHRlcmVkID0gTDUwNTAgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTA1MF9maWx0ID0gTDUwNTAsCiAgICBMNTEwMENoa19maWx0ID0gTDUxMDBDaGsKICAgICkKCnByb2JsZW1fcmF0ZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgTDUwNTBfcGVyID0gc2FmZV9kaXZpZGUoTDUwNTAsIEw1MTAwQ2hrKSwKICAgIEw1MDUwX2ZsYWcgPSBpZl9lbHNlKEw1MDUwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDUwNTBfWSA9IHN1bShMNTA1MF9mbGFnID09ICJZIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDUwX04gPSBzdW0oTDUwNTBfZmxhZyA9PSAiTiIsIG5hLnJtID0gVFJVRSksCiAgICBMNTA1MF9OQSA9IHN1bShpcy5uYShMNTA1MF9mbGFnKSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZSgKICAgIHByb2JsZW1fcmF0ZSA9IEw1MDUwX1kgLyAoTDUwNTBfTiArIEw1MDUwX05BKQogICAgKSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwcm9ibGVtX3JhdGUpCiAgCnBlcl9hc3NldHMgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIEw1MDUwX3BlciA9IHNhZmVfZGl2aWRlKEw1MDUwLCBMNTEwMENoayksCiAgICBMNTA1MF9mbGFnID0gaWZfZWxzZShMNTA1MF9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MTAwQ2hrX2FtdF9ZID0gc3VtKEw1MTAwQ2hrW0w1MDUwX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OID0gc3VtKEw1MTAwQ2hrW0w1MDUwX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OQSA9IHN1bShMNTEwMENoa1tpcy5uYShMNTA1MF9mbGFnKV0pLAogICAgTDUxMDBDaGtfYW10X3RvdCA9IHN1bShMNTEwMENoaywgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9hc3NldHMgPSBMNTEwMENoa19hbXRfWSAvIEw1MTAwQ2hrX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9hc3NldHMpCgpwZXJfTDgxNSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgTDUwNTBfcGVyID0gc2FmZV9kaXZpZGUoTDUwNTAsIEw1MTAwQ2hrKSwKICAgIEw1MDUwX2ZsYWcgPSBpZl9lbHNlKEw1MDUwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDgxNV9hbXRfWSA9IHN1bShMODE1W0w1MDUwX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X04gPSBzdW0oTDgxNVtMNTA1MF9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMODE1X2FtdF9OQSA9IHN1bShMODE1W2lzLm5hKEw1MDUwX2ZsYWcpXSksCiAgICBMODE1X2FtdF90b3QgPSBzdW0oTDgxNSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9MODE1ID0gTDgxNV9hbXRfWSAvIEw4MTVfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX0w4MTUpCgpwZXJfTDUwNTAgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIEw1MDUwX3BlciA9IHNhZmVfZGl2aWRlKEw1MDUwLCBMNTEwMENoayksCiAgICBMNTA1MF9mbGFnID0gaWZfZWxzZShMNTA1MF9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MDUwX2FtdF9ZID0gc3VtKEw1MDUwW0w1MDUwX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDUwX2FtdF9OID0gc3VtKEw1MDUwW0w1MDUwX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDUwX2FtdF9OQSA9IHN1bShMNTA1MFtpcy5uYShMNTA1MF9mbGFnKV0pLAogICAgTDUwNTBfYW10X3RvdCA9IHN1bShMNTA1MCwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9MNTA1MCA9IEw1MDUwX2FtdF9ZIC8gTDUwNTBfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX0w1MDUwKQoKYXZnX0w1MDUwIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBhdmdfTDUwNTAgPSBzYWZlX2RpdmlkZShMNTA1MCwgTDUxMDBDaGspCiAgICApIHw+CiAgZmlsdGVyKGF2Z19MNTA1MCA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKGF2Z19MNTA1MCksCiAgICAgIC5mbiA9IH4gbWVhbigueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApCgpkZl9kaXNwX2V4cCA8LSB0b3RhbCB8PiAKICBsZWZ0X2pvaW4oZmlsdGVyZWQsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHByb2JsZW1fcmF0ZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX2Fzc2V0cywgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX0w4MTUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9MNTA1MCwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4oYXZnX0w1MDUwLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpCgpybSh0b3RhbCwgZmlsdGVyZWQsIHByb2JsZW1fcmF0ZSwgcGVyX2Fzc2V0cywgcGVyX0w4MTUsIHBlcl9MNTA1MCwgYXZnX0w1MDUwKQoKYGBgCgojIyMjIyBUb3RhbAoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHRvdGFsLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQodG90YWwsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiVG90YWwgZ2lmdHMgYXMgcGVyY2VudGFnZSBvZiB0b3RhbCBleHBlbmRpdHVyZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCR0b3RhbCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgRmlsdGVyZWQKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBmaWx0ZXJlZCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KGZpbHRlcmVkLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkZpbHRlcmVkIGdpZnRzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgZ2lmdHMgYXJlIGdyZWF0ZXIgdGhhbiB0b3RhbCBleHBlbmRpdHVyZXMgKGxvZ2ljYWxseSBpbXBvc3NpYmxlKS4KCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBhdmdfTDUwNTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChhdmdfTDUwNTAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiQXZlcmFnZSBnaWZ0cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJGF2Z19MNTA1MCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgUHJvYmxlbSByYXRlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcHJvYmxlbV9yYXRlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocHJvYmxlbV9yYXRlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgcmVjb3JkcyB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHByb2JsZW1fcmF0ZSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBhc3NldCB2YWx1ZQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9hc3NldHMsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfYXNzZXRzLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXQgdmFsdWUgd2l0aCBnaWZ0cyBpc3N1ZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCRwZXJfYXNzZXRzLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIEw4MTUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJfTDgxNSwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9MODE1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgTDgxNSB2YWx1ZSB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MODE1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGdpZnQgdmFsdWUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJfTDUwNTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDUwNTAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiBnaWZ0cyB2YWx1ZSB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MNTA1MCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMKCmBgYCB7ciBhY3Rpdml0eS1kaXNiLWRhdGF9Cgp0b3RhbCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoTDUwMDAsIEw1MTAwQ2hrKSwKICAgICAgLmZuID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKQogICAgKSB8PiAKICBtdXRhdGUoCiAgICB0b3RhbCA9IEw1MDAwIC8gTDUxMDBDaGsKICAgICkgfD4gCiAgcmVuYW1lKAogICAgTDUwMDBfdG90ID0gTDUwMDAsCiAgICBMNTEwMENoa190b3QgPSBMNTEwMENoawogICAgKQoKZmlsdGVyZWQgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PiAKICBtdXRhdGUoTDUwMDBfcGVyID0gTDUwMDAgLyBMNTEwMENoaykgfD4gCiAgZmlsdGVyKEw1MDAwX3BlciA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw1MDAwLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgZmlsdGVyZWQgPSBMNTAwMCAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIEw1MDAwX2ZpbHQgPSBMNTAwMCwKICAgIEw1MTAwQ2hrX2ZpbHQgPSBMNTEwMENoawogICAgKQoKcHJvYmxlbV9yYXRlIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBMNTAwMF9wZXIgPSBzYWZlX2RpdmlkZShMNTAwMCwgTDUxMDBDaGspLAogICAgTDUwMDBfZmxhZyA9IGlmX2Vsc2UoTDUwMDBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTAwMF9ZID0gc3VtKEw1MDAwX2ZsYWcgPT0gIlkiLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfTiA9IHN1bShMNTAwMF9mbGFnID09ICJOIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDAwX05BID0gc3VtKGlzLm5hKEw1MDAwX2ZsYWcpKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKAogICAgcHJvYmxlbV9yYXRlID0gTDUwMDBfWSAvIChMNTAwMF9OICsgTDUwMDBfTkEpCiAgICApIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHByb2JsZW1fcmF0ZSkKICAKcGVyX2Fzc2V0cyA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgTDUwMDBfcGVyID0gc2FmZV9kaXZpZGUoTDUwMDAsIEw1MTAwQ2hrKSwKICAgIEw1MDAwX2ZsYWcgPSBpZl9lbHNlKEw1MDAwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDUxMDBDaGtfYW10X1kgPSBzdW0oTDUxMDBDaGtbTDUwMDBfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUxMDBDaGtfYW10X04gPSBzdW0oTDUxMDBDaGtbTDUwMDBfZmxhZyA9PSAiTiJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUxMDBDaGtfYW10X05BID0gc3VtKEw1MTAwQ2hrW2lzLm5hKEw1MDAwX2ZsYWcpXSksCiAgICBMNTEwMENoa19hbXRfdG90ID0gc3VtKEw1MTAwQ2hrLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX2Fzc2V0cyA9IEw1MTAwQ2hrX2FtdF9ZIC8gTDUxMDBDaGtfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX2Fzc2V0cykKCnBlcl9MODE1IDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBMNTAwMF9wZXIgPSBzYWZlX2RpdmlkZShMNTAwMCwgTDUxMDBDaGspLAogICAgTDUwMDBfZmxhZyA9IGlmX2Vsc2UoTDUwMDBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMODE1X2FtdF9ZID0gc3VtKEw4MTVbTDUwMDBfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDgxNV9hbXRfTiA9IHN1bShMODE1W0w1MDAwX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X05BID0gc3VtKEw4MTVbaXMubmEoTDUwMDBfZmxhZyldKSwKICAgIEw4MTVfYW10X3RvdCA9IHN1bShMODE1LCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w4MTUgPSBMODE1X2FtdF9ZIC8gTDgxNV9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDgxNSkKCnBlcl9MNTAwMCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgTDUwMDBfcGVyID0gc2FmZV9kaXZpZGUoTDUwMDAsIEw1MTAwQ2hrKSwKICAgIEw1MDAwX2ZsYWcgPSBpZl9lbHNlKEw1MDAwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDUwMDBfYW10X1kgPSBzdW0oTDUwMDBbTDUwMDBfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfYW10X04gPSBzdW0oTDUwMDBbTDUwMDBfZmxhZyA9PSAiTiJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfYW10X05BID0gc3VtKEw1MDAwW2lzLm5hKEw1MDAwX2ZsYWcpXSksCiAgICBMNTAwMF9hbXRfdG90ID0gc3VtKEw1MDAwLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w1MDAwID0gTDUwMDBfYW10X1kgLyBMNTAwMF9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDUwMDApCgphdmdfTDUwMDAgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIGF2Z19MNTAwMCA9IHNhZmVfZGl2aWRlKEw1MDAwLCBMNTEwMENoaykKICAgICkgfD4KICBmaWx0ZXIoYXZnX0w1MDAwIDw9IDEpIHw+IAogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoYXZnX0w1MDAwKSwKICAgICAgLmZuID0gfiBtZWFuKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkKCmRmX2Rpc3BfZXhwIDwtIHRvdGFsIHw+IAogIGxlZnRfam9pbihmaWx0ZXJlZCwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocHJvYmxlbV9yYXRlLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwZXJfYXNzZXRzLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwZXJfTDgxNSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX0w1MDAwLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihhdmdfTDUwMDAsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkKCnJtKHRvdGFsLCBmaWx0ZXJlZCwgcHJvYmxlbV9yYXRlLCBwZXJfYXNzZXRzLCBwZXJfTDgxNSwgcGVyX0w1MDAwLCBhdmdfTDUwMDApCgpgYGAKCiMjIyMgQ2hhcml0YWJsZSBhY3Rpdml0aWVzIGFzIGZyYWN0aW9uIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyB7LnRhYnNldH0KClNpZ25pZmljYW50IDIwMjQgaW5jcmVhc2UgaW4gYWdncmVnYXRlIGFtb25nIHB1YmxpYyBmb3VuZGF0aW9ucywgYnV0IHRoaXMgbG9va3MgdG8gYmUgYSByZXBvcnRpbmcgZXJyb3IuIFByaXZhdGUgZm91bmRhdGlvbiBkYXRhIHZvbGF0aWxlIGVub3VnaCB0aGF0IGl0IGlzIGRpZmZpY3VsdCB0byBiZSBjZXJ0YWluLiBBZ2FpbiwgbmVlZCB0byBiZSBjYXV0aW91cyBiZWNhdXNlIG9mIHRoZSBpbmNvbXBsZXRlbmVzcyBvZiAyMDI0IGRhdGEuCgpMb29raW5nIGF0IHRoZSBhdmVyYWdlcywgdGhlcmUgYXBwZWFyIHRvIGJlIHNvbWUgbmVhci10ZXJtIGluY3JlYXNlcyBmb3IgcHJpdmF0ZSBmb3VuZGF0aW9ucywgcmV2ZXJzaW5nIHRoZSBsb25nLXRlcm0gdHJlbmQuIFB1YmxpYyBmb3VuZGF0aW9ucyBsb29rIG11Y2ggbW9yZSBpbi1saW5lIHdpdGggbG9uZyB0ZXJtIHRyZW5kcyAod2hpY2ggaW5jcmVhc2VkIGFmdGVyIDIwMTgpLiBLZXkgcXVlc3Rpb24gaGVyZSB3aWxsIGJlIHdoZXRoZXIgd2UgYXJlIHNlZWluZyBzdWJzdGl0dXRpb24gb2YgY2hhcml0YWJsZSBhY3Rpdml0aWVzIGZvciBnaWZ0aW5nIG9yIGlmIHRoaXMgaXMgYW4gYXJ0aWZhY3Qgb2YgaW5jcmVhc2VkIHJlcG9ydGluZyBvZiBub24tY2hhcml0YWJsZSBhc3NldHMuCgpQcm9ibGVtYXRpYyByZWNvcmRzIChhY3Rpdml0aWVzID4gdG90YWwgZXhwZW5kaXR1cmVzKSBhcmUgcmVsYXRpdmVseSByYXJlIGJ1dCBkbyBhcHBlYXIgdG8gaGF2ZSBhIG1hdGVyaWFsIGltcGFjdCBvbiB0aGUgYWdncmVnYXRlcyBmb3IgcHVibGljIGZvdW5kYXRpb25zLiBBdmVyYWdlIHdpbGwgYmUgc3Vic3RhbnRpYWxseSB1bmFmZmVjdGVkIGJ5IHRoaXMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1lYXN1cmUgKG9uZSBjaGFyaXR5LCBvbmUgZXF1YWxseSB3ZWlnaHRlZCBkYXRhIHBvaW50KS4KCiMjIyMjIFRvdGFsCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gdG90YWwsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudCh0b3RhbCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJUb3RhbCBhY3Rpdml0aWVzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkdG90YWwsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEZpbHRlcmVkCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gZmlsdGVyZWQsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChmaWx0ZXJlZCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJGaWx0ZXJlZCBhY3Rpdml0aWVzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgYWN0aXZpdGllcyBhcmUgZ3JlYXRlciB0aGFuIHRvdGFsIGV4cGVuZGl0dXJlcyAobG9naWNhbGx5IGltcG9zc2libGUpLgoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGF2Z19MNTAwMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KGF2Z19MNTAwMCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJBdmVyYWdlIGFjdGl2aXRlcyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJGF2Z19MNTAwMCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgUHJvYmxlbSByYXRlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcHJvYmxlbV9yYXRlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocHJvYmxlbV9yYXRlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgcmVjb3JkcyB3aXRoIGFjdGl2aXRpZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcHJvYmxlbV9yYXRlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFzc2V0IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX2Fzc2V0cywgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9hc3NldHMsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldCB2YWx1ZSB3aXRoIGFjdGl2aXRpZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX2Fzc2V0cywgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBMODE1CgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w4MTUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50YWdlIG9mIHRvdGFsIEw4MTUgdmFsdWUgd2l0aCBhY3Rpdml0aWVzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MODE1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFjdGl2aXR5IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w1MDAwLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w1MDAwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYWN0aXZpdGllcyB2YWx1ZSB3aXRoIGFjdGl2aXRlcyBpc3N1ZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCRwZXJfTDUwMDAsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjCgpgYGAge3IgZ3JhbnRzLWRpc2ItZGF0YX0KCnRvdGFsIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTA0NSwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIHRvdGFsID0gTDUwNDUgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTA0NV90b3QgPSBMNTA0NSwKICAgIEw1MTAwQ2hrX3RvdCA9IEw1MTAwQ2hrCiAgICApCgpmaWx0ZXJlZCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIG11dGF0ZShMNTA0NV9wZXIgPSBMNTA0NSAvIEw1MTAwQ2hrKSB8PiAKICBmaWx0ZXIoTDUwNDVfcGVyIDw9IDEpIHw+IAogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoTDUwNDUsIEw1MTAwQ2hrKSwKICAgICAgLmZuID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKQogICAgKSB8PiAKICBtdXRhdGUoCiAgICBmaWx0ZXJlZCA9IEw1MDQ1IC8gTDUxMDBDaGsKICAgICkgfD4gCiAgcmVuYW1lKAogICAgTDUwNDVfZmlsdCA9IEw1MDQ1LAogICAgTDUxMDBDaGtfZmlsdCA9IEw1MTAwQ2hrCiAgICApCgpwcm9ibGVtX3JhdGUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIEw1MDQ1X3BlciA9IHNhZmVfZGl2aWRlKEw1MDQ1LCBMNTEwMENoayksCiAgICBMNTA0NV9mbGFnID0gaWZfZWxzZShMNTA0NV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MDQ1X1kgPSBzdW0oTDUwNDVfZmxhZyA9PSAiWSIsIG5hLnJtID0gVFJVRSksCiAgICBMNTA0NV9OID0gc3VtKEw1MDQ1X2ZsYWcgPT0gIk4iLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNDVfTkEgPSBzdW0oaXMubmEoTDUwNDVfZmxhZykpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUoCiAgICBwcm9ibGVtX3JhdGUgPSBMNTA0NV9ZIC8gKEw1MDQ1X04gKyBMNTA0NV9OQSkKICAgICkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcHJvYmxlbV9yYXRlKQogIApwZXJfYXNzZXRzIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBMNTA0NV9wZXIgPSBzYWZlX2RpdmlkZShMNTA0NSwgTDUxMDBDaGspLAogICAgTDUwNDVfZmxhZyA9IGlmX2Vsc2UoTDUwNDVfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTEwMENoa19hbXRfWSA9IHN1bShMNTEwMENoa1tMNTA0NV9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTiA9IHN1bShMNTEwMENoa1tMNTA0NV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTkEgPSBzdW0oTDUxMDBDaGtbaXMubmEoTDUwNDVfZmxhZyldKSwKICAgIEw1MTAwQ2hrX2FtdF90b3QgPSBzdW0oTDUxMDBDaGssIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfYXNzZXRzID0gTDUxMDBDaGtfYW10X1kgLyBMNTEwMENoa19hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfYXNzZXRzKQoKcGVyX0w4MTUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIG11dGF0ZSgKICAgIEw1MDQ1X3BlciA9IHNhZmVfZGl2aWRlKEw1MDQ1LCBMNTEwMENoayksCiAgICBMNTA0NV9mbGFnID0gaWZfZWxzZShMNTA0NV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw4MTVfYW10X1kgPSBzdW0oTDgxNVtMNTA0NV9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMODE1X2FtdF9OID0gc3VtKEw4MTVbTDUwNDVfZmxhZyA9PSAiTiJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDgxNV9hbXRfTkEgPSBzdW0oTDgxNVtpcy5uYShMNTA0NV9mbGFnKV0pLAogICAgTDgxNV9hbXRfdG90ID0gc3VtKEw4MTUsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfTDgxNSA9IEw4MTVfYW10X1kgLyBMODE1X2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9MODE1KQoKcGVyX0w1MDQ1IDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBtdXRhdGUoCiAgICBMNTA0NV9wZXIgPSBzYWZlX2RpdmlkZShMNTA0NSwgTDUxMDBDaGspLAogICAgTDUwNDVfZmxhZyA9IGlmX2Vsc2UoTDUwNDVfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTA0NV9hbXRfWSA9IHN1bShMNTA0NVtMNTA0NV9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTA0NV9hbXRfTiA9IHN1bShMNTA0NVtMNTA0NV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTA0NV9hbXRfTkEgPSBzdW0oTDUwNDVbaXMubmEoTDUwNDVfZmxhZyldKSwKICAgIEw1MDQ1X2FtdF90b3QgPSBzdW0oTDUwNDUsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfTDUwNDUgPSBMNTA0NV9hbXRfWSAvIEw1MDQ1X2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9MNTA0NSkKCmF2Z19MNTA0NSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgbXV0YXRlKAogICAgYXZnX0w1MDQ1ID0gc2FmZV9kaXZpZGUoTDUwNDUsIEw1MTAwQ2hrKQogICAgKSB8PgogIGZpbHRlcihhdmdfTDUwNDUgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhhdmdfTDUwNDUpLAogICAgICAuZm4gPSB+IG1lYW4oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKQogICAgKQoKZGZfZGlzcF9leHAgPC0gdG90YWwgfD4gCiAgbGVmdF9qb2luKGZpbHRlcmVkLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwcm9ibGVtX3JhdGUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9hc3NldHMsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9MODE1LCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwZXJfTDUwNDUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKGF2Z19MNTA0NSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKQoKcm0odG90YWwsIGZpbHRlcmVkLCBwcm9ibGVtX3JhdGUsIHBlcl9hc3NldHMsIHBlcl9MODE1LCBwZXJfTDUwNDUsIGF2Z19MNTA0NSkKCmBgYAoKCiMjIyMgR3JhbnRzIGFzIGZyYWN0aW9uIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyB7LnRhYnNldH0KClJvbGUgb2YgZ3JhbnRzIGlzIGNsZWFybHkgaW5jcmVhc2luZyBhbmQgdGhlIGFtb3VudHMgaW52b2x2ZWQgYXJlIHNpZ25pZmljYW50IGVub3VnaCB0aGF0IHRoZXkgYWNjb3VudCBmb3IgYSBtYXRlcmlhbCBjb21wb25lbnQgb2YgdGhlIHNoaWZ0LiBCaWdnZXIgaW1wYWN0IG9uIHB1YmxpYyBmb3VuZGF0aW9ucyB0aGFuIHByaXZhdGUsIGxpa2VseSBkcml2ZW4gYnkgdGhlIHN0cm9uZyBpbnRlcm5hdGlvbmFsIGNvbXBvbmVudC4gCgpFcnJvciByYXRlIGlzIG5vbi1leGlzdGVudCBoZXJlLCBkdWUgdG8gdGhlIHJlbGF0aXZlbHkgbWFyZ2luYWwgY2hhcmFjdGVyIG9mIHRoZSBzdXBwb3J0IChpLmUuLCBmZXcgb3JnYW5pemF0aW9ucyBhcmUgZ29pbmcgdG8gZ2l2ZSBlbm91Z2ggZ3JhbnRzIHRoYXQgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBncmFudHMgPiB0b3RhbCBleHBlbmRpdHVyZXMpLiBHaXZlbiB0aGlzLCBuZWVkIHRvIGFsc28gc2VlIHdoYXQgdGhlIGltcGFjdCBvZiBhIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyA+IHRvdGFsIGV4cGVuZGl0dXJlcyBmaWx0ZXIgaXMuCgpQYXJlbnRoZXRpY2FsbHksIHR3byBpc3N1ZXMgaGVyZTogMSkgTWFzdGVyQ2FyZCBoYXMgYSBtYWpvciBpbXBhY3QgaGVyZSwgYWNjb3VudGluZyBmb3IgYSBzaWduaWZpY2FudCBmcmFjdGlvbiBvZiB0b3RhbCBncmFudGluZywgMikgdGhlcmUgYXJlIGlzc3VlcyB3aXRoIGFuIGluZGV0ZXJtaW5hdGUgZnJhY3Rpb24gb2YgZ3JhbnRzIChpLmUuLCBnaWZ0cyBhbmQgb3BlcmF0aW5nIGV4cGVuc2VzIGJlaW5nIG1pcy1pZGVudGlmaWVkIGFzIGdyYW50cyk7IHVuc3VyZSB3aGF0IHRoZSBtb25ldGFyeSBpbXBhY3Qgb2YgdGhpcyBpcy4KCiMjIyMjIFRvdGFsCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gdG90YWwsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudCh0b3RhbCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJUb3RhbCBncmFudHMgYXMgcGVyY2VudGFnZSBvZiB0b3RhbCBleHBlbmRpdHVyZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCR0b3RhbCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgRmlsdGVyZWQKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBmaWx0ZXJlZCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KGZpbHRlcmVkLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkZpbHRlcmVkIGdyYW50cyBhcyBwZXJjZW50YWdlIG9mIGZpbHRlcmVkIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJGZpbHRlcmVkLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBBdmVyYWdlCgpUaGlzIGRhdGEgcHJlc2VudGF0aW9uIGV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgZ3JhbnRzIGFyZSBncmVhdGVyIHRoYW4gdG90YWwgZXhwZW5kaXR1cmVzIChsb2dpY2FsbHkgaW1wb3NzaWJsZSkuCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gYXZnX0w1MDQ1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoYXZnX0w1MDQ1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkF2ZXJhZ2UgZ3JhbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkYXZnX0w1MDQ1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBQcm9ibGVtIHJhdGUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwcm9ibGVtX3JhdGUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwcm9ibGVtX3JhdGUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiByZWNvcmRzIHdpdGggZ3JhbnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHByb2JsZW1fcmF0ZSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBhc3NldCB2YWx1ZQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9hc3NldHMsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfYXNzZXRzLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXQgdmFsdWUgd2l0aCBncmFudHMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX2Fzc2V0cywgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBMODE1CgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w4MTUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50YWdlIG9mIHRvdGFsIEw4MTUgdmFsdWUgd2l0aCBncmFudHMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX0w4MTUsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgZ3JhbnRzIHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w1MDQ1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w1MDQ1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgZ3JhbnRzIHZhbHVlIHdpdGggZ3JhbnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MNTA0NSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKCiMjCgojIyMgQ2hhbmdlcyBpbiB0aGUgZGlzdHJpYnV0aW9ucyBvZiBkaXNidXJzZW1lbnQgcGVyY2VudGFnZXMKCkluIHRoZXNlIHZpemVzLCAiQmFzZWxpbmUiIHJlZmVycyB0byB0aGUgZmlsaW5nIHBlcmlvZCBwcmlvciB0byB0aGUgRFEgY2hhbmdlLCAiUG9zdC1EUSBjaGFuZ2VzIiByZWZlcnMgdG8gdGhlIGZpbGluZyBwZXJpb2QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERRIGNoYW5nZSwgYW5kICJTdXN0YWluaW5nIiByZWZlcnMgdG8gdGhlIHNlY29uZCBwZXJpb2QgZm9sbG93aW5nIHRoZSBEUSBjaGFuZ2UsIGlmIHRoZSBmb3VuZGF0aW9uIGhhcyBmaWxlZCBhIFQzMDEwIGZvciB0aGUgcGVyaW9kLgoKVGhlc2Ugdml6ZXMgcmVzdHJpY3Qgb2JzZXJ2YXRpb25zIHRvIGZvdW5kYXRpb25zIHdpdGggcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGVxdWl2YWxlbnQgdG8gMTAlIG9yIGxlc3Mgb2Ygbm9uLWNoYXJpdGFibGUgYXNzZXRzLCBzbyBhcyB0byBnaXZlIHVzIGFuIGluZGljYXRpb24gb2Ygd2hhdCBpcyBnb2luZyBvbiBpbiB0aGUgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uIHRoYXQgaXMgdGhlIHRhcmdldCBvZiB0aGUgcG9saWN5IHNoaWZ0LgoKSW4gaW50ZXJwcmV0aW5nIHRoZXNlIHZpemVzLCBub3RlIHRoYXQgaXQgaXMgY29tcGxldGVseSBub3JtYWwgdG8gc2VlIHNpZ25pZmljYW50IGxldmVscyBvZiBkaXNidXJzZW1lbnQgYmVsb3cgdGhlIG1hbmRhdGVkIHRocmVzaG9sZHMuIEJlY2F1c2Ugb3JnYW5pemF0aW9ucyBjYW4gcHVsbCBwcmlvciBvdmVyLWNvbnRyaWJ1dGlvbnMgZm9yd2FyZCBmb3IgdXAgdG8gZml2ZSB5ZWFycyBhbmQgZm9sbG93aW5nIG92ZXItY29udHJpYnV0aW9ucyBmb3Igb25lIHllYXIgdG8gbWFrZSB1cCBhbm51YWwgc2hvcnRmYWxscywgaXQgaXMgcXVpdGUgY29tbW9uIGZvciBpbi1jb21wbGlhbmNlIGZvdW5kYXRpb25zIHRvIGJlIHNsaWdodGx5IG9yIGV2ZW4gc2lnbmlmaWNhbnRseSBiZWxvdyB0aGUgRFEgdGhyZXNob2xkIGluIG11bHRpcGxlIHllYXJzIGFuZCBjb3VudGVyIHRoaXMgYnkgYmVpbmcgYWJvdmUgaXQgaW4gYSBmZXcgKG9yIGV2ZW4gb25lKSB5ZWFyKHMpLgoKYGBge3J9CgpkZl9sb25naXR1ZGluYWxfZGlzYnVyc2VtZW50cyA8LSB0cmFuc2Zvcm1lZF9kZiB8PgogIHNlbGVjdCgKICAgIEJOLAogICAgRlBFLAogICAgeWVhciwKICAgIEFjY291bnROYW1lLAogICAgRGVzaWdDb2RlLAogICAgTDQyMDBDaGssCiAgICBMNTg1MCwKICAgIEw1OTAwLAogICAgTDU5MTAsCiAgICBMODE1LAogICAgTDUwMDAsCiAgICBMNTA1MCwKICAgIEw1MDQ1LAogICAgTDUxMDBDaGssCiAgICBlc3RBbm5EUSwKICAgIGVzdEFubkRRQ29tcCwKICAgIGVzdFJvbGxpbmdEUUNvbXAsCiAgICBiYXNlQW5uRFEsCiAgICBiYXNlQW5uRFFDb21wLAogICAgYmFzZVJvbGxpbmdEUUNvbXAsCiAgICBxdWFsRXhwZW5zZSwKICAgIHBlckw1OTAwLAogICAgcGVyTDQyMDBDaGssCiAgICBwZXJMNDE0MAogICkgfD4KICBjb3B5X2xhYmVscyh0cmFuc2Zvcm1lZF9kZikgfD4KICBmaWx0ZXIoIURlc2lnQ29kZSA9PSAiQyIpIHw+CiAgbXV0YXRlKGlzX2RlY18zMSA9IGlmX2Vsc2UobW9udGgoRlBFKSA9PSAxMiAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXkoRlBFKSA9PSAzMSwgIlkiLCAiTiIpKSB8PgogIHJlbmFtZSh5ZWFyMiA9IHllYXIpIHw+CiAgbXV0YXRlKAogICAgeWVhciA9IGNhc2Vfd2hlbigKICAgICAgeWVhcjIgPD0gMjAyMiB+IGFzLmNoYXJhY3Rlcih5ZWFyMiksCiAgICAgIHllYXIyID09IDIwMjMgJiBpc19kZWNfMzEgPT0gIk4iIH4gIjIwMjNcbnByZS1EUSIsCiAgICAgIHllYXIyID09IDIwMjMgJiBpc19kZWNfMzEgPT0gIlkiIH4gIjIwMjNcbnBvc3QtRFEiLAogICAgICB5ZWFyMiA+IDIwMjMgfiBhcy5jaGFyYWN0ZXIoeWVhcjIpCiAgICApCiAgKSB8PgogIG11dGF0ZSh5ZWFyID0gZmFjdG9yKAogICAgeWVhciwKICAgIGxldmVscyA9IGMoCiAgICAgICIyMDEzIiwKICAgICAgIjIwMTQiLAogICAgICAiMjAxNSIsCiAgICAgICIyMDE2IiwKICAgICAgIjIwMTciLAogICAgICAiMjAxOCIsCiAgICAgICIyMDE5IiwKICAgICAgIjIwMjAiLAogICAgICAiMjAyMSIsCiAgICAgICIyMDIyIiwKICAgICAgIjIwMjNcbnByZS1EUSIsCiAgICAgICIyMDIzXG5wb3N0LURRIiwKICAgICAgIjIwMjQiLAogICAgICAiMjAyNSIsCiAgICAgICIyMDI2IiwKICAgICAgIjIwMjciLAogICAgICAiMjAyOCIKICAgICkKICApKSB8PgogIGFycmFuZ2UoQk4sIHllYXIyKSB8PgogIGdyb3VwX2J5KEJOKSB8PgogIG11dGF0ZSgKICAgIGluX3Njb3BlID0gY2FzZV93aGVuKAogICAgICAjIEluLXNjb3BlIGZvciBEUSBjaGFuZ2VzIGJlY2F1c2Ugbm9uLWNoYXJpdGFibGUgYXNzZXRzID4gJDEgbWlsbGlvbgogICAgICBMODE1ID49IDFlNiB+ICI+PSAkMSBtaWxsaW9uIiwKICAgICAgTDgxNSA8IDFlNiB+ICI8ICQxIG1pbGxpb24iLAogICAgICBpcy5uYShMODE1KSB+ICJMODE1IG1pc3NpbmciLAogICAgICAuZGVmYXVsdCA9IE5BX2NoYXJhY3Rlcl8KICAgICksCiAgICBpbl9zY29wZSA9IGZhY3Rvcihpbl9zY29wZSwgbGV2ZWxzID0gYygKICAgICAgIj49ICQxIG1pbGxpb24iLCAiPCAkMSBtaWxsaW9uIiwgIkw4MTUgbWlzc2luZyIKICAgICkpLAogICAgdGVtcEw4MTUgPSBjYXNlX3doZW4oCiAgICAgICMgdGVtcCB2YXJpYWJsZSB0byBnZW5lcmF0ZSBjb3VudCBvZiBMODE1IChub24tY2hhcml0YWJsZSBhc3NldCkgdmFsdWVzCiAgICAgIEw4MTUgPj0gMCB+IDEsCiAgICAgIGlzLm5hKEw4MTUpIH4gMCwKICAgICAgLmRlZmF1bHQgPSAwCiAgICApLAogICAgY291bnRMODE1ID0gc2xpZGVfaW5kZXhfZGJsKAogICAgICAjIGNvdW50IG9mIEw4MTUgdmFsdWVzCiAgICAgIC54ID0gdGVtcEw4MTUsCiAgICAgIC5pID0geWVhcjIsCiAgICAgIC5mID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSksCiAgICAgIC5iZWZvcmUgPSA1LAogICAgICAuY29tcGxldGUgPSBGQUxTRQogICAgKSwKICAgIHJvbGxpbmdMODE1ID0gc2xpZGVfaW5kZXhfZGJsKAogICAgICAjIHJvbGxpbmcgc3VtIG9mIDUgeWVhcnMnIHByZXZpb3VzICsgY3VycmVudCBMODE1IHZhbHVlcwogICAgICAueCA9IEw4MTUsCiAgICAgIC5pID0geWVhcjIsCiAgICAgIC5mID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSksCiAgICAgIC5iZWZvcmUgPSA1LAogICAgICAuY29tcGxldGUgPSBGQUxTRQogICAgKSwKICAgIHJvbGxpbmdRdWFsRXhwZW5zZSA9IHNsaWRlX2luZGV4X2RibCgKICAgICAgIyByb2xsaW5nIHN1bSBvZiA1IHllYXJzJyBwcmV2aW91cyArIGN1cnJlbnQgcXVhbGlmeWluZyBleHBlbnNlcwogICAgICAueCA9IHF1YWxFeHBlbnNlLAogICAgICAuaSA9IHllYXIyLAogICAgICAuZiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpLAogICAgICAuYmVmb3JlID0gNSwKICAgICAgLmNvbXBsZXRlID0gRkFMU0UKICAgICksCiAgICByb2xsaW5nUmF0ZSA9IGNhc2Vfd2hlbigKICAgICAgcm9sbGluZ0w4MTUgPiAwICYKICAgICAgICAhaXMubmEocm9sbGluZ0w4MTUpIH4gcm9sbGluZ1F1YWxFeHBlbnNlIC8gcm9sbGluZ0w4MTUgICAjIHJvbGxpbmcgcXVhbGlmeWluZyBleHBlbnNlcyBtZWFzdXJlCiAgICApLAogICAgZGlzcFJvbGxpbmdSYXRlID0gcGVyY2VudChyb2xsaW5nUmF0ZSwgYWNjdXJhY3kgPSAwLjEpLAogICAgIyByb2xsaW5nIHF1YWxpZnlpbmcgZXhwZW5zZXMgbWVhc3VyZSBmb3JtYXR0ZWQgZm9yIGVhc3kgcmVhZGluZwogICAgYW5uUmF0ZSA9IHF1YWxFeHBlbnNlIC8gTDgxNSwKICAgICMgYW5udWFsIHF1YWxpZnlpbmcgZXhwZW5zZXMgbWVhc3VyZQogICAgZGlzcEFublJhdGUgPSBwZXJjZW50KGFublJhdGUsIGFjY3VyYWN5ID0gMC4xKSwKICAgICMgYW5udWFsIHF1YWxpZnlpbmcgZXhwZW5zZXMgbWVhc3VyZSBmb3JtYXR0ZWQgZm9yIGVhc3kgcmVhZGluZwogICAgbWF4TDU5MDAgPSBtYXgoTDU5MDApLAogICAgIyBwZWFrIHZhbHVlIG9mIEw1OTAwCiAgICBuZXdEUUZsYWcgPSBjYXNlX3doZW4oCiAgICAgICMgbmV3IHZzLiBvbGQgRFEgcmVxdWlyZW1lbnRzIG1hcmtlcgogICAgICBGUEUgPj0gYXMuRGF0ZSgiMjAyMy0xMi0zMSIpIH4gIk5ldyBEUSIsCiAgICAgIEZQRSA+PSBhcy5EYXRlKCIyMDIyLTEyLTMxIikgJgogICAgICAgIEZQRSA8IGFzLkRhdGUoIjIwMjMtMTItMzEiKSB+ICJPbGQgRFEiLAogICAgICAuZGVmYXVsdCA9IE5BX2NoYXJhY3Rlcl8KICAgICkKICApIHw+CiAgc2VsZWN0KC10ZW1wTDgxNSkgfD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRyb3AgdGVtcCBMODE1IHZhcmlhYmxlCiAgYXJyYW5nZShkZXNjKG1heEw1OTAwKSwgQk4sIHllYXIpIHw+CiAgI2ZpbHRlcighRlBFIDwgYXMuRGF0ZSgiMjAyMi0xMi0zMSIpKSB8PgogIG11dGF0ZSgKICAgIHJhbmdlID0gY2FzZV93aGVuKAogICAgICAjIGV2YWx1YXRpbmcgcmFuZ2Ugb2Ygcm9sbGluZyBxdWFsaWZ5aW5nIGV4cGVuc2VzIG1lYXN1cmUgZHVyaW5nIHBlcmlvZCBwcmlvciB0byBEUSBjaGFuZ2VzCiAgICAgIHJvbGxpbmdSYXRlIDwgMC4wMzQ1IH4gIkJlbG93IHJhbmdlIiwKICAgICAgcm9sbGluZ1JhdGUgPj0gMC4wMzQ1ICYgcm9sbGluZ1JhdGUgPCAwLjA1IH4gIkluIHJhbmdlIiwKICAgICAgcm9sbGluZ1JhdGUgPj0gMC4wNSB+ICJBYm92ZSByYW5nZSIsCiAgICAgIGlzLm5hKHJvbGxpbmdSYXRlKSB+ICJNaXNzaW5nIEw4MTUiCiAgICApLAogICAgcmFuZ2UgPSBmYWN0b3IoCiAgICAgIHJhbmdlLAogICAgICBsZXZlbHMgPSBjKCJBYm92ZSByYW5nZSIsICJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIsICJNaXNzaW5nIEw4MTUiKQogICAgKSwKICAgIG1hc3Rfc2NvcGUgPSBjYXNlX3doZW4oCiAgICAgICMgemVyb2luZyBpbiBvbiBmb3VuZGF0aW9ucyB0aGF0IGFyZSByZWFsbHkgaW4gcGxheSBmb3IgdGhlIHNoaWZ0CiAgICAgIGluX3Njb3BlID09ICI8ICQxIG1pbGxpb24iIH4gIkFzc2V0cyBsb3ciLAogICAgICByYW5nZSA9PSAiQWJvdmUgcmFuZ2UiIH4gIk92ZXItY29udHJpYnV0aW5nIiwKICAgICAgaW5fc2NvcGUgPT0gIj49ICQxIG1pbGxpb24iICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiAiVGFyZ2V0IGZvdW5kYXRpb24iLAogICAgICByYW5nZSA9PSAiTWlzc2luZyBMODE1IiB8CiAgICAgICAgaW5fc2NvcGUgPT0gIkw4MTUgbWlzc2luZyIgfiAiTDgxNSBtaXNzaW5nIgogICAgKSwKICAgIG1hc3Rfc2NvcGUgPSBmYWN0b3IoCiAgICAgIG1hc3Rfc2NvcGUsCiAgICAgIGxldmVscyA9IGMoCiAgICAgICAgIkw4MTUgbWlzc2luZyIsCiAgICAgICAgIkFzc2V0cyBsb3ciLAogICAgICAgICJPdmVyLWNvbnRyaWJ1dGluZyIsCiAgICAgICAgIlRhcmdldCBmb3VuZGF0aW9uIgogICAgICApCiAgICApLAogICAgbnVtUmVjcyA9IG1heChyb3dfbnVtYmVyKCkpICMgbnVtYmVyIG9mIHJlY29yZHMgcGVyIEJOCiAgKSB8PgogIGZpbGwocmFuZ2UsIC5kaXJlY3Rpb24gPSAiZG93bnVwIikgfD4gICAgICAgICAgICAgIyBkdXBsaWNhdGluZyByYW5nZSB2YWx1ZXMgdG8gcHJpb3IgYW5kIHN1Y2NlZWRpbmcgeWVhcnMKICBhcnJhbmdlKEJOLCBGUEUpIHw+CiAgbXV0YXRlKAogICAgY29uZGl0aW9uID0gY2FzZV93aGVuKAogICAgICAjIGlkZW50aWZ5aW5nIHRyYW5zaXRpb24gcGVyaW9kcwogICAgICBGUEUgPj0gYXMuRGF0ZSgiMjAyMi0xMi0zMSIpICYKICAgICAgICBGUEUgPCBhcy5EYXRlKCIyMDIzLTEyLTMxIikgfiAiYmFzZWxpbmUiLAogICAgICBGUEUgPj0gYXMuRGF0ZSgiMjAyMy0xMi0zMSIpICYKICAgICAgICBGUEUgPCBhcy5EYXRlKCIyMDI0LTEyLTMxIikgfiAiY2hhbmdlIiwKICAgICAgRlBFID49IGFzLkRhdGUoIjIwMjQtMTItMzEiKSAmCiAgICAgICAgRlBFIDwgYXMuRGF0ZSgiMjAyNS0xMi0zMSIpIH4gInN1c3RhaW5pbmciLAogICAgICAuZGVmYXVsdCA9IE5BX2NoYXJhY3Rlcl8KICAgICkKICApCgpkZl9kaXNidXJzZW1lbnRzX2F0X2RxIDwtIGRmX2xvbmdpdHVkaW5hbF9kaXNidXJzZW1lbnRzIHw+IAogIGZpbHRlcighaXMubmEoY29uZGl0aW9uKSkKCmBgYAoKIyMjIyBZZWFyIG92ZXIgeWVhciBjaGFuZ2Ugey50YWJzZXR9CgpZZWFyIG92ZXIgeWVhciBjaGFuZ2VzIGxvb2sgYXQgY2hhbmdlcyBmcm9tIG9uZSB5ZWFyIHRvIHRoZSBuZXh0LCB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoZSBmYWN0IHRoYXQgRFEgY29tcGxpYW5jZSBpcyBjYWxjdWxhdGVkIG92ZXIgYSA3IHllYXIgcGVyaW9kIChjaGFyaXRpZXMgYXJlIGFibGUgdG8gcHVsbCBmb3J3YXJkIGV4Y2VzcyBxdWFsaWZ5aW5nIGV4cGVuZGl0dXJlcyB1cCB0byBmaXZlIHllYXJzIGFuZCBwdWxsIHRoZW0gYmFjayB1cCB0byBvbmUgeWVhciB0byBjb21wZW5zYXRlIGZvciB1bmRlci1kaXNidXJzZW1lbnQgaW4gYSBwYXJ0aWN1bGFyIHllYXIpLgoKIyMjIyMgRm91bmRhdGlvbnMgd2l0aCBMODE1IFw+PSBcJDFlNgoKU2NvcGUgaXMgZm91bmRhdGlvbnMgd2l0aCBub24tY2hhcml0YWJsZSBhc3NldHMgb2YgJDEgbWlsbGlvbiBvciBtb3JlLgoKYGBge3J9CgpicmVha3Nfc2VxIDwtIHNlcSgwLCAuMSwgYnkgPSAwLjAwMSkKCmRmX2Rpc2J1cnNlbWVudHNfYXRfZHEgfD4gCiAgZmlsdGVyKGFublJhdGUgPj0gMCAmIGFublJhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJiYXNlbGluZSIgJiBMODE1ID49IDFlNikgfD4gCiAgcHVsbChhbm5SYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIGZyZXEgPSBGQUxTRSwKICAgIG1haW4gPSAiIiwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCJibHVlIiwgYWxwaGEuZiA9IDAuMykKICAgICkKCmRmX3RtcCA8LSBkZl9kaXNidXJzZW1lbnRzX2F0X2RxCgpkZl90bXAgfD4gCiAgZmlsdGVyKGFublJhdGUgPj0gMCAmIGFublJhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJjaGFuZ2UiICAmIEw4MTUgPj0gMWU2KSB8PiAKICBwdWxsKGFublJhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgZnJlcSA9IEZBTFNFLAogICAgbWFpbiA9ICIiLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoIiNjODEwMmUiLCBhbHBoYS5mID0gMC42KSwKICAgIGFkZCA9IFRSVUUKICAgICkKCmRmX3RtcCA8LSBkZl9kaXNidXJzZW1lbnRzX2F0X2RxCgpkZl90bXAgfD4gCiAgZmlsdGVyKGFublJhdGUgPj0gMCAmIGFublJhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJzdXN0YWluaW5nIiAgJiBMODE1ID49IDFlNikgfD4gCiAgcHVsbChhbm5SYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIGZyZXEgPSBGQUxTRSwKICAgIG1haW4gPSAiIiwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCJncmVlbiIsIGFscGhhLmYgPSAwLjQpLAogICAgYWRkID0gVFJVRQogICAgKQoKYWJsaW5lKHYgPSAwLjAzNSwgY29sID0gIiNjODEwMmUiKQoKYWJsaW5lKHYgPSAwLjA1LCBjb2wgPSAiYmxhY2siKQoKbGVnZW5kKAogICJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9zaXRpb246IHRvcC1yaWdodCBjb3JuZXIgb2YgdGhlIHBsb3QKICBsZWdlbmQgPSBjKCJCYXNlbGluZSIsICJQb3N0LURRIGNoYW5nZXMiLCAiU3VzdGFpbmluZyIpLAogIGZpbGwgPSBjKAogICAgYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKSwKICAgIGFkanVzdGNvbG9yKCIjYzgxMDJlIiwgYWxwaGEuZiA9IDAuNiksCiAgICBhZGp1c3Rjb2xvcigiZ3JlZW4iLCBhbHBoYS5mID0gMC40KQogICksCiAgYm9yZGVyID0gTkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBib3ggYXJvdW5kIHRoZSBjb2xvciBwYXRjaGVzCiAgYnR5ID0gIm4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBsZWdlbmQgYm94IG91dGxpbmUKICBjZXggPSAwLjksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRleHQgc2l6ZQogIGluc2V0ID0gMC4wMiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc21hbGwgcGFkZGluZyBpbnNpZGUgcGxvdCBhcmVhCikKCgpgYGAKCiMjIyMjIEZvdW5kYXRpb25zIHdpdGggTDgxNSBcPCBcJDFlNgoKU2NvcGUgaXMgZm91bmRhdGlvbnMgd2l0aCBub24tY2hhcml0YWJsZSBhc3NldHMgbGVzcyB0aGFuICQxIG1pbGxpb24uCgpgYGB7cn0KCmJyZWFrc19zZXEgPC0gc2VxKDAsIC4xLCBieSA9IDAuMDAxKQoKZGZfZGlzYnVyc2VtZW50c19hdF9kcSB8PiAKICBmaWx0ZXIoYW5uUmF0ZSA+PSAwICYgYW5uUmF0ZSA8PSAwLjEgJiBjb25kaXRpb24gPT0gImJhc2VsaW5lIiAmIEw4MTUgPCAxZTYpIHw+IAogIHB1bGwoYW5uUmF0ZSkgfD4gCiAgaGlzdCgKICAgIGJyZWFrcyA9IGJyZWFrc19zZXEsCiAgICBtYWluID0gIiIsCiAgICBmcmVxID0gRkFMU0UsCiAgICB4bGFiID0gIiIsCiAgICBjb2wgPSBhZGp1c3Rjb2xvcigiYmx1ZSIsIGFscGhhLmYgPSAwLjMpCiAgICApCgpkZl9kaXNidXJzZW1lbnRzX2F0X2RxIHw+IAogIGZpbHRlcihhbm5SYXRlID49IDAgJiBhbm5SYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAiY2hhbmdlIiAgJiBMODE1IDwgMWU2KSB8PiAKICBwdWxsKGFublJhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoIiNjODEwMmUiLCBhbHBoYS5mID0gMC42KSwKICAgIGFkZCA9IFRSVUUKICAgICkKCmRmX2Rpc2J1cnNlbWVudHNfYXRfZHEgfD4gCiAgZmlsdGVyKGFublJhdGUgPj0gMCAmIGFublJhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJzdXN0YWluaW5nIiAgJiBMODE1IDwgMWU2KSB8PiAKICBwdWxsKGFublJhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoImdyZWVuIiwgYWxwaGEuZiA9IDAuNCksCiAgICBhZGQgPSBUUlVFCiAgICApCgoKYWJsaW5lKHYgPSAwLjAzNSwgY29sID0gIiNjODEwMmUiKQoKbGVnZW5kKAogICJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9zaXRpb246IHRvcC1yaWdodCBjb3JuZXIgb2YgdGhlIHBsb3QKICBsZWdlbmQgPSBjKCJCYXNlbGluZSIsICJQb3N0LURRIGNoYW5nZXMiLCAiU3VzdGFpbmluZyIpLAogIGZpbGwgPSBjKAogICAgYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKSwKICAgIGFkanVzdGNvbG9yKCIjYzgxMDJlIiwgYWxwaGEuZiA9IDAuNiksCiAgICBhZGp1c3Rjb2xvcigiZ3JlZW4iLCBhbHBoYS5mID0gMC40KQogICksCiAgYm9yZGVyID0gTkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBib3ggYXJvdW5kIHRoZSBjb2xvciBwYXRjaGVzCiAgYnR5ID0gIm4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBsZWdlbmQgYm94IG91dGxpbmUKICBjZXggPSAwLjksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRleHQgc2l6ZQogIGluc2V0ID0gMC4wMiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc21hbGwgcGFkZGluZyBpbnNpZGUgcGxvdCBhcmVhCikKCmBgYAoKIyMjIyMgSW4tcmFuZ2UgZm91bmRhdGlvbnMgd2l0aCBMODE1IFw+IFwkMWU2CgpTY29wZSBpcyBmb3VuZGF0aW9ucyB0aGF0IGhhZCBxdWFsaWZ5aW5nIGV4cGVuZGl0dXJlcyByYW5naW5nIGJldHdlZW4gMy40NSUgYW5kIDUlIG9mIG5vbi1jaGFyaXRhYmxlIGFzc2V0cyBwcmlvciB0byB0aGUgRFEgc2hpZnRzLl5bV2UgdXNlIHRoaXMgcmFuZ2UgYmVjYXVzZSBzdWNoIGEgaGlnaCBmcmFjdGlvbiBvZiBjaGFyaXRpZXMgYXBwZWFyIHRvIGJlIHNsaWdodGx5IHVuZGVyIHRoZSB0aHJlc2hvbGQsIGxpa2VseSBkdWUgdG8gY29tcHV0YXRpb24gZXJyb3IuIFRoaXMgZG9lc24ndCBhcHBlYXIgdG8gYmUgaW50ZW50aW9uYWwuXSBUaGUgaW4tc2NvcGUgcmFuZ2UgaXMgY29tcHV0ZWQgYWNjb3VudGluZyBmb3IgdGhlIGFiaWxpdHkgdG8gcHVsbCBmb3J3YXJkIGV4Y2VzcyBxdWFsaWZ5aW5nIGV4cGVuZGl0dXJlcyB0byBjb21wZW5zYXRlIGZvciB1bmRlci1kaXNidXJzZW1lbnQuCgpgYGB7cn0KCmJyZWFrc19zZXEgPC0gc2VxKDAsIC4xLCBieSA9IDAuMDAxKQoKZGZfZGlzYnVyc2VtZW50c19hdF9kcSB8PiAKICBmaWx0ZXIoYW5uUmF0ZSA+PSAwICYgYW5uUmF0ZSA8PSAwLjEgJiBjb25kaXRpb24gPT0gImJhc2VsaW5lIiAmIEw4MTUgPj0gMWU2ICYgcmFuZ2UgJWluJSBjKCJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIpKSB8PiAKICBwdWxsKGFublJhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKQogICAgKQoKZGZfdG1wIDwtIGRmX2Rpc2J1cnNlbWVudHNfYXRfZHEKCmRmX3RtcCB8PiAKICBmaWx0ZXIoYW5uUmF0ZSA+PSAwICYgYW5uUmF0ZSA8PSAwLjEgJiBjb25kaXRpb24gPT0gImNoYW5nZSIgICYgTDgxNSA+PSAxZTYpIHw+IAogIHB1bGwoYW5uUmF0ZSkgfD4gCiAgaGlzdCgKICAgIGJyZWFrcyA9IGJyZWFrc19zZXEsCiAgICBtYWluID0gIiIsCiAgICBmcmVxID0gRkFMU0UsCiAgICB4bGFiID0gIiIsCiAgICBjb2wgPSBhZGp1c3Rjb2xvcigiI2M4MTAyZSIsIGFscGhhLmYgPSAwLjYpLAogICAgYWRkID0gVFJVRQogICAgKQoKZGZfdG1wIHw+IAogIGZpbHRlcihhbm5SYXRlID49IDAgJiBhbm5SYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAic3VzdGFpbmluZyIgICYgTDgxNSA+PSAxZTYpIHw+IAogIHB1bGwoYW5uUmF0ZSkgfD4gCiAgaGlzdCgKICAgIGJyZWFrcyA9IGJyZWFrc19zZXEsCiAgICBtYWluID0gIiIsCiAgICBmcmVxID0gRkFMU0UsCiAgICB4bGFiID0gIiIsCiAgICBjb2wgPSBhZGp1c3Rjb2xvcigiZ3JlZW4iLCBhbHBoYS5mID0gMC42KSwKICAgIGFkZCA9IFRSVUUKICAgICkKCmFibGluZSh2ID0gMC4wMzUsIGNvbCA9ICIjYzgxMDJlIikKCmFibGluZSh2ID0gMC4wNSwgY29sID0gImJsYWNrIikKCmxlZ2VuZCgKICAidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBvc2l0aW9uOiB0b3AtcmlnaHQgY29ybmVyIG9mIHRoZSBwbG90CiAgbGVnZW5kID0gYygiQmFzZWxpbmUiLCAiUG9zdC1EUSBjaGFuZ2VzIiwgIlN1c3RhaW5pbmciKSwKICBmaWxsID0gYygKICAgIGFkanVzdGNvbG9yKCJibHVlIiwgYWxwaGEuZiA9IDAuMyksCiAgICBhZGp1c3Rjb2xvcigiI2M4MTAyZSIsIGFscGhhLmYgPSAwLjYpLAogICAgYWRqdXN0Y29sb3IoImdyZWVuIiwgYWxwaGEuZiA9IDAuNCkKICApLAogIGJvcmRlciA9IE5BLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gYm94IGFyb3VuZCB0aGUgY29sb3IgcGF0Y2hlcwogIGJ0eSA9ICJuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gbGVnZW5kIGJveCBvdXRsaW5lCiAgY2V4ID0gMC45LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXh0IHNpemUKICBpbnNldCA9IDAuMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNtYWxsIHBhZGRpbmcgaW5zaWRlIHBsb3QgYXJlYQopCgpgYGAKCiMjIyMgUm9sbGluZyBjaGFuZ2VzIHsudGFic2V0fQoKUm9sbGluZyBjaGFuZ2VzIGF0dGVtcHQgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBEUSBjb21wbGlhbmNlIGlzIGNhbGN1bGF0ZWQgb3ZlciBhIDcgeWVhciBwZXJpb2QuIFRoZSBkYXRhIHNob3cgd2hhdCB3ZSB3b3VsZCBleHBlY3QgLSB0aGVyZSBoYXMgYmVlbiBhIG1hdGVyaWFsIGluY3JlYXNlIGluIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cywgYnV0IHRoZSBzY2FsZSBvZiB0aGUgaW5jcmVhc2UgaXMgc21hbGwsIGdpdmVuIHRoYXQgb3JnYW5pemF0aW9ucyBoYXZlIG9ubHkgaGFkIG9uZSBvciB0d28gcGVyaW9kcyBhdCB0aGUgaGlnaGVyIGNvbnRyaWJ1dGlvbiByYXRlLCBhbmQgc2hvd3MgYW4gaW5jcmVhc2UgaW4gc3VjY2VlZGluZyB5ZWFycy4gCgojIyMjIyBGb3VuZGF0aW9ucyB3aXRoIEw4MTUgXD49IFwkMWU2CgpTY29wZSBpcyBmb3VuZGF0aW9ucyB3aXRoIG5vbi1jaGFyaXRhYmxlIGFzc2V0cyBvZiAkMSBtaWxsaW9uIG9yIG1vcmUuCgpgYGB7cn0KCmJyZWFrc19zZXEgPC0gc2VxKDAsIC4xLCBieSA9IDAuMDAxKQoKZGZfZGlzYnVyc2VtZW50c19hdF9kcSB8PiAKICBmaWx0ZXIocm9sbGluZ1JhdGUgPj0gMCAmIHJvbGxpbmdSYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAiYmFzZWxpbmUiICYgTDgxNSA+PSAxZTYpIHw+IAogIHB1bGwocm9sbGluZ1JhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKQogICAgKQoKZGZfdG1wIDwtIGRmX2Rpc2J1cnNlbWVudHNfYXRfZHEKCmRmX3RtcCB8PiAKICBmaWx0ZXIocm9sbGluZ1JhdGUgPj0gMCAmIHJvbGxpbmdSYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAiY2hhbmdlIiAgJiBMODE1ID49IDFlNikgfD4gCiAgcHVsbChyb2xsaW5nUmF0ZSkgfD4gCiAgaGlzdCgKICAgIGJyZWFrcyA9IGJyZWFrc19zZXEsCiAgICBtYWluID0gIiIsCiAgICBmcmVxID0gRkFMU0UsCiAgICB4bGFiID0gIiIsCiAgICBjb2wgPSBhZGp1c3Rjb2xvcigiI2M4MTAyZSIsIGFscGhhLmYgPSAwLjYpLAogICAgYWRkID0gVFJVRQogICAgKQoKZGZfdG1wIDwtIGRmX2Rpc2J1cnNlbWVudHNfYXRfZHEKCmRmX3RtcCB8PiAKICBmaWx0ZXIocm9sbGluZ1JhdGUgPj0gMCAmIHJvbGxpbmdSYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAic3VzdGFpbmluZyIgICYgTDgxNSA+PSAxZTYpIHw+IAogIHB1bGwocm9sbGluZ1JhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoImdyZWVuIiwgYWxwaGEuZiA9IDAuNCksCiAgICBhZGQgPSBUUlVFCiAgICApCgphYmxpbmUodiA9IDAuMDM1LCBjb2wgPSAiI2M4MTAyZSIpCgphYmxpbmUodiA9IDAuMDUsIGNvbCA9ICJibGFjayIpCgpsZWdlbmQoCiAgInRvcHJpZ2h0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwb3NpdGlvbjogdG9wLXJpZ2h0IGNvcm5lciBvZiB0aGUgcGxvdAogIGxlZ2VuZCA9IGMoIkJhc2VsaW5lIiwgIlBvc3QtRFEgY2hhbmdlcyIsICJTdXN0YWluaW5nIiksCiAgZmlsbCA9IGMoCiAgICBhZGp1c3Rjb2xvcigiYmx1ZSIsIGFscGhhLmYgPSAwLjMpLAogICAgYWRqdXN0Y29sb3IoIiNjODEwMmUiLCBhbHBoYS5mID0gMC42KSwKICAgIGFkanVzdGNvbG9yKCJncmVlbiIsIGFscGhhLmYgPSAwLjQpCiAgKSwKICBib3JkZXIgPSBOQSwgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIGJveCBhcm91bmQgdGhlIGNvbG9yIHBhdGNoZXMKICBidHkgPSAibiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIGxlZ2VuZCBib3ggb3V0bGluZQogIGNleCA9IDAuOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGV4dCBzaXplCiAgaW5zZXQgPSAwLjAyICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbWFsbCBwYWRkaW5nIGluc2lkZSBwbG90IGFyZWEKKQoKYGBgCgojIyMjIyBGb3VuZGF0aW9ucyB3aXRoIEw4MTUgXDwgXCQxZTYKClNjb3BlIGlzIGZvdW5kYXRpb25zIHdpdGggbm9uLWNoYXJpdGFibGUgYXNzZXRzIGxlc3MgdGhhbiAkMSBtaWxsaW9uLgoKYGBge3J9CgpicmVha3Nfc2VxIDwtIHNlcSgwLCAuMSwgYnkgPSAwLjAwMSkKCmRmX2Rpc2J1cnNlbWVudHNfYXRfZHEgfD4gCiAgZmlsdGVyKHJvbGxpbmdSYXRlID49IDAgJiByb2xsaW5nUmF0ZSA8PSAwLjEgJiBjb25kaXRpb24gPT0gImJhc2VsaW5lIiAmIEw4MTUgPCAxZTYpIHw+IAogIHB1bGwocm9sbGluZ1JhdGUpIHw+IAogIGhpc3QoCiAgICBicmVha3MgPSBicmVha3Nfc2VxLAogICAgbWFpbiA9ICIiLAogICAgZnJlcSA9IEZBTFNFLAogICAgeGxhYiA9ICIiLAogICAgY29sID0gYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKQogICAgKQoKZGZfZGlzYnVyc2VtZW50c19hdF9kcSB8PiAKICBmaWx0ZXIocm9sbGluZ1JhdGUgPj0gMCAmIHJvbGxpbmdSYXRlIDw9IDAuMSAmIGNvbmRpdGlvbiA9PSAiY2hhbmdlIiAgJiBMODE1IDwgMWU2KSB8PiAKICBwdWxsKHJvbGxpbmdSYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIG1haW4gPSAiIiwKICAgIGZyZXEgPSBGQUxTRSwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCIjYzgxMDJlIiwgYWxwaGEuZiA9IDAuNiksCiAgICBhZGQgPSBUUlVFCiAgICApCgpkZl9kaXNidXJzZW1lbnRzX2F0X2RxIHw+IAogIGZpbHRlcihyb2xsaW5nUmF0ZSA+PSAwICYgcm9sbGluZ1JhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJzdXN0YWluaW5nIiAgJiBMODE1IDwgMWU2KSB8PiAKICBwdWxsKHJvbGxpbmdSYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIG1haW4gPSAiIiwKICAgIGZyZXEgPSBGQUxTRSwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCJncmVlbiIsIGFscGhhLmYgPSAwLjQpLAogICAgYWRkID0gVFJVRQogICAgKQoKCmFibGluZSh2ID0gMC4wMzUsIGNvbCA9ICIjYzgxMDJlIikKCmxlZ2VuZCgKICAidG9wcmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBvc2l0aW9uOiB0b3AtcmlnaHQgY29ybmVyIG9mIHRoZSBwbG90CiAgbGVnZW5kID0gYygiQmFzZWxpbmUiLCAiUG9zdC1EUSBjaGFuZ2VzIiwgIlN1c3RhaW5pbmciKSwKICBmaWxsID0gYygKICAgIGFkanVzdGNvbG9yKCJibHVlIiwgYWxwaGEuZiA9IDAuMyksCiAgICBhZGp1c3Rjb2xvcigiI2M4MTAyZSIsIGFscGhhLmYgPSAwLjYpLAogICAgYWRqdXN0Y29sb3IoImdyZWVuIiwgYWxwaGEuZiA9IDAuNCkKICApLAogIGJvcmRlciA9IE5BLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gYm94IGFyb3VuZCB0aGUgY29sb3IgcGF0Y2hlcwogIGJ0eSA9ICJuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gbGVnZW5kIGJveCBvdXRsaW5lCiAgY2V4ID0gMC45LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXh0IHNpemUKICBpbnNldCA9IDAuMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNtYWxsIHBhZGRpbmcgaW5zaWRlIHBsb3QgYXJlYQopCgpgYGAKCiMjIyMjIEluLXJhbmdlIGZvdW5kYXRpb25zIHdpdGggTDgxNSBcPiBcJDFlNgoKU2NvcGUgaXMgZm91bmRhdGlvbnMgdGhhdCBoYWQgcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgcmFuZ2luZyBiZXR3ZWVuIDMuNDUlIGFuZCA1JSBvZiBub24tY2hhcml0YWJsZSBhc3NldHMgcHJpb3IgdG8gdGhlIERRIHNoaWZ0cy4gVGhpcyBpcyBjb21wdXRlZCBhY2NvdW50aW5nIGZvciB0aGUgYWJpbGl0eSB0byBwdWxsIGZvcndhcmQgZXhjZXNzIHF1YWxpZnlpbmcgZXhwZW5kaXR1cmVzIHRvIGNvbXBlbnNhdGUgZm9yIHVuZGVyLWRpc2J1cnNlbWVudC4KCmBgYHtyfQoKYnJlYWtzX3NlcSA8LSBzZXEoMCwgLjEsIGJ5ID0gMC4wMDEpCgpkZl9kaXNidXJzZW1lbnRzX2F0X2RxIHw+IAogIGZpbHRlcihyb2xsaW5nUmF0ZSA+PSAwICYgcm9sbGluZ1JhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJiYXNlbGluZSIgJiBMODE1ID49IDFlNiAmIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSkgfD4gCiAgcHVsbChyb2xsaW5nUmF0ZSkgfD4gCiAgaGlzdCgKICAgIGJyZWFrcyA9IGJyZWFrc19zZXEsCiAgICBtYWluID0gIiIsCiAgICBmcmVxID0gRkFMU0UsCiAgICB4bGFiID0gIiIsCiAgICBjb2wgPSBhZGp1c3Rjb2xvcigiYmx1ZSIsIGFscGhhLmYgPSAwLjMpCiAgICApCgpkZl90bXAgPC0gZGZfZGlzYnVyc2VtZW50c19hdF9kcQoKZGZfdG1wIHw+IAogIGZpbHRlcihyb2xsaW5nUmF0ZSA+PSAwICYgcm9sbGluZ1JhdGUgPD0gMC4xICYgY29uZGl0aW9uID09ICJjaGFuZ2UiICAmIEw4MTUgPj0gMWU2KSB8PiAKICBwdWxsKHJvbGxpbmdSYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIG1haW4gPSAiIiwKICAgIGZyZXEgPSBGQUxTRSwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCIjYzgxMDJlIiwgYWxwaGEuZiA9IDAuNiksCiAgICBhZGQgPSBUUlVFCiAgICApCgpkZl90bXAgfD4gCiAgZmlsdGVyKHJvbGxpbmdSYXRlID49IDAgJiByb2xsaW5nUmF0ZSA8PSAwLjEgJiBjb25kaXRpb24gPT0gInN1c3RhaW5pbmciICAmIEw4MTUgPj0gMWU2KSB8PiAKICBwdWxsKHJvbGxpbmdSYXRlKSB8PiAKICBoaXN0KAogICAgYnJlYWtzID0gYnJlYWtzX3NlcSwKICAgIG1haW4gPSAiIiwKICAgIGZyZXEgPSBGQUxTRSwKICAgIHhsYWIgPSAiIiwKICAgIGNvbCA9IGFkanVzdGNvbG9yKCJncmVlbiIsIGFscGhhLmYgPSAwLjQpLAogICAgYWRkID0gVFJVRQogICAgKQoKYWJsaW5lKHYgPSAwLjAzNSwgY29sID0gIiNjODEwMmUiKQoKYWJsaW5lKHYgPSAwLjA1LCBjb2wgPSAiYmxhY2siKQoKbGVnZW5kKAogICJ0b3ByaWdodCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9zaXRpb246IHRvcC1yaWdodCBjb3JuZXIgb2YgdGhlIHBsb3QKICBsZWdlbmQgPSBjKCJCYXNlbGluZSIsICJQb3N0LURRIGNoYW5nZXMiLCAiU3VzdGFpbmluZyIpLAogIGZpbGwgPSBjKAogICAgYWRqdXN0Y29sb3IoImJsdWUiLCBhbHBoYS5mID0gMC4zKSwKICAgIGFkanVzdGNvbG9yKCIjYzgxMDJlIiwgYWxwaGEuZiA9IDAuNiksCiAgICBhZGp1c3Rjb2xvcigiZ3JlZW4iLCBhbHBoYS5mID0gMC40KQogICksCiAgYm9yZGVyID0gTkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBib3ggYXJvdW5kIHRoZSBjb2xvciBwYXRjaGVzCiAgYnR5ID0gIm4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBsZWdlbmQgYm94IG91dGxpbmUKICBjZXggPSAwLjksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRleHQgc2l6ZQogIGluc2V0ID0gMC4wMiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc21hbGwgcGFkZGluZyBpbnNpZGUgcGxvdCBhcmVhCikKCmBgYAoKIyMgTG9uZ2l0dWRpbmFsIGRhdGEKCldoaWxlIHRoZSBhYm92ZSBhbmFseXNlcyBhcmUgY29uc2lzdGVudCB3aXRoIGFuIGluY3JlYXNlIGluIGRpc2J1cnNlbWVudHMsIHRoZXkgYXJlIGNyb3NzLXNlY3Rpb25hbCAocmF0aGVyIHRoYW4gbG9uZ2l0dWRpbmFsKSBhbmQgZG8gbm90IGZvY3VzIG9uIGZvdW5kYXRpb25zIHRoYXQgaGF2ZSBoaXN0b3JpY2FsbHkgdGVuZGVkIHRvIGRpc2J1cnNlIGxlc3MgdGhhbiA1JSBvZiBub24tY2hhcml0YWJsZSBhc3NldHMuIEJleW9uZCB0aGUgcmVsYXRpdmVseSBsaW1pdGVkIGFuYWx5dGljIHBvdGVudGlhbCwgSSBpbmNsdWRlIHRoZW0gcHJpbWFyaWx5IGJlY2F1c2UgbW9zdCBvdGhlciBhbmFseXNlcyB3aWxsIHRha2UgdGhlc2UgdHlwZXMgb2YgYXBwcm9hY2hlcy4gVG8gcmVhbGx5IGV2YWx1YXRlIHdoZXRoZXIgZGlzYnVyc2VtZW50cyBhcmUgaW5jcmVhc2luZyB0byBtZWV0IHRoZSBuZXcgcmVxdWlyZW1lbnRzLCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGRhdGEgbG9uZ2l0dWRpbmFsbHkgKGkuZS4sIHRyYWNraW5nIGNoYW5nZXMgaW4gaW5kaXZpZHVhbCBmb3VuZGF0aW9uIGJlaGF2aW91cikgYW5kIGZvY3VzIG9uIHRoZSBmb3VuZGF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB0aGUgb2JqZWN0IG9mIHRoZSBwb2xpY3kgY2hhbmdlLgoKQnJvYWRseSwgaXQgbG9va3MgbGlrZSB0aGVyZSBoYXMgYmVlbiBhIHNpZ25pZmljYW50IGluY3JlYXNlIGluIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cy4gRGVwZW5kaW5nIG9uIGhvdyBvbmUgZGVmaW5lcyB0aGUgaW5jcmVhc2UgKGkuZS4sIGFnYWluc3QgYmFzZWxpbmUgcHJlLURRIHNoaWZ0IG9yZ2FuaXphdGlvbmFsIG5vcm1zIG9yIGFnYWluc3QgYW4gYXJiaXRyYXJ5IDMuNSUpIHRoZSBzY2FsZSBvZiB0aGUgaW5jcmVhc2UgYXBwZWFycyB0byBiZSBzb21ld2hlcmUgaW4gdGhlIHJhbmdlIG9mIFwkNjYwIG1pbGxpb24gdG8gXCQxIGJpbGxpb24uCgpXaGlsZSB0aGlzIHRvcCBsaW5lIGZpZ3VyZSBpcyBjZXJ0YWlubHkgc3RyaWtpbmcsIGl0IGlzIG5vdGFibGUgdGhhdCBNYXN0ZXJDYXJkIEZvdW5kYXRpb24gYWNjb3VudHMgZm9yIHR3byB0aGlyZHMgb2YgdGhlIGluY3JlYXNlLCByZWdhcmRsZXNzIG9mIGhvdyBvbmUgZGVmaW5lcyBiYXNlbGluZS4gCgpgYGB7cn0KCgpkZl9zdWIgPC0gZGZfbG9uZ2l0dWRpbmFsX2Rpc2J1cnNlbWVudHMgfD4KICBncm91cF9ieShCTikgfD4KICBtdXRhdGUoCiAgICBxdWFsX2V4cGVuc2VfcHJvYmxlbSA9IGlmX2Vsc2UocXVhbEV4cGVuc2UgPiBMNTEwMENoaywgIlByb2JsZW0iLCAiTm8gcHJvYmxlbSIpLAogICAgYmFzZWxpbmVfcXVhbF9leHBlbnNlID0gY2FzZV93aGVuKAogICAgICAjIHF1YWxpZnlpbmcgZXhwZW5zZXMgaWYgb3JnIGNvbnRyaWJ1dGVkIGF0IHByZXZpb3VzIHJhdGUKICAgICAgY29uZGl0aW9uID09ICJjaGFuZ2UiICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBMODE1ICogbGFnKHJvbGxpbmdSYXRlKSwKICAgICAgY29uZGl0aW9uID09ICJzdXN0YWluaW5nIiAmCiAgICAgICAgcmFuZ2UgJWluJSBjKCJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIpIH4gTDgxNSAqIGxhZyhyb2xsaW5nUmF0ZSwgbiA9IDIpLAogICAgICAuZGVmYXVsdCA9IE5BX3JlYWxfCiAgICApLAogICAgYXJiaXRyYXJ5X3F1YWxfZXhwZW5zZSA9IGNhc2Vfd2hlbigKICAgICAgIyBhcmJpdHJhcnkgY29udHJpYnV0aW9uIGF0IDMuNSUKICAgICAgY29uZGl0aW9uICVpbiUgYygiY2hhbmdlIiwgInN1c3RhaW5pbmciKSAmCiAgICAgICAgcmFuZ2UgJWluJSBjKCJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIpIH4gTDgxNSAqIDAuMDM1LAogICAgICAuZGVmYXVsdCA9IE5BX3JlYWxfCiAgICApLAogICAgcmVxdWlyZWRfcXVhbF9leHBlbnNlID0gY2FzZV93aGVuKAogICAgICAjIHJlcXVpcmVkIHF1YWxpZnlpbmcgZXhwZW5zZXMKICAgICAgY29uZGl0aW9uICVpbiUgYygiY2hhbmdlIiwgInN1c3RhaW5pbmciKSAmCiAgICAgICAgaW5fc2NvcGUgPT0gIj49ICQxIG1pbGxpb24iICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiAoTDgxNSAtIDFlNikgKiAwLjA1ICsgMzUwMDAsCiAgICAgIGNvbmRpdGlvbiAlaW4lIGMoImNoYW5nZSIsICJzdXN0YWluaW5nIikgJgogICAgICAgIGluX3Njb3BlID09ICI8ICQxIG1pbGxpb24iICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBMODE1ICogMC4wMzUsCiAgICAgIC5kZWZhdWx0ID0gTkFfcmVhbF8KICAgICksCiAgICBvdmVyX3VuZGVyX2Jhc2VsaW5lID0gY2FzZV93aGVuKAogICAgICAjIG92ZXJhZ2Ugb3IgdW5kZXJhZ2Ugb24gYmFzZWxpbmUgY29udHJpYnV0aW9ucwogICAgICBjb25kaXRpb24gJWluJSBjKCJjaGFuZ2UiLCAic3VzdGFpbmluZyIpICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBxdWFsRXhwZW5zZSAtIGJhc2VsaW5lX3F1YWxfZXhwZW5zZSwKICAgICAgLmRlZmF1bHQgPSBOQV9yZWFsXwogICAgKSwKICAgIG92ZXJfdW5kZXJfYXJiaXRyYXJ5ID0gY2FzZV93aGVuKAogICAgICAjIG92ZXJhZ2Ugb3IgdW5kZXJhZ2Ugb24gYXJiaXRyYXJ5IDMuNSUgY29udHJpYnV0aW9ucwogICAgICBjb25kaXRpb24gJWluJSBjKCJjaGFuZ2UiLCAic3VzdGFpbmluZyIpICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBxdWFsRXhwZW5zZSAtIGFyYml0cmFyeV9xdWFsX2V4cGVuc2UsCiAgICAgIC5kZWZhdWx0ID0gTkFfcmVhbF8KICAgICksCiAgICBvdmVyX3VuZGVyX3JlcXVpcmVkID0gY2FzZV93aGVuKAogICAgICAjIG92ZXJhZ2UgLyB1bmRlcmFnZSBvbiByZXF1aXJlZCBxdWFsaWZ5aW5nIGV4cGVuc2VzCiAgICAgIGNvbmRpdGlvbiAlaW4lIGMoImNoYW5nZSIsICJzdXN0YWluaW5nIikgJgogICAgICAgIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSB+IHF1YWxFeHBlbnNlIC0gcmVxdWlyZWRfcXVhbF9leHBlbnNlLAogICAgICAuZGVmYXVsdCA9IE5BX3JlYWxfCiAgICApLAogICAgcXVhbEV4cGVuc2VfY2hhbmdlID0gY2FzZV93aGVuKAogICAgICBjb25kaXRpb24gPT0gImNoYW5nZSIgJgogICAgICAgIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSB+IHF1YWxFeHBlbnNlIC0gbGFnKHF1YWxFeHBlbnNlLCBuID0gMSksCiAgICAgIGNvbmRpdGlvbiA9PSAic3VzdGFpbmluZyIgJgogICAgICAgIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSB+IHF1YWxFeHBlbnNlIC0gbGFnKHF1YWxFeHBlbnNlLCBuID0gMiksCiAgICAgIC5kZWZhdWx0ID0gTkFfcmVhbF8KICAgICksCiAgICBMNTAwMF9jaGFuZ2UgPSBjYXNlX3doZW4oCiAgICAgIGNvbmRpdGlvbiA9PSAiY2hhbmdlIiAmCiAgICAgICAgcmFuZ2UgJWluJSBjKCJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIpIH4gTDUwMDAgLSBsYWcoTDUwMDAsIG4gPSAxKSwKICAgICAgY29uZGl0aW9uID09ICJzdXN0YWluaW5nIiAmCiAgICAgICAgcmFuZ2UgJWluJSBjKCJJbiByYW5nZSIsICJCZWxvdyByYW5nZSIpIH4gTDUwMDAgLSBsYWcoTDUwMDAsIG4gPSAyKSwKICAgICAgLmRlZmF1bHQgPSBOQV9yZWFsXwogICAgKSwKICAgIEw1MDQ1X2NoYW5nZSA9IGNhc2Vfd2hlbigKICAgICAgY29uZGl0aW9uID09ICJjaGFuZ2UiICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBMNTA0NSAtIGxhZyhMNTA0NSwgbiA9IDEpLAogICAgICBjb25kaXRpb24gPT0gInN1c3RhaW5pbmciICYKICAgICAgICByYW5nZSAlaW4lIGMoIkluIHJhbmdlIiwgIkJlbG93IHJhbmdlIikgfiBMNTA0NSAtIGxhZyhMNTA0NSwgbiA9IDIpLAogICAgICAuZGVmYXVsdCA9IE5BX3JlYWxfCiAgICApLAogICAgTDUwNTBfY2hhbmdlID0gY2FzZV93aGVuKAogICAgICBjb25kaXRpb24gPT0gImNoYW5nZSIgJgogICAgICAgIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSB+IEw1MDUwIC0gbGFnKEw1MDUwLCBuID0gMSksCiAgICAgIGNvbmRpdGlvbiA9PSAic3VzdGFpbmluZyIgJgogICAgICAgIHJhbmdlICVpbiUgYygiSW4gcmFuZ2UiLCAiQmVsb3cgcmFuZ2UiKSB+IEw1MDUwIC0gbGFnKEw1MDUwLCBuID0gMiksCiAgICAgIC5kZWZhdWx0ID0gTkFfcmVhbF8KICAgICkKICApCgoKZGZfc3ViX2dyb3VwZWQgPC0gZGZfc3ViIHw+CiAgZmlsdGVyKHJhbmdlID09ICJJbiByYW5nZSIgJgogICAgICAgICAgIGluX3Njb3BlID09ICI+PSAkMSBtaWxsaW9uIiAmCiAgICAgICAgICAgIWlzLm5hKGNvbmRpdGlvbikpIHw+CiAgbXV0YXRlKG1hc3RlcmNhcmRfZmxhZyA9IGlmX2Vsc2UoQk4gPT0gIjgxNzM4NzI3N1JSMDAwMSIsICJNYXN0ZXJDYXJkIiwgIk90aGVyIGZvdW5kYXRpb25zIikpIHw+CiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYXN0ZXJjYXJkX2ZsYWcpIHw+CiAgc3VtbWFyaXNlKAogICAgb3Zlcl91bmRlcl9iYXNlbGluZSA9IHN1bShvdmVyX3VuZGVyX2Jhc2VsaW5lLCBuYS5ybSA9IFRSVUUpLAogICAgb3Zlcl91bmRlcl9hcmJpdHJhcnkgPSBzdW0ob3Zlcl91bmRlcl9hcmJpdHJhcnksIG5hLnJtID0gVFJVRSksCiAgICBvdmVyX3VuZGVyX3JlcXVpcmVkID0gc3VtKG92ZXJfdW5kZXJfcmVxdWlyZWQsIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9zdW0gPSBzdW0ocXVhbEV4cGVuc2UsIG5hLnJtID0gVFJVRSksCiAgICBMNTAwMF9zdW0gPSBzdW0oTDUwMDAsIG5hLnJtID0gVFJVRSksCiAgICBMNTA0NV9zdW0gPSBzdW0oTDUwNDUsIG5hLnJtID0gVFJVRSksCiAgICBMNTA1MF9zdW0gPSBzdW0oTDUwNTAsIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9jb3VudCA9IHN1bSghaXMubmEocXVhbEV4cGVuc2UpKSwKICAgIEw1MDAwX2NvdW50ID0gc3VtKCFpcy5uYShMNTAwMCkpLAogICAgTDUwNDVfY291bnQgPSBzdW0oIWlzLm5hKEw1MDQ1KSksCiAgICBMNTA1MF9jb3VudCA9IHN1bSghaXMubmEoTDUwNTApKSwKICAgIHRvdF9jb3VudCA9IG4oKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+CiAgbXV0YXRlKAogICAgTDUwMDBfcGVyID0gTDUwMDBfc3VtIC8gcXVhbEV4cGVuc2Vfc3VtLAogICAgTDUwNDVfcGVyID0gTDUwNDVfc3VtIC8gcXVhbEV4cGVuc2Vfc3VtLAogICAgTDUwNTBfcGVyID0gTDUwNTBfc3VtIC8gcXVhbEV4cGVuc2Vfc3VtLAogICAgcXVhbEV4cGVuc2VfcmF0ZSA9IHF1YWxFeHBlbnNlX2NvdW50IC8gdG90X2NvdW50LAogICAgTDUwMDBfcmF0ZSA9IEw1MDAwX2NvdW50IC8gdG90X2NvdW50LAogICAgTDUwNDVfcmF0ZSA9IEw1MDQ1X2NvdW50IC8gdG90X2NvdW50LAogICAgTDUwNTBfcmF0ZSA9IEw1MDUwX2NvdW50IC8gdG90X2NvdW50CiAgKSB8PiAKICBncm91cF9ieShjb25kaXRpb24pIHw+IAogIG11dGF0ZSgKICAgIG92ZXJfdW5kZXJfYmFzZWxpbmVfcGVyID0gb3Zlcl91bmRlcl9iYXNlbGluZSAvIHN1bShvdmVyX3VuZGVyX2Jhc2VsaW5lKSwKICAgIG92ZXJfdW5kZXJfYXJiaXRyYXJ5X3BlciA9IG92ZXJfdW5kZXJfYXJiaXRyYXJ5IC8gc3VtKG92ZXJfdW5kZXJfYXJiaXRyYXJ5KSwKICAgIG92ZXJfdW5kZXJfcmVxdWlyZWRfcGVyID0gb3Zlcl91bmRlcl9yZXF1aXJlZCAvIHN1bShvdmVyX3VuZGVyX3JlcXVpcmVkKQogICkKCmRmX2JhY2tncm91bmQgPC0gZGZfc3ViIHw+IAogIG11dGF0ZShtYXN0ZXJjYXJkX2ZsYWcgPSBpZl9lbHNlKEJOID09ICI4MTczODcyNzdSUjAwMDEiLCAiTWFzdGVyQ2FyZCIsICJPdGhlciBmb3VuZGF0aW9ucyIpKSB8PgogIGZpbHRlcihtYXN0ZXJjYXJkX2ZsYWcgPT0gIk90aGVyIGZvdW5kYXRpb25zIikgfD4gCiAgbXV0YXRlKG1hc3Rfc2NvcGUyID0gY2FzZV93aGVuKAogICAgIyB0aGlzIHZlcnNpb24gb2YgbWFzdGVyIHNjb3BlIGNhcnJpZXMgZm9yd2FyZCB0aGUgbGFzdCBzY29wZSBzdGF0dXMgcHJlLURRIHNoaWZ0cwogICAgY29uZGl0aW9uID09ICJjaGFuZ2UiIH4gbGFnKG1hc3Rfc2NvcGUsIG4gPSAxKSwKICAgIGNvbmRpdGlvbiA9PSAic3VzdGFpbmluZyIgfiBsYWcobWFzdF9zY29wZSwgbiA9IDIpLAogICAgLmRlZmF1bHQgPSBtYXN0X3Njb3BlCiAgICApCiAgKSB8PiAKICBncm91cF9ieSh5ZWFyMiwgbWFzdF9zY29wZTIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw0MjAwQ2hrLCBMNTEwMENoaywgTDgxNSwgcXVhbEV4cGVuc2UsIEw1MDAwLCBMNTA0NSwgTDUwNTApLAogICAgICAuZm5zID0gXCh4KSBzdW0oeCwgbmEucm0gPSBUUlVFKSwKICAgICAgLm5hbWVzID0gInsuY29sfV9zdW0iCiAgICApLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgfD4gCiAgZ3JvdXBfYnkoeWVhcjIpIHw+IAogIG11dGF0ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBlbmRzX3dpdGgoIl9zdW0iKSwKICAgICAgLmZucyA9IFwoeCkgeCAvIHN1bSh4LCBuYS5ybSA9IFRSVUUpLAogICAgICAubmFtZXMgPSAie3N1YignX3N1bSQnLCAnJywgLmNvbCl9X3BlciIKICAgICkKICApCgpgYGAKClRvIHByb2dyZXNzIHRvd2FyZHMgYSBwdWJsaWNhdGlvbiwgZmlyc3Qgd2UgbmVlZCB0byBleHBsYWluIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB0YXJnZXQgcG9wdWxhdGlvbiAtIGhvdyBtYW55IGZvdW5kYXRpb25zIHJlcG9ydCBub24tY2hhcml0YWJsZSBhc3NldHMgb2YgJDEgbWlsbGlvbiBvciBtb3JlLCBkaXNidXJzaW5nIGxlc3MgdGhhbiA1JSBvZiB0aGUgdmFsdWUgb2Ygbm9uLWNoYXJpdGFibGUgYXNzZXRzIGFubnVhbGx5Ll5bT25lIGNvdWxkIGFyZ3VlIHRoYXQgZm91bmRhdGlvbnMgZGlzYnVyc2luZyBsZXNzIHRoYW4gMy41JSBhcmUgb3V0IG9mIHNjb3BlLCBidXQgdGhlIG5ldCBlZmZlY3Qgb2YgdGhlc2UgZm91bmRhdGlvbnMgaXMgc28gc21hbGwgdGhhdCBpdCBkb2Vzbid0IG1hdGVyaWFsbHkgYWZmZWN0IHRoZSBhbmFseXNpcyBhbmQgaXQgbWlnaHQgbG9vayBsaWtlIHdlIGFyZSB0cnlpbmcgdG8gbG93IGJhbGwgYW55IHNoaWZ0cyBpZiB3ZSBleGNsdWRlIHRoZW0uXSBUaGVuIHdlIG5lZWQgdG8gY2hhcmFjdGVyaXplIHRoZWlyIHJvbGUsIGluIHRlcm1zIG9mIHRoZSBmcmFjdGlvbiBvZiBhc3NldHMgKGJvdGggdG90YWwgYW5kIG5vbi1jaGFyaXRhYmxlKSB0aGV5IGNvbnRyb2wsIGFzIHdlbGwgYXMgdGhlIHByb3BvcnRpb24gb2YgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIHRoZXkgYWNjb3VudCBmb3IuCgpPbmUgY291bGQgdHJ5IHRvIGFyZ3VlIHRoYXQgdGhlIG1pc3Npbmcgbm9uLWNoYXJpdGFibGUgYXNzZXRzIGRhdGEgaXMgY2F1c2luZyBhbiB1bmRlci1lc3RpbWF0ZSBvZiBhbnkgRFEgc2hpZnRzLCBidXQgdGhpcyBzaG91bGRuJ3QgYWN0dWFsbHkgYmUgdmlld2VkIGFzIGEgbWFqb3IgZGVhbCBmb3IgZXhwbG9yaW5nIHRoaXMgaXNzdWUuIENvbGxlY3RpdmVseSwgdGhlc2UgZm91bmRhdGlvbnMgYWNjb3VudCBmb3Igb25seSBhYm91dCBhIHRlbnRoIG9mIHRvdGFsIGFzc2V0cywgYnV0IGFib3V0IGEgcXVhcnRlciBvZiB0b3RhbCBleHBlbmRpdHVyZXMgYW5kIGFib3V0IDQ1JSBvZiBjaGFyaXRhYmxlIHByb2dyYW0gZXhwZW5zZXMgLSBpbiBzdW0sIHRoZXkgZG9uJ3QgaGF2ZSBhIGh1Z2UgZmluYW5jaWFsIHJvbGUsIGhhdmUgcHJldHR5IGhpZ2ggZmxvdyB0aHJvdWdoIG9mIHJldmVudWVzLCBhbmQgYXJlbid0IHByaW1hcmlseSBmb2N1c2VkIG9uIGdyYW50bWFraW5nLgoKCgoKIyBBcHBlbmRpeCBBIC0gQWdncmVnYXRlcyBFeGNsdWRpbmcgTWFzdGVyQ2FyZCBGb3VuZGF0aW9uCgojIyMjIEdyb3d0aCBpbiBmb3VuZGF0aW9ucyBhbmQgcGFuZGVtaWMtcmVsYXRlZCBzaGlmdHMgey50YWJzZXR9CgpOb3RlIHRoYXQgMjAyNCBmaWxpbmdzIGFyZSBub3QgY29tcGxldGUsIHdoaWNoIGhhcyBhbiBpbXBhY3Qgb24gbW9zdCBvZiB0aGVzZSB2aXN1YWxpemF0aW9ucy4KCmBgYHtyIGZvdW5kYXRpb24tZ3Jvd3RoLWFuZC1naWZ0aW5nLW9yLWdyYW50aW5nLWluY2lkZW5jZS1leGNsLU1hc3RlckNhcmR9CgpkZl9mZG5fZ3Jvd3RoIDwtIHRyYW5zZm9ybWVkX2RmIHw+IAogIHNlbGVjdChCTiwgRlBFLCB5ZWFyLCBEZXNpZ0NvZGUsIEwxODAwLCBMMjAwMCwgTDU4NDAsIEw0MjAwQ2hrLCBMNTA1MCwgTDUwNDUpIHw+IAogIGZpbHRlcihEZXNpZ0NvZGUgIT0gIkMiICYgQk4gIT0gIjgxNzM4NzI3N1JSMDAwMSIpIHw+IAogIGdyb3VwX2J5KHllYXIsIERlc2lnQ29kZSkgfD4gCiAgc3VtbWFyaXplKAogICAgY291bnQgPSBuKCksCiAgICBMMTgwMF9ZID0gc3VtKEwxODAwID09ICJZIiwgbmEucm0gPSBUUlVFKSwKICAgIEwxODAwX04gPSBzdW0oTDE4MDAgPT0gIk4iLCBuYS5ybSA9IFRSVUUpLAogICAgTDE4MDBfTkEgPSBzdW0oaXMubmEoTDE4MDApKSwKICAgIEwyMDAwX1kgPSBzdW0oTDIwMDAgPT0gIlkiLCBuYS5ybSA9IFRSVUUpLAogICAgTDIwMDBfTiA9IHN1bShMMjAwMCA9PSAiTiIsIG5hLnJtID0gVFJVRSksCiAgICBMMjAwMF9OQSA9IHN1bShpcy5uYShMMjAwMCkpLAogICAgTDU4NDBfWSA9IHN1bShMNTg0MCA9PSAiWSIsIG5hLnJtID0gVFJVRSksCiAgICBMNTg0MF9OID0gc3VtKEw1ODQwID09ICJOIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1ODQwX05BID0gc3VtKGlzLm5hKEw1ODQwKSksCiAgICBMNDIwMENoayA9IHN1bShMNDIwMENoaywgbmEucm0gPSBUUlVFKSwKICAgIEw1MDUwID0gc3VtKEw1MDUwLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNDUgPSBzdW0oTDUwNDUsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKSB8PiAKICBtdXRhdGUoCiAgICBEZXNpZ0NvZGUgPSBzdHJfcmVwbGFjZV9hbGwoCiAgICAgIERlc2lnQ29kZSwgYygiUHVibGljIGZvdW5kYXRpb24iID0gIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb24iID0gIlByaXZhdGUgZm91bmRhdGlvbnMiKQogICAgKSwKICAgIERlc2lnQ29kZSA9IGZhY3RvcigKICAgICAgRGVzaWdDb2RlLCBsZXZlbHMgPSBjKCJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9ucyIpCiAgICApLAogICAgcGVyTDE4MDAgPSBMMTgwMF9ZIC8gcm93U3VtcyhhY3Jvc3MoYyhMMTgwMF9OLCBMMTgwMF9ZLCBMMTgwMF9OQSkpKSwKICAgIHBlckwyMDAwID0gTDIwMDBfWSAvIHJvd1N1bXMoYWNyb3NzKGMoTDIwMDBfTiwgTDIwMDBfWSwgTDIwMDBfTkEpKSksCiAgICBwZXJMNTg0MCA9IEw1ODQwX1kgLyByb3dTdW1zKGFjcm9zcyhjKEw1ODQwX04sIEw1ODQwX1ksIEw1ODQwX05BKSkpCiAgICApCgpgYGAKCiMjIyMjIEFzc2V0IHZhbHVlCgpgYGB7cn0KCmdncGxvdChkZl9mZG5fZ3Jvd3RoLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IEw0MjAwQ2hrLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IGRvbGxhcihMNDIwMENoaywgc2NhbGUgPSAxLzFlOSwgYmlnLm1hcmsgPSAiLCIsIHN1ZmZpeCA9ICJCIiwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJUb3RhbCB2YWx1ZSBvZiBmb3VuZGF0aW9uIGFzc2V0cyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Zkbl9ncm93dGgkTDQyMDBDaGssIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIFZhbHVlIG9mIGdpZnRzCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZmRuX2dyb3d0aCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBMNTA1MCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBkb2xsYXIoTDUwNTAsIHNjYWxlID0gMS8xZTksIGJpZy5tYXJrID0gIiwiLCBzdWZmaXggPSAiQiIsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiVG90YWwgdmFsdWUgb2YgZm91bmRhdGlvbiBnaWZ0cyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Zkbl9ncm93dGgkTDUwNTAsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIFZhbHVlIG9mIGdyYW50cwoKYGBgIHtyfQoKZ2dwbG90KGRmX2Zkbl9ncm93dGgsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gTDUwNDUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gZG9sbGFyKEw1MDQ1LCBzY2FsZSA9IDEvMWU2LCBiaWcubWFyayA9ICIsIiwgc3VmZml4ID0gIk0iLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIHZhbHVlIG9mIGZvdW5kYXRpb24gZ2lmdHMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9mZG5fZ3Jvd3RoJEw1MDQ1LCBuYS5ybSA9IFRSVUUpICogMS4xNykpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIwoKIyMjIyBOb24tY2hhcml0YWJsZSBhc3NldHMgc3VtbWFyeSB7LnRhYnNldH0KCiMjIyMjICUgb2YgdG90YWwgYXNzZXRzCgpOb3RlIHRoYXQgdGhlc2UgbGluZSBpdGVtcyBhcmUgbmFpdmUgLSB0aGV5IGFyZSBub3QgYWRqdXN0ZWQgZm9yIHBlcm1pc3Npb24gdG8gYWNjdW11bGF0ZSBwcm9wZXJ0eSwgbm9yIGRvIHRoZXkgYWNjb3VudCBmb3IgcGVybWlzc2lvbiB0byByZWR1Y2UgZGlzYnVyc2VtZW50cy4KCmBgYHtyfQoKIyBDb21wdXRlIG5ldyBlc3RpbWF0ZXMgb2YgdW51c2VkIGFzc2V0cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGFzc2V0cwoKZGZfbm9uX2NoYXJfYXNzZXRzXzIgPC0gdHJhbnNmb3JtZWRfZGYgfD4KICBmaWx0ZXIoRGVzaWdDb2RlICVpbiUgYygiUHVibGljIGZvdW5kYXRpb24iLCAiUHJpdmF0ZSBmb3VuZGF0aW9uIikgJiBCTiAhPSAiODE3Mzg3Mjc3UlIwMDAxIikgfD4gCiAgc2VsZWN0KEJOLCBEZXNpZ0NvZGUsIEFjY291bnROYW1lLCB5ZWFyLCBMNTkwMCwgTDU5MTAsIEw0MjAwQ2hrKSB8PgogIGdyb3VwX2J5KHllYXIsIERlc2lnQ29kZSkgfD4gCiAgc3VtbWFyaXplKAogICAgYWNyb3NzKG1hdGNoZXMoIl5MNTl8Xkw0MjAwIiksIHN1bSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+IAogIG11dGF0ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBtYXRjaGVzKCJeTDU5IiksCiAgICAgIC5mbnMgPSB+IGlmZWxzZShMNDIwMENoayA9PSAwLCBOQSwgLnggLyBMNDIwMENoayksCiAgICAgIC5uYW1lcyA9ICJwZXJfYXNzZXRzX3suY29sfSIKICAgICkKICApIHw+IAogIHNlbGVjdCghYyhMNTkwMCwgTDU5MTAsIEw0MjAwQ2hrKSkgfD4gCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IG1hdGNoZXMoIl5wZXJfYXNzZXRzIiksCiAgICBuYW1lc190byA9ICJtZWFzdXJlIiwKICAgIHZhbHVlc190byA9ICJ2YWx1ZSIsCiAgICBuYW1lc19wYXR0ZXJuID0gInBlcl9hc3NldHNfKC4qKSIKICApIHw+IAogIG11dGF0ZSgKICAgIG1lYXN1cmUgPSBzdHJfcmVwbGFjZV9hbGwobWVhc3VyZSwgYygiTDU5MDAiID0gIkxpbmUgNTkwMCIsICJMNTkxMCIgPSAiTGluZSA1OTEwIikpLAogICAgRGVzaWdDb2RlID0gc3RyX3JlcGxhY2VfYWxsKAogICAgICBEZXNpZ0NvZGUsIGMoIlB1YmxpYyBmb3VuZGF0aW9uIiA9ICJQdWJsaWMgZm91bmRhdGlvbnMiLCAiUHJpdmF0ZSBmb3VuZGF0aW9uIiA9ICJQcml2YXRlIGZvdW5kYXRpb25zIikpLAogICAgRGVzaWdDb2RlID0gZmFjdG9yKERlc2lnQ29kZSwgbGV2ZWxzID0gYygiUHVibGljIGZvdW5kYXRpb25zIiwgIlByaXZhdGUgZm91bmRhdGlvbnMiKSkKICApCgojIFVudXNlZCBhc3NldHMgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIGFzc2V0cwoKZGZfdG1wIDwtIGRmX25vbl9jaGFyX2Fzc2V0c18yCgpnZ3Bsb3QoZGZfdG1wLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHZhbHVlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIk5vbi1jaGFyaXRhYmxlIGFzc2V0cyBhcyBhIHBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXRzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCmBgYAoKIyMjIyMgTGluZSA1OTAwIHN1bW1hcnkKCmBgYHtyfQoKIyBSZXNoYXBlIHRvIGxvbmcgZm9ybWF0IGZvciBMNTkwMCBhbmQgTDU5MTAKCmRmX2w1OTAwX3N1bW1hcnlfMiA8LSBub25fcHJvZ19hc3NldHNfc3VtbWFyeSB8PgogIGZpbHRlcihCTiAhPSAiODE3Mzg3Mjc3UlIwMDAxIikgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICB0b3Rfb3JncyA9IHN1bShuKCkpLAogICAgTDU5MDBfY291bnQgPSBzdW0oTDU5MDBGbGFnID09ICJZZXMiLCBuYS5ybSA9IFRSVUUpLAogICAgTDU5MTBfY291bnQgPSBzdW0oTDU5MTBGbGFnID09ICJZZXMiLCBuYS5ybSA9IFRSVUUpLAogICAgTDU5MDBfdG90ID0gc3VtKEw1OTAwLCBuYS5ybSA9IFRSVUUpLAogICAgTDU5MTBfdG90ID0gc3VtKEw1OTEwLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgfD4gCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IG1hdGNoZXMoIl5MNTlbMDFdMF8oY291bnR8dG90KSQiKSwKICAgIG5hbWVzX3RvID0gYygibGluZV9pdGVtIiwgIm1lYXN1cmUiKSwKICAgIG5hbWVzX3BhdHRlcm4gPSAiKEw1OVswMV0wKV8oY291bnR8dG90KSIKICApIHw+IAogIHNlbGVjdCgtdG90X29yZ3MpCgojIENvbXB1dGUgc2NhbGUgZmFjdG9yIHRvIGFsaWduIGJhciBoZWlnaHRzCm1heF90b3QgPC0gbWF4KGRmX2w1OTAwX3N1bW1hcnlfMiR2YWx1ZVtkZl9sNTkwMF9zdW1tYXJ5JG1lYXN1cmUgPT0gInRvdCJdLCBuYS5ybSA9IFRSVUUpCm1heF9jb3VudCAgPC0gbWF4KGRmX2w1OTAwX3N1bW1hcnlfMiR2YWx1ZVtkZl9sNTkwMF9zdW1tYXJ5JG1lYXN1cmUgPT0gImNvdW50Il0sIG5hLnJtID0gVFJVRSkKY291bnRfc2NhbGUgPC0gbWF4X3RvdCAvIG1heF9jb3VudAoKCiMgUHJlcGFyZSBkYXRhIGZvciBwbG90dGluZwoKZGZfdG1wIDwtIGRmX2w1OTAwX3N1bW1hcnlfMiAgfD4KICBtdXRhdGUoCiAgICBsYWJlbCA9IGNhc2Vfd2hlbigKICAgICAgbWVhc3VyZSA9PSAidG90IiB+IGRvbGxhcih2YWx1ZSwgc2NhbGUgPSAxLzFlOSwgc3VmZml4ID0gIkIiLCBhY2N1cmFjeSA9IDAuMSksCiAgICAgIG1lYXN1cmUgPT0gImNvdW50IiB+IG51bWJlcih2YWx1ZSwgYmlnLm1hcmsgPSAiLCIpCiAgICApLCAgCiAgICB2YWx1ZSA9IGNhc2Vfd2hlbigKICAgICAgbWVhc3VyZSA9PSAiY291bnQiIH4gdmFsdWUgKiBjb3VudF9zY2FsZSwKICAgICAgLmRlZmF1bHQgPSB2YWx1ZQogICAgKSwKICAgIG1lYXN1cmUgPSBzdHJfcmVwbGFjZV9hbGwobWVhc3VyZSwgYygidG90IiA9ICJUb3RhbCBhc3NldHMiLCAiY291bnQiID0gIiMgZm91bmRhdGlvbnMiKSksCiAgICBtZWFzdXJlID0gZmFjdG9yKG1lYXN1cmUsIGxldmVscyA9IGMoIiMgZm91bmRhdGlvbnMiLCAiVG90YWwgYXNzZXRzIikpCiAgKQoKIyBMaW5lIDU5MDAgc3VtbWFyeQoKZ2dwbG90KGRmX3RtcCB8PiBmaWx0ZXIobGluZV9pdGVtID09ICJMNTkwMCIpLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBsYWJlbCksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiTGluZSA1OTAwIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCmBgYAoKIyMjIyMgTGluZSA1OTEwIHN1bW1hcnkKCmBgYHtyfQoKIyBMaW5lIDU5MTAgc3VtbWFyeQoKZ2dwbG90KGRmX3RtcCB8PiBmaWx0ZXIobGluZV9pdGVtID09ICJMNTkxMCIpLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHZhbHVlLCBmaWxsID0gbWVhc3VyZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBsYWJlbCksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiTGluZSA1OTEwIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfdG1wJHZhbHVlLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKSAgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoRGVzaWdDb2RlKSkKCiAKYGBgCgojIwoKIyMjIyBUb3RhbCBxdWFsaWZ5aW5nIGRpc2J1cnNlbWVudHMgey50YWJzZXR9CgpOb3RlIHRoYXQgdGhlc2UgZmlndXJlcyBhcmUgcmVzdHJpY3RlZCB0byBmb3VuZGF0aW9ucyByZXBvcnRpbmcgbm9uLWNoYXJpdGFibGUgYXNzZXRzLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB1bml2ZXJzZSBhYm92ZSwgd2hpY2ggd2FzIGFsbCBmb3VuZGF0aW9ucy4KCmBgYHtyIGFnZ3JlZ2F0ZS1kYXRhLWV4Y2wtTWFzdGVyQ2FyZH0KCmRmX2FnZ19kaXNidXJzZW1lbnRzIDwtIHRyYW5zZm9ybWVkX2RmIHw+IAogIGZpbHRlcighRGVzaWdDb2RlID09ICJDIiAmIEJOICE9ICI4MTczODcyNzdSUjAwMDEiKSB8PiAKICBzZWxlY3QoQk4sIEZQRSwgeWVhciwgQWNjb3VudE5hbWUsIERlc2lnQ29kZSwgTDQyMDBDaGssIEw1OTAwLCBMNTkxMCwgTDUwMDAsIEw1MDUwLCBMNTA0NSwgcXVhbEV4cGVuc2UsIEw4MTUpIHw+IAogIG11dGF0ZShpc19kZWNfMzEgPSBpZl9lbHNlKAogICAgbW9udGgoRlBFKSA9PSAxMiAmIGRheShGUEUpID09IDMxLAogICAgIlkiLCAiTiIKICAgICkKICApIHw+IAogIGFycmFuZ2UoQk4sIGRlc2MoRlBFKSkgfD4gCiAgZ3JvdXBfYnkoQk4sIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGlzX2RlY18zMSA9IGxhc3QoaXNfZGVjXzMxKSwKICAgIEZQRSA9IGxhc3QoRlBFKSwKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEFjY291bnROYW1lLCBEZXNpZ0NvZGUsIEw0MjAwQ2hrLCBMNTkwMCwgTDU5MTAsIEw4MTUpLAogICAgICAuZm5zID0gfiBmaXJzdCgueCkKICAgICksCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTAwMCwgTDUwNTAsIEw1MDQ1LCBxdWFsRXhwZW5zZSksCiAgICAgIC5mbnMgPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+IAogIHJlbmFtZSh5ZWFyMiA9IHllYXIpIHw+IAogIG11dGF0ZSh5ZWFyID0gY2FzZV93aGVuKAogICAgeWVhcjIgPD0gMjAyMiB+IGFzLmNoYXJhY3Rlcih5ZWFyMiksCiAgICB5ZWFyMiA9PSAyMDIzICYgaXNfZGVjXzMxID09ICJOIiB+ICIyMDIzXG5wcmUtRFEiLAogICAgeWVhcjIgPT0gMjAyMyAmIGlzX2RlY18zMSA9PSAiWSIgfiAiMjAyM1xucG9zdC1EUSIsCiAgICB5ZWFyMiA+IDIwMjMgfiBhcy5jaGFyYWN0ZXIoeWVhcjIpCiAgICApCiAgICApIHw+IAogIG11dGF0ZSh5ZWFyID0gZmFjdG9yKHllYXIsIGxldmVscyA9IGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIsICIyMDIxIiwgIjIwMjIiLCAiMjAyM1xucHJlLURRIiwgIjIwMjNcbnBvc3QtRFEiLCAiMjAyNCIpKSkgfD4gCiAgZ3JvdXBfYnkoeWVhciwgRGVzaWdDb2RlKSB8PiAKICBzdW1tYXJpemUoCiAgICBjb3VudCA9IHN1bShuKCkpLAogICAgYWNyb3NzKAogICAgICAuY29scyA9IGMoTDQyMDBDaGssIEw1OTAwLCBMNTkxMCwgTDUwMDAsIEw1MDUwLCBMNTA0NSwgcXVhbEV4cGVuc2UsIEw4MTUpLAogICAgICAuZm5zID0gfiBzdW0oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlKSB8PiAKICBtdXRhdGUoCiAgICBwZXJPcmdzID0gY291bnQgLyBzdW0oY291bnQpLAogICAgcGVyTDQyMDBDaGsgPSBxdWFsRXhwZW5zZSAvIEw0MjAwQ2hrLAogICAgcGVyTDU5MDAgPSBxdWFsRXhwZW5zZSAvIEw1OTAwLAogICAgcGVyTDU5MTAgPSBxdWFsRXhwZW5zZSAvIEw1OTEwLAogICAgcGVyTDgxNSA9IHF1YWxFeHBlbnNlIC8gTDgxNSwKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw0MjAwQ2hrLCBMNTkwMCwgTDU5MTAsIEw1MDAwLCBMNTA1MCwgTDUwNDUsIHF1YWxFeHBlbnNlLCBMODE1KSwKICAgICAgLmZucyA9IH4gLnggLSBsYWcoLngpLAogICAgICAubmFtZXMgPSAiey5jb2x9X3lveSIKICAgICAgKSwKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBlbmRzX3dpdGgoIl95b3kiKSwKICAgICAgLmZucyA9IH4gY2FzZV93aGVuKAogICAgICAgIC54ID49IDFlOSB+IGRvbGxhcigueCwgc2NhbGUgPSAxLzFlOSwgc3VmZml4ID0gIkIiKSwKICAgICAgICAueCA8IDFlOSB+IGRvbGxhcigueCwgc2NhbGUgPSAxLzFlNiwgc3VmZml4ID0gIk0iKQogICAgICAgICksCiAgICAgIC5uYW1lcyA9ICJ7LmNvbH1fZm9ybWF0dGVkIgogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIERlc2lnQ29kZSA9IGZhY3RvcigKICAgICAgc3RyX3JlcGxhY2VfYWxsKAogICAgICAgIERlc2lnQ29kZSwgYygiUHVibGljIGZvdW5kYXRpb24iID0gIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb24iID0gIlByaXZhdGUgZm91bmRhdGlvbnMiKQogICAgICAgICksCiAgICAgIGxldmVscyA9IGMoIlB1YmxpYyBmb3VuZGF0aW9ucyIsICJQcml2YXRlIGZvdW5kYXRpb25zIikKICAgICAgKQogICAgKQoKCmBgYAoKIyMjIyMgJSBvZiBMaW5lIDU5MDAKCmBgYHtyfQoKZ2dwbG90KGRmX2FnZ19kaXNidXJzZW1lbnRzLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlckw1OTAwLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyTDU5MDAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiQWdncmVnYXRlIHF1YWxpZmllZCBkaXNidXJzZW1lbnRzIGFzICUgb2YgTGluZSA1OTAwIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfYWdnX2Rpc2J1cnNlbWVudHMkcGVyTDU5MDAsIG5hLnJtID0gVFJVRSkgKiAxLjM1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgb2YgTGluZSA1OTEwCgpgYGB7cn0KCmdncGxvdChkZl9hZ2dfZGlzYnVyc2VtZW50cywgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJMNTkxMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlckw1OTEwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkFnZ3JlZ2F0ZSBxdWFsaWZpZWQgZGlzYnVyc2VtZW50cyBhcyAlIG9mIExpbmUgNTkxMCIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2FnZ19kaXNidXJzZW1lbnRzJHBlckw1OTEwLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIG9mIExpbmUgODE1CgpgYGB7cn0KCmdncGxvdChkZl9hZ2dfZGlzYnVyc2VtZW50cywgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJMODE1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJBZ2dyZWdhdGUgcXVhbGlmaWVkIGRpc2J1cnNlbWVudHMgYXMgJSBvZiBMaW5lIDgxNSIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2FnZ19kaXNidXJzZW1lbnRzJHBlckw4MTUsIG5hLnJtID0gVFJVRSkgKiAxLjM1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgb2YgdG90YWwgYXNzZXRzCgpgYGB7cn0KCmdncGxvdChkZl9hZ2dfZGlzYnVyc2VtZW50cywgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJMNDIwMENoaywgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlckw0MjAwQ2hrLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkFnZ3JlZ2F0ZSBxdWFsaWZpZWQgZGlzYnVyc2VtZW50cyBhcyAlIG9mIExpbmUgNDIwMCIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2FnZ19kaXNidXJzZW1lbnRzJHBlckw0MjAwQ2hrLCBuYS5ybSA9IFRSVUUpICogMS4zNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKCmBgYAoKIyBBcHBlbmRpeCBCIC0gTWV0aG9kb2xvZ3kKCiMjIERhdGEgY29tcGxldGVuZXNzCgojIyMgTGluZSA4MTUgbWlzc2luZ25lc3Mgey50YWJzZXR9CgojIyMjIEJhc2VsaW5lCgpgYGB7cn0KCmRmX2xvbmdpdHVkaW5hbF9kaXNidXJzZW1lbnRzIHw+IAogIGZpbHRlcihjb25kaXRpb24gPT0gImJhc2VsaW5lIikgfD4gCiAgdGFieWwocmFuZ2UsIGluX3Njb3BlLCBzaG93X25hID0gVFJVRSkgfD4gCiAgYWRvcm5fcGVyY2VudGFnZXMoImFsbCIpIHw+IAogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKCkKCmBgYAoKIyMjIyAxc3QgcG9zdC1EUQoKYGBge3J9CgpkZl9sb25naXR1ZGluYWxfZGlzYnVyc2VtZW50cyB8PiAKICBmaWx0ZXIoY29uZGl0aW9uID09ICJjaGFuZ2UiKSB8PiAKICB0YWJ5bChyYW5nZSwgaW5fc2NvcGUsIHNob3dfbmEgPSBUUlVFKSB8PiAKICBhZG9ybl9wZXJjZW50YWdlcygiYWxsIikgfD4gCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoKQoKYGBgCgojIyMjIDJuZCBwb3N0LURRCgpgYGB7cn0KCmRmX2xvbmdpdHVkaW5hbF9kaXNidXJzZW1lbnRzIHw+IAogIGZpbHRlcihjb25kaXRpb24gPT0gInN1c3RhaW5pbmciKSB8PiAKICB0YWJ5bChyYW5nZSwgaW5fc2NvcGUsIHNob3dfbmEgPSBUUlVFKSB8PiAKICBhZG9ybl9wZXJjZW50YWdlcygiYWxsIikgfD4gCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoKQoKYGBgCgoKIyMgCgoKIyMgRXZhbHVhdGluZyBpbXBhY3Qgb2YgRXhwZW5kaXR1cmVzIHJlcG9ydGluZyBpc3N1ZXMKCiMjIyMgRmlsdGVyZWQgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFzIGEgZnJhY3Rpb24gb2YgdG90YWwgZXhwZW5kaXR1cmVzIHsudGFic2V0fQoKVGhlc2UgYW5hbHlzZXMgZXhjbHVkZSByZWNvcmRzIHdoZXJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWN0aXZpdGllcyAoTGluZXMgNTAwMCwgNTAxMCwgNTAyMCwgNTA0MCwgNTA0NSwgYW5kIDUwNTApIGFuZCB0b3RhbCBleHBlbmRpdHVyZXMgZXhjZWVkIDIlIG9mIGV4cGVuZGl0dXJlcyBhbmQgJDUwMC4gQnJvYWRseSwgdGhlIHN0b3J5IHNlZW1zIHRvIGJlIHRoZSBzYW1lIGFzIHdpdGggdGhlIHVuZmlsdGVyZWQgZGF0YS4KCmBgYCB7ciBxdWFsLWRpc2ItZGF0YS1maWx0ZXJlZH0KCnRvdGFsIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgdG90YWwgPSBxdWFsRXhwZW5zZSAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIHF1YWxFeHBlbnNlX3RvdCA9IHF1YWxFeHBlbnNlLAogICAgTDUxMDBDaGtfdG90ID0gTDUxMDBDaGsKICAgICkKCmZpbHRlcmVkIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUocXVhbEV4cGVuc2VfcGVyID0gcXVhbEV4cGVuc2UgLyBMNTEwMENoaykgfD4gCiAgZmlsdGVyKHF1YWxFeHBlbnNlX3BlciA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgZmlsdGVyZWQgPSBxdWFsRXhwZW5zZSAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIHF1YWxFeHBlbnNlX2ZpbHQgPSBxdWFsRXhwZW5zZSwKICAgIEw1MTAwQ2hrX2ZpbHQgPSBMNTEwMENoawogICAgKQoKcHJvYmxlbV9yYXRlIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBmaWx0ZXIoTWFzdGVyRmxhZyA9PSAiUGFzcyIpIHw+IAogIG11dGF0ZSgKICAgIHF1YWxFeHBlbnNlX3BlciA9IHNhZmVfZGl2aWRlKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICBxdWFsRXhwZW5zZV9mbGFnID0gaWZfZWxzZShxdWFsRXhwZW5zZV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIHF1YWxFeHBlbnNlX1kgPSBzdW0ocXVhbEV4cGVuc2VfZmxhZyA9PSAiWSIsIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9OID0gc3VtKHF1YWxFeHBlbnNlX2ZsYWcgPT0gIk4iLCBuYS5ybSA9IFRSVUUpLAogICAgcXVhbEV4cGVuc2VfTkEgPSBzdW0oaXMubmEocXVhbEV4cGVuc2VfZmxhZykpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUoCiAgICBwcm9ibGVtX3JhdGUgPSBxdWFsRXhwZW5zZV9ZIC8gKHF1YWxFeHBlbnNlX04gKyBxdWFsRXhwZW5zZV9OQSkKICAgICkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcHJvYmxlbV9yYXRlKQogIApwZXJfYXNzZXRzIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBmaWx0ZXIoTWFzdGVyRmxhZyA9PSAiUGFzcyIpIHw+IAogIG11dGF0ZSgKICAgIHF1YWxFeHBlbnNlX3BlciA9IHNhZmVfZGl2aWRlKHF1YWxFeHBlbnNlLCBMNTEwMENoayksCiAgICBxdWFsRXhwZW5zZV9mbGFnID0gaWZfZWxzZShxdWFsRXhwZW5zZV9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MTAwQ2hrX2FtdF9ZID0gc3VtKEw1MTAwQ2hrW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OID0gc3VtKEw1MTAwQ2hrW3F1YWxFeHBlbnNlX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OQSA9IHN1bShMNTEwMENoa1tpcy5uYShxdWFsRXhwZW5zZV9mbGFnKV0pLAogICAgTDUxMDBDaGtfYW10X3RvdCA9IHN1bShMNTEwMENoaywgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9hc3NldHMgPSBMNTEwMENoa19hbXRfWSAvIEw1MTAwQ2hrX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9hc3NldHMpCgpwZXJfTDgxNSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBxdWFsRXhwZW5zZV9wZXIgPSBzYWZlX2RpdmlkZShxdWFsRXhwZW5zZSwgTDUxMDBDaGspLAogICAgcXVhbEV4cGVuc2VfZmxhZyA9IGlmX2Vsc2UocXVhbEV4cGVuc2VfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMODE1X2FtdF9ZID0gc3VtKEw4MTVbcXVhbEV4cGVuc2VfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDgxNV9hbXRfTiA9IHN1bShMODE1W3F1YWxFeHBlbnNlX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X05BID0gc3VtKEw4MTVbaXMubmEocXVhbEV4cGVuc2VfZmxhZyldKSwKICAgIEw4MTVfYW10X3RvdCA9IHN1bShMODE1LCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w4MTUgPSBMODE1X2FtdF9ZIC8gTDgxNV9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDgxNSkKCnBlcl9xdWFsRXhwZW5zZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBxdWFsRXhwZW5zZV9wZXIgPSBzYWZlX2RpdmlkZShxdWFsRXhwZW5zZSwgTDUxMDBDaGspLAogICAgcXVhbEV4cGVuc2VfZmxhZyA9IGlmX2Vsc2UocXVhbEV4cGVuc2VfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBxdWFsRXhwZW5zZV9hbXRfWSA9IHN1bShxdWFsRXhwZW5zZVtxdWFsRXhwZW5zZV9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9hbXRfTiA9IHN1bShxdWFsRXhwZW5zZVtxdWFsRXhwZW5zZV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBxdWFsRXhwZW5zZV9hbXRfTkEgPSBzdW0ocXVhbEV4cGVuc2VbaXMubmEocXVhbEV4cGVuc2VfZmxhZyldKSwKICAgIHF1YWxFeHBlbnNlX2FtdF90b3QgPSBzdW0ocXVhbEV4cGVuc2UsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfcXVhbEV4cGVuc2UgPSBxdWFsRXhwZW5zZV9hbXRfWSAvIHF1YWxFeHBlbnNlX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9xdWFsRXhwZW5zZSkKCmF2Z19xdWFsRXhwZW5zZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBhdmdfcXVhbEV4cGVuc2UgPSBzYWZlX2RpdmlkZShxdWFsRXhwZW5zZSwgTDUxMDBDaGspCiAgICApIHw+CiAgZmlsdGVyKGF2Z19xdWFsRXhwZW5zZSA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKGF2Z19xdWFsRXhwZW5zZSksCiAgICAgIC5mbiA9IH4gbWVhbigueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApCgpkZl9kaXNwX2V4cCA8LSB0b3RhbCB8PiAKICBsZWZ0X2pvaW4oZmlsdGVyZWQsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHByb2JsZW1fcmF0ZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX2Fzc2V0cywgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX0w4MTUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9xdWFsRXhwZW5zZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4oYXZnX3F1YWxFeHBlbnNlLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpCgpybSh0b3RhbCwgZmlsdGVyZWQsIHByb2JsZW1fcmF0ZSwgcGVyX2Fzc2V0cywgcGVyX0w4MTUsIHBlcl9xdWFsRXhwZW5zZSwgYXZnX3F1YWxFeHBlbnNlKQoKCmBgYAoKIyMjIyMgVG90YWwKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSB0b3RhbCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHRvdGFsLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIHF1YWxpZnlpbmcgZGlzYnVyc2VtZW50cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHRvdGFsLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBGaWx0ZXJlZAoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGZpbHRlcmVkLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoZmlsdGVyZWQsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiRmlsdGVyZWQgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFyZSBncmVhdGVyIHRoYW4gdG90YWwgZXhwZW5kaXR1cmVzIChsb2dpY2FsbHkgaW1wb3NzaWJsZSkuCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gYXZnX3F1YWxFeHBlbnNlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoYXZnX3F1YWxFeHBlbnNlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkF2ZXJhZ2UgcXVhbGlmeWluZyBkaXNidXJzZW1lbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkYXZnX3F1YWxFeHBlbnNlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBQcm9ibGVtIHJhdGUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwcm9ibGVtX3JhdGUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwcm9ibGVtX3JhdGUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiByZWNvcmRzIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcHJvYmxlbV9yYXRlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFzc2V0IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX2Fzc2V0cywgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9hc3NldHMsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldCB2YWx1ZSB3aXRoIHF1YWxpZnlpbmcgZXhwZW5kaXR1cmVzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9hc3NldHMsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgTDgxNQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9MODE1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w4MTUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBMODE1IHZhbHVlIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX0w4MTUsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgZGlzYnVyc2VtZW50IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX3F1YWxFeHBlbnNlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX3F1YWxFeHBlbnNlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIHZhbHVlIHdpdGggcXVhbGlmeWluZyBleHBlbmRpdHVyZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX3F1YWxFeHBlbnNlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIEZpbHRlcmVkIGdpZnRzIGFzIGEgZnJhY3Rpb24gb2YgdG90YWwgZXhwZW5kaXR1cmVzIHsudGFic2V0fQoKYGBgIHtyIGdpZnRzLWRpc2ItZGF0YS1maWx0ZXJlZH0KCnRvdGFsIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw1MDUwLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgdG90YWwgPSBMNTA1MCAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIEw1MDUwX3RvdCA9IEw1MDUwLAogICAgTDUxMDBDaGtfdG90ID0gTDUxMDBDaGsKICAgICkKCmZpbHRlcmVkIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4gCiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoTDUwNTBfcGVyID0gTDUwNTAgLyBMNTEwMENoaykgfD4gCiAgZmlsdGVyKEw1MDUwX3BlciA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKEw1MDUwLCBMNTEwMENoayksCiAgICAgIC5mbiA9IH4gc3VtKC54LCBuYS5ybSA9IFRSVUUpCiAgICAgICkKICAgICkgfD4gCiAgbXV0YXRlKAogICAgZmlsdGVyZWQgPSBMNTA1MCAvIEw1MTAwQ2hrCiAgICApIHw+IAogIHJlbmFtZSgKICAgIEw1MDUwX2ZpbHQgPSBMNTA1MCwKICAgIEw1MTAwQ2hrX2ZpbHQgPSBMNTEwMENoawogICAgKQoKcHJvYmxlbV9yYXRlIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBmaWx0ZXIoTWFzdGVyRmxhZyA9PSAiUGFzcyIpIHw+IAogIG11dGF0ZSgKICAgIEw1MDUwX3BlciA9IHNhZmVfZGl2aWRlKEw1MDUwLCBMNTEwMENoayksCiAgICBMNTA1MF9mbGFnID0gaWZfZWxzZShMNTA1MF9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MDUwX1kgPSBzdW0oTDUwNTBfZmxhZyA9PSAiWSIsIG5hLnJtID0gVFJVRSksCiAgICBMNTA1MF9OID0gc3VtKEw1MDUwX2ZsYWcgPT0gIk4iLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNTBfTkEgPSBzdW0oaXMubmEoTDUwNTBfZmxhZykpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUoCiAgICBwcm9ibGVtX3JhdGUgPSBMNTA1MF9ZIC8gKEw1MDUwX04gKyBMNTA1MF9OQSkKICAgICkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcHJvYmxlbV9yYXRlKQogIApwZXJfYXNzZXRzIDwtIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMgfD4KICBmaWx0ZXIoTWFzdGVyRmxhZyA9PSAiUGFzcyIpIHw+IAogIG11dGF0ZSgKICAgIEw1MDUwX3BlciA9IHNhZmVfZGl2aWRlKEw1MDUwLCBMNTEwMENoayksCiAgICBMNTA1MF9mbGFnID0gaWZfZWxzZShMNTA1MF9wZXIgPiAxLCAiWSIsICJOIikKICAgICkgfD4KICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIEw1MTAwQ2hrX2FtdF9ZID0gc3VtKEw1MTAwQ2hrW0w1MDUwX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OID0gc3VtKEw1MTAwQ2hrW0w1MDUwX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw1MTAwQ2hrX2FtdF9OQSA9IHN1bShMNTEwMENoa1tpcy5uYShMNTA1MF9mbGFnKV0pLAogICAgTDUxMDBDaGtfYW10X3RvdCA9IHN1bShMNTEwMENoaywgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9hc3NldHMgPSBMNTEwMENoa19hbXRfWSAvIEw1MTAwQ2hrX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9hc3NldHMpCgpwZXJfTDgxNSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTA1MF9wZXIgPSBzYWZlX2RpdmlkZShMNTA1MCwgTDUxMDBDaGspLAogICAgTDUwNTBfZmxhZyA9IGlmX2Vsc2UoTDUwNTBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMODE1X2FtdF9ZID0gc3VtKEw4MTVbTDUwNTBfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDgxNV9hbXRfTiA9IHN1bShMODE1W0w1MDUwX2ZsYWcgPT0gIk4iXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X05BID0gc3VtKEw4MTVbaXMubmEoTDUwNTBfZmxhZyldKSwKICAgIEw4MTVfYW10X3RvdCA9IHN1bShMODE1LCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w4MTUgPSBMODE1X2FtdF9ZIC8gTDgxNV9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDgxNSkKCnBlcl9MNTA1MCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTA1MF9wZXIgPSBzYWZlX2RpdmlkZShMNTA1MCwgTDUxMDBDaGspLAogICAgTDUwNTBfZmxhZyA9IGlmX2Vsc2UoTDUwNTBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTA1MF9hbXRfWSA9IHN1bShMNTA1MFtMNTA1MF9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTA1MF9hbXRfTiA9IHN1bShMNTA1MFtMNTA1MF9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTA1MF9hbXRfTkEgPSBzdW0oTDUwNTBbaXMubmEoTDUwNTBfZmxhZyldKSwKICAgIEw1MDUwX2FtdF90b3QgPSBzdW0oTDUwNTAsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfTDUwNTAgPSBMNTA1MF9hbXRfWSAvIEw1MDUwX2FtdF90b3QpIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHBlcl9MNTA1MCkKCmF2Z19MNTA1MCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBhdmdfTDUwNTAgPSBzYWZlX2RpdmlkZShMNTA1MCwgTDUxMDBDaGspCiAgICApIHw+CiAgZmlsdGVyKGF2Z19MNTA1MCA8PSAxKSB8PiAKICBncm91cF9ieShEZXNpZ0NvZGUsIHllYXIpIHw+IAogIHN1bW1hcml6ZSgKICAgIGFjcm9zcygKICAgICAgLmNvbHMgPSBjKGF2Z19MNTA1MCksCiAgICAgIC5mbiA9IH4gbWVhbigueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApCgpkZl9kaXNwX2V4cCA8LSB0b3RhbCB8PiAKICBsZWZ0X2pvaW4oZmlsdGVyZWQsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHByb2JsZW1fcmF0ZSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX2Fzc2V0cywgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4ocGVyX0w4MTUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9MNTA1MCwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKSB8PiAKICBsZWZ0X2pvaW4oYXZnX0w1MDUwLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpCgpybSh0b3RhbCwgZmlsdGVyZWQsIHByb2JsZW1fcmF0ZSwgcGVyX2Fzc2V0cywgcGVyX0w4MTUsIHBlcl9MNTA1MCwgYXZnX0w1MDUwKQoKYGBgCgojIyMjIyBUb3RhbAoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHRvdGFsLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQodG90YWwsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiVG90YWwgZ2lmdHMgYXMgcGVyY2VudGFnZSBvZiB0b3RhbCBleHBlbmRpdHVyZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCR0b3RhbCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgRmlsdGVyZWQKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBmaWx0ZXJlZCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KGZpbHRlcmVkLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkZpbHRlcmVkIGdpZnRzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgZ2lmdHMgYXJlIGdyZWF0ZXIgdGhhbiB0b3RhbCBleHBlbmRpdHVyZXMgKGxvZ2ljYWxseSBpbXBvc3NpYmxlKS4KCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBhdmdfTDUwNTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChhdmdfTDUwNTAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiQXZlcmFnZSBnaWZ0cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJGF2Z19MNTA1MCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgUHJvYmxlbSByYXRlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcHJvYmxlbV9yYXRlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocHJvYmxlbV9yYXRlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgcmVjb3JkcyB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHByb2JsZW1fcmF0ZSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBhc3NldCB2YWx1ZQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9hc3NldHMsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfYXNzZXRzLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXQgdmFsdWUgd2l0aCBnaWZ0cyBpc3N1ZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCRwZXJfYXNzZXRzLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIEw4MTUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJfTDgxNSwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9MODE1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgTDgxNSB2YWx1ZSB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MODE1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGdpZnQgdmFsdWUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwZXJfTDUwNTAsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDUwNTAsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiBnaWZ0cyB2YWx1ZSB3aXRoIGdpZnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MNTA1MCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMKCiMjIyMgRmlsdGVyZWQgY2hhcml0YWJsZSBhY3Rpdml0aWVzIGFzIGZyYWN0aW9uIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyB7LnRhYnNldH0KCmBgYCB7ciBhY3Rpdml0eS1kaXNiLWRhdGEtZmlsdGVyZWR9Cgp0b3RhbCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTAwMCwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIHRvdGFsID0gTDUwMDAgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTAwMF90b3QgPSBMNTAwMCwKICAgIEw1MTAwQ2hrX3RvdCA9IEw1MTAwQ2hrCiAgICApCgpmaWx0ZXJlZCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKEw1MDAwX3BlciA9IEw1MDAwIC8gTDUxMDBDaGspIHw+IAogIGZpbHRlcihMNTAwMF9wZXIgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTAwMCwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIGZpbHRlcmVkID0gTDUwMDAgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTAwMF9maWx0ID0gTDUwMDAsCiAgICBMNTEwMENoa19maWx0ID0gTDUxMDBDaGsKICAgICkKCnByb2JsZW1fcmF0ZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTAwMF9wZXIgPSBzYWZlX2RpdmlkZShMNTAwMCwgTDUxMDBDaGspLAogICAgTDUwMDBfZmxhZyA9IGlmX2Vsc2UoTDUwMDBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTAwMF9ZID0gc3VtKEw1MDAwX2ZsYWcgPT0gIlkiLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfTiA9IHN1bShMNTAwMF9mbGFnID09ICJOIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDAwX05BID0gc3VtKGlzLm5hKEw1MDAwX2ZsYWcpKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKAogICAgcHJvYmxlbV9yYXRlID0gTDUwMDBfWSAvIChMNTAwMF9OICsgTDUwMDBfTkEpCiAgICApIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHByb2JsZW1fcmF0ZSkKICAKcGVyX2Fzc2V0cyA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTAwMF9wZXIgPSBzYWZlX2RpdmlkZShMNTAwMCwgTDUxMDBDaGspLAogICAgTDUwMDBfZmxhZyA9IGlmX2Vsc2UoTDUwMDBfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTEwMENoa19hbXRfWSA9IHN1bShMNTEwMENoa1tMNTAwMF9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTiA9IHN1bShMNTEwMENoa1tMNTAwMF9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTkEgPSBzdW0oTDUxMDBDaGtbaXMubmEoTDUwMDBfZmxhZyldKSwKICAgIEw1MTAwQ2hrX2FtdF90b3QgPSBzdW0oTDUxMDBDaGssIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfYXNzZXRzID0gTDUxMDBDaGtfYW10X1kgLyBMNTEwMENoa19hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfYXNzZXRzKQoKcGVyX0w4MTUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgTDUwMDBfcGVyID0gc2FmZV9kaXZpZGUoTDUwMDAsIEw1MTAwQ2hrKSwKICAgIEw1MDAwX2ZsYWcgPSBpZl9lbHNlKEw1MDAwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDgxNV9hbXRfWSA9IHN1bShMODE1W0w1MDAwX2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X04gPSBzdW0oTDgxNVtMNTAwMF9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMODE1X2FtdF9OQSA9IHN1bShMODE1W2lzLm5hKEw1MDAwX2ZsYWcpXSksCiAgICBMODE1X2FtdF90b3QgPSBzdW0oTDgxNSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9MODE1ID0gTDgxNV9hbXRfWSAvIEw4MTVfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX0w4MTUpCgpwZXJfTDUwMDAgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgTDUwMDBfcGVyID0gc2FmZV9kaXZpZGUoTDUwMDAsIEw1MTAwQ2hrKSwKICAgIEw1MDAwX2ZsYWcgPSBpZl9lbHNlKEw1MDAwX3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDUwMDBfYW10X1kgPSBzdW0oTDUwMDBbTDUwMDBfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfYW10X04gPSBzdW0oTDUwMDBbTDUwMDBfZmxhZyA9PSAiTiJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwMDBfYW10X05BID0gc3VtKEw1MDAwW2lzLm5hKEw1MDAwX2ZsYWcpXSksCiAgICBMNTAwMF9hbXRfdG90ID0gc3VtKEw1MDAwLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w1MDAwID0gTDUwMDBfYW10X1kgLyBMNTAwMF9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDUwMDApCgphdmdfTDUwMDAgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgYXZnX0w1MDAwID0gc2FmZV9kaXZpZGUoTDUwMDAsIEw1MTAwQ2hrKQogICAgKSB8PgogIGZpbHRlcihhdmdfTDUwMDAgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhhdmdfTDUwMDApLAogICAgICAuZm4gPSB+IG1lYW4oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKQogICAgKQoKZGZfZGlzcF9leHAgPC0gdG90YWwgfD4gCiAgbGVmdF9qb2luKGZpbHRlcmVkLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwcm9ibGVtX3JhdGUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9hc3NldHMsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9MODE1LCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwZXJfTDUwMDAsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKGF2Z19MNTAwMCwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKQoKcm0odG90YWwsIGZpbHRlcmVkLCBwcm9ibGVtX3JhdGUsIHBlcl9hc3NldHMsIHBlcl9MODE1LCBwZXJfTDUwMDAsIGF2Z19MNTAwMCkKCmBgYAoKCiMjIyMjIFRvdGFsCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gdG90YWwsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudCh0b3RhbCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJUb3RhbCBhY3Rpdml0aWVzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkdG90YWwsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEZpbHRlcmVkCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gZmlsdGVyZWQsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChmaWx0ZXJlZCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJGaWx0ZXJlZCBhY3Rpdml0aWVzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCkV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgYWN0aXZpdGllcyBhcmUgZ3JlYXRlciB0aGFuIHRvdGFsIGV4cGVuZGl0dXJlcyAobG9naWNhbGx5IGltcG9zc2libGUpLgoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGF2Z19MNTAwMCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KGF2Z19MNTAwMCwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJBdmVyYWdlIGFjdGl2aXRlcyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJGF2Z19MNTAwMCwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgUHJvYmxlbSByYXRlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcHJvYmxlbV9yYXRlLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocHJvYmxlbV9yYXRlLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgcmVjb3JkcyB3aXRoIGFjdGl2aXRpZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcHJvYmxlbV9yYXRlLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFzc2V0IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX2Fzc2V0cywgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHBlcl9hc3NldHMsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiB0b3RhbCBhc3NldCB2YWx1ZSB3aXRoIGFjdGl2aXRpZXMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX2Fzc2V0cywgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBMODE1CgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w4MTUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50YWdlIG9mIHRvdGFsIEw4MTUgdmFsdWUgd2l0aCBhY3Rpdml0aWVzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MODE1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyAlIGFjdGl2aXR5IHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w1MDAwLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w1MDAwLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYWN0aXZpdGllcyB2YWx1ZSB3aXRoIGFjdGl2aXRlcyBpc3N1ZXMiLAogICAgeCA9IE5VTEwsCiAgICB5ID0gTlVMTCwKICAgIGZpbGwgPSBOVUxMCiAgKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIG1heChkZl9kaXNwX2V4cCRwZXJfTDUwMDAsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjCgoKIyMjIyBGaWx0ZXJlZCBncmFudHMgYXMgZnJhY3Rpb24gb2YgdG90YWwgZXhwZW5kaXR1cmVzIHsudGFic2V0fQoKYGBgIHtyIGdyYW50cy1kaXNiLWRhdGEtZmlsdGVyZWR9Cgp0b3RhbCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTA0NSwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIHRvdGFsID0gTDUwNDUgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTA0NV90b3QgPSBMNTA0NSwKICAgIEw1MTAwQ2hrX3RvdCA9IEw1MTAwQ2hrCiAgICApCgpmaWx0ZXJlZCA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+IAogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKEw1MDQ1X3BlciA9IEw1MDQ1IC8gTDUxMDBDaGspIHw+IAogIGZpbHRlcihMNTA0NV9wZXIgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhMNTA0NSwgTDUxMDBDaGspLAogICAgICAuZm4gPSB+IHN1bSgueCwgbmEucm0gPSBUUlVFKQogICAgICApCiAgICApIHw+IAogIG11dGF0ZSgKICAgIGZpbHRlcmVkID0gTDUwNDUgLyBMNTEwMENoawogICAgKSB8PiAKICByZW5hbWUoCiAgICBMNTA0NV9maWx0ID0gTDUwNDUsCiAgICBMNTEwMENoa19maWx0ID0gTDUxMDBDaGsKICAgICkKCnByb2JsZW1fcmF0ZSA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTA0NV9wZXIgPSBzYWZlX2RpdmlkZShMNTA0NSwgTDUxMDBDaGspLAogICAgTDUwNDVfZmxhZyA9IGlmX2Vsc2UoTDUwNDVfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTA0NV9ZID0gc3VtKEw1MDQ1X2ZsYWcgPT0gIlkiLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNDVfTiA9IHN1bShMNTA0NV9mbGFnID09ICJOIiwgbmEucm0gPSBUUlVFKSwKICAgIEw1MDQ1X05BID0gc3VtKGlzLm5hKEw1MDQ1X2ZsYWcpKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKAogICAgcHJvYmxlbV9yYXRlID0gTDUwNDVfWSAvIChMNTA0NV9OICsgTDUwNDVfTkEpCiAgICApIHw+IAogIHNlbGVjdCh5ZWFyLCBEZXNpZ0NvZGUsIHByb2JsZW1fcmF0ZSkKICAKcGVyX2Fzc2V0cyA8LSBkZl9kaXNidXJzZW1lbnRfZXhwZW5kaXR1cmVzIHw+CiAgZmlsdGVyKE1hc3RlckZsYWcgPT0gIlBhc3MiKSB8PiAKICBtdXRhdGUoCiAgICBMNTA0NV9wZXIgPSBzYWZlX2RpdmlkZShMNTA0NSwgTDUxMDBDaGspLAogICAgTDUwNDVfZmxhZyA9IGlmX2Vsc2UoTDUwNDVfcGVyID4gMSwgIlkiLCAiTiIpCiAgICApIHw+CiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBMNTEwMENoa19hbXRfWSA9IHN1bShMNTEwMENoa1tMNTA0NV9mbGFnID09ICJZIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTiA9IHN1bShMNTEwMENoa1tMNTA0NV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMNTEwMENoa19hbXRfTkEgPSBzdW0oTDUxMDBDaGtbaXMubmEoTDUwNDVfZmxhZyldKSwKICAgIEw1MTAwQ2hrX2FtdF90b3QgPSBzdW0oTDUxMDBDaGssIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgICApIHw+IAogIG11dGF0ZShwZXJfYXNzZXRzID0gTDUxMDBDaGtfYW10X1kgLyBMNTEwMENoa19hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfYXNzZXRzKQoKcGVyX0w4MTUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgTDUwNDVfcGVyID0gc2FmZV9kaXZpZGUoTDUwNDUsIEw1MTAwQ2hrKSwKICAgIEw1MDQ1X2ZsYWcgPSBpZl9lbHNlKEw1MDQ1X3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDgxNV9hbXRfWSA9IHN1bShMODE1W0w1MDQ1X2ZsYWcgPT0gIlkiXSwgbmEucm0gPSBUUlVFKSwKICAgIEw4MTVfYW10X04gPSBzdW0oTDgxNVtMNTA0NV9mbGFnID09ICJOIl0sIG5hLnJtID0gVFJVRSksCiAgICBMODE1X2FtdF9OQSA9IHN1bShMODE1W2lzLm5hKEw1MDQ1X2ZsYWcpXSksCiAgICBMODE1X2FtdF90b3QgPSBzdW0oTDgxNSwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICAgICkgfD4gCiAgbXV0YXRlKHBlcl9MODE1ID0gTDgxNV9hbXRfWSAvIEw4MTVfYW10X3RvdCkgfD4gCiAgc2VsZWN0KHllYXIsIERlc2lnQ29kZSwgcGVyX0w4MTUpCgpwZXJfTDUwNDUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgTDUwNDVfcGVyID0gc2FmZV9kaXZpZGUoTDUwNDUsIEw1MTAwQ2hrKSwKICAgIEw1MDQ1X2ZsYWcgPSBpZl9lbHNlKEw1MDQ1X3BlciA+IDEsICJZIiwgIk4iKQogICAgKSB8PgogIGdyb3VwX2J5KERlc2lnQ29kZSwgeWVhcikgfD4gCiAgc3VtbWFyaXplKAogICAgTDUwNDVfYW10X1kgPSBzdW0oTDUwNDVbTDUwNDVfZmxhZyA9PSAiWSJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNDVfYW10X04gPSBzdW0oTDUwNDVbTDUwNDVfZmxhZyA9PSAiTiJdLCBuYS5ybSA9IFRSVUUpLAogICAgTDUwNDVfYW10X05BID0gc3VtKEw1MDQ1W2lzLm5hKEw1MDQ1X2ZsYWcpXSksCiAgICBMNTA0NV9hbXRfdG90ID0gc3VtKEw1MDQ1LCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICAgKSB8PiAKICBtdXRhdGUocGVyX0w1MDQ1ID0gTDUwNDVfYW10X1kgLyBMNTA0NV9hbXRfdG90KSB8PiAKICBzZWxlY3QoeWVhciwgRGVzaWdDb2RlLCBwZXJfTDUwNDUpCgphdmdfTDUwNDUgPC0gZGZfZGlzYnVyc2VtZW50X2V4cGVuZGl0dXJlcyB8PgogIGZpbHRlcihNYXN0ZXJGbGFnID09ICJQYXNzIikgfD4gCiAgbXV0YXRlKAogICAgYXZnX0w1MDQ1ID0gc2FmZV9kaXZpZGUoTDUwNDUsIEw1MTAwQ2hrKQogICAgKSB8PgogIGZpbHRlcihhdmdfTDUwNDUgPD0gMSkgfD4gCiAgZ3JvdXBfYnkoRGVzaWdDb2RlLCB5ZWFyKSB8PiAKICBzdW1tYXJpemUoCiAgICBhY3Jvc3MoCiAgICAgIC5jb2xzID0gYyhhdmdfTDUwNDUpLAogICAgICAuZm4gPSB+IG1lYW4oLngsIG5hLnJtID0gVFJVRSkKICAgICAgKQogICAgKQoKZGZfZGlzcF9leHAgPC0gdG90YWwgfD4gCiAgbGVmdF9qb2luKGZpbHRlcmVkLCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwcm9ibGVtX3JhdGUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9hc3NldHMsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKHBlcl9MODE1LCBieSA9IGMoInllYXIiLCAiRGVzaWdDb2RlIikpIHw+IAogIGxlZnRfam9pbihwZXJfTDUwNDUsIGJ5ID0gYygieWVhciIsICJEZXNpZ0NvZGUiKSkgfD4gCiAgbGVmdF9qb2luKGF2Z19MNTA0NSwgYnkgPSBjKCJ5ZWFyIiwgIkRlc2lnQ29kZSIpKQoKcm0odG90YWwsIGZpbHRlcmVkLCBwcm9ibGVtX3JhdGUsIHBlcl9hc3NldHMsIHBlcl9MODE1LCBwZXJfTDUwNDUsIGF2Z19MNTA0NSkKCmBgYAoKIyMjIyMgVG90YWwKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSB0b3RhbCwgZmlsbCA9IERlc2lnQ29kZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwgd2lkdGggPSAwLjcpICsKICBnZW9tX3RleHQoCiAgICBhZXMobGFiZWwgPSBwZXJjZW50KHRvdGFsLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlRvdGFsIGdyYW50cyBhcyBwZXJjZW50YWdlIG9mIHRvdGFsIGV4cGVuZGl0dXJlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHRvdGFsLCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBGaWx0ZXJlZAoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IGZpbHRlcmVkLCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoZmlsdGVyZWQsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiRmlsdGVyZWQgZ3JhbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkZmlsdGVyZWQsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjIEF2ZXJhZ2UKCgpUaGlzIGRhdGEgcHJlc2VudGF0aW9uIGV4Y2x1ZGVzIHJlY29yZHMgd2hlcmUgZ3JhbnRzIGFyZSBncmVhdGVyIHRoYW4gdG90YWwgZXhwZW5kaXR1cmVzIChsb2dpY2FsbHkgaW1wb3NzaWJsZSkuCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gYXZnX0w1MDQ1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQoYXZnX0w1MDQ1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIkF2ZXJhZ2UgZ3JhbnRzIGFzIHBlcmNlbnRhZ2Ugb2YgdG90YWwgZXhwZW5kaXR1cmVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkYXZnX0w1MDQ1LCBuYS5ybSA9IFRSVUUpICogMS4xNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iCiAgKQoKYGBgCgojIyMjIyBQcm9ibGVtIHJhdGUKCmBgYCB7cn0KCmdncGxvdChkZl9kaXNwX2V4cCwgYWVzKHggPSBmYWN0b3IoeWVhciksIHkgPSBwcm9ibGVtX3JhdGUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwcm9ibGVtX3JhdGUsIGFjY3VyYWN5ID0gMC4xKSksCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC44KSwKICAgIHZqdXN0ID0gMC40LCBoanVzdCA9IC0wLjEsCiAgICBhbmdsZSA9IDkwLAogICAgc2l6ZSA9IDMKICApICsKICBsYWJzKAogICAgc3VidGl0bGUgPSAiUGVyY2VudGFnZSBvZiByZWNvcmRzIHdpdGggZ3JhbnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHByb2JsZW1fcmF0ZSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBhc3NldCB2YWx1ZQoKYGBgIHtyfQoKZ2dwbG90KGRmX2Rpc3BfZXhwLCBhZXMoeCA9IGZhY3Rvcih5ZWFyKSwgeSA9IHBlcl9hc3NldHMsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfYXNzZXRzLCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgYXNzZXQgdmFsdWUgd2l0aCBncmFudHMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX2Fzc2V0cywgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKIyMjIyMgJSBMODE1CgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w4MTUsIGZpbGwgPSBEZXNpZ0NvZGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksIHdpZHRoID0gMC43KSArCiAgZ2VvbV90ZXh0KAogICAgYWVzKGxhYmVsID0gcGVyY2VudChwZXJfTDgxNSwgYWNjdXJhY3kgPSAwLjEpKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLAogICAgdmp1c3QgPSAwLjQsIGhqdXN0ID0gLTAuMSwKICAgIGFuZ2xlID0gOTAsCiAgICBzaXplID0gMwogICkgKwogIGxhYnMoCiAgICBzdWJ0aXRsZSA9ICJQZXJjZW50YWdlIG9mIHRvdGFsIEw4MTUgdmFsdWUgd2l0aCBncmFudHMgaXNzdWVzIiwKICAgIHggPSBOVUxMLAogICAgeSA9IE5VTEwsCiAgICBmaWxsID0gTlVMTAogICkgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCBtYXgoZGZfZGlzcF9leHAkcGVyX0w4MTUsIG5hLnJtID0gVFJVRSkgKiAxLjE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIKICApCgpgYGAKCiMjIyMjICUgZ3JhbnRzIHZhbHVlCgpgYGAge3J9CgpnZ3Bsb3QoZGZfZGlzcF9leHAsIGFlcyh4ID0gZmFjdG9yKHllYXIpLCB5ID0gcGVyX0w1MDQ1LCBmaWxsID0gRGVzaWdDb2RlKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCB3aWR0aCA9IDAuNykgKwogIGdlb21fdGV4dCgKICAgIGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyX0w1MDQ1LCBhY2N1cmFjeSA9IDAuMSkpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCksCiAgICB2anVzdCA9IDAuNCwgaGp1c3QgPSAtMC4xLAogICAgYW5nbGUgPSA5MCwKICAgIHNpemUgPSAzCiAgKSArCiAgbGFicygKICAgIHN1YnRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgdG90YWwgZ3JhbnRzIHZhbHVlIHdpdGggZ3JhbnRzIGlzc3VlcyIsCiAgICB4ID0gTlVMTCwKICAgIHkgPSBOVUxMLAogICAgZmlsbCA9IE5VTEwKICApICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgbWF4KGRmX2Rpc3BfZXhwJHBlcl9MNTA0NSwgbmEucm0gPSBUUlVFKSAqIDEuMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIgogICkKCmBgYAoKCgoKYGBgIHtyIGNsZWFudXB9Cgojcm0oZGZfYWdnX2Rpc2J1cnNlbWVudHMsIGRmX2Rpc2J1cnNlbWVudF9leHBlbmRpdHVyZXMsIGRmX2Rpc3BfZXhwX2FnZywgCiMgICBkZl9kaXNwX2V4cF9tZWFuLCBkZl9mZG5fZ3Jvd3RoLCBkZl9maWxpbmdfcmF0ZSwgZGZfbDU5MDBfc3VtbWFyeSwgCiMgICBkZl9sNTkwMF9zdW1tYXJ5XzIsIGRmX2xvbmdpdHVkaW5hbF9kaXNidXJzZW1lbnRzLCBkZl9tZWRpYW5fZGlzYnVyc2VtZW50cywKIyAgIGRmX25vbl9jaGFyX2Fzc2V0cywgZGZfbm9uX2NoYXJfYXNzZXRzXzIpCgpgYGA=