Research Question &
Response Variable
What is your research question and your response variable? Give a
detailed answer.
In this case, our research goal is to assess the individual and
interactive effects of post-operative analgesia (POPM), physical therapy
frequency (PTF), mobilization timing (TM), and patient education (PEP)
on the recovery time of surgical patients. As such, our response
variable is defined as the number of days required for a patient to
return to clinical baseline following a common operative procedure.
Factors, Levels, and
Design Choice
List your factors and their levels. What is your design choice?
Discuss any constraints or restrictions on randomization. Report your
design table which includes run randomization. Discuss how you should
employ randomization and blocking in this experiment.
The factors in this experiment are intended to examine differences in
two approaches for four common clinical situations encountered during
the course of surgical rehabilitation. For post-operative analgesia
(POPM), patients were assigned to receive non-opioid (NSAID &
acetaminophen cycling) or opioid analgesia (oxycodone). For physical
therapy frequency (PTF), patients were enrolled in either daily or
alternating (every other day) physical therapy sessions. Additionally,
for mobilization timing (TM), patients were instructed to begin physical
therapy sessions either 24 (rapid) or 72 hours (delayed) post-procedure.
Lastly, for patient education (PEP), patients were provided with two
common forms of clinical education: pamphlets or audiovisual
instruction.
For this trial, a complete 2^4 factorial was employed. Notably,
baseline physical health has been shown to have a profound impact on
surgical recovery time. To mitigate this variability we employed a
randomized complete block design, grouping participants into three
blocks: poor, fair, and good physical health. This constraint was
necessary because baseline health condition could not be randomly
assigned, as it could lead to confounded results. Consequently, all 16
treatment conditions were performed across each of the three blocks,
resulting in 48 total experimental runs. Patients were randomly assigned
to each of the 16 conditions within each block, ensuring that any
external factors were balanced across all treatment levels.
Analysis Results
Write a comprehensive paragraph on the results of your statistical
analysis. Use APA style. Refer to the interaction plots if
necessary.
A 2⁴ factorial ANOVA with blocking was conducted to examine the
effects of post-operative pain management protocol (POPM), physical
therapy frequency (PTF), timing of mobilization (TM), and type of
patient education (PEP) on patient recovery time (days), controlling for
baseline health status (Block). The overall model was statistically
significant, F(17, 30) = 16.94, p < .001. Blocking on baseline health
was highly significant, F(2, 30) = 66.27, p < .001, confirming that
patients’ pre-surgical health status substantially influenced recovery
time and that blocking was a necessary and effective design choice. The
main effect of pain management protocol was significant, F(1, 30) =
37.17, p < .001, as was physical therapy frequency, F(1, 30) = 20.14,
p < .001, and patient education, F(1, 30) = 6.69, p = .015. The most
notable finding was the highly significant Pain Management × PT
Frequency interaction, F(1, 30) = 74.85, p < .001, indicating that
the effect of pain management on recovery time depends on the frequency
of physical therapy received. As shown in the stratified interaction
plots, this crossing pattern was consistent across all three baseline
health groups, suggesting the interaction is robust and not driven by
any particular patient subgroup. Additionally, a significant three-way
interaction among pain management, mobilization timing, and patient
education was observed, F(1, 30) = 7.14, p = .012. Timing of
mobilization alone did not reach significance, F(1, 30) = 1.14, p =
.295. Since Timing of Mobilization and Patient Education had the weakest
interaction An interaction plot was split into health blocks. This
showed that Poor Health block had a significant interaction between
Mobilization and Patient Eduacation where as good health the lines are
parallel.
Response : response
Df Sum Sq Mean Sq F value Pr(>F)
MODEL 17 65.382 3.8460 16.9385 6.105e-11 ***
Block 2 30.096 15.0479 66.2740 9.820e-12 ***
POPM 1 8.440 8.4399 37.1712 1.064e-06 ***
PTF 1 4.573 4.5732 20.1414 9.847e-05 ***
POPM:PTF 1 16.994 16.9943 74.8466 1.192e-09 ***
TM 1 0.258 0.2578 1.1356 0.29509
POPM:TM 1 0.719 0.7186 3.1650 0.08537 .
PTF:TM 1 0.325 0.3246 1.4298 0.24116
POPM:PTF:TM 1 0.262 0.2621 1.1544 0.29120
PEP 1 1.518 1.5184 6.6875 0.01481 *
POPM:PEP 1 0.065 0.0648 0.2852 0.59723
PTF:PEP 1 0.180 0.1797 0.7912 0.38081
POPM:PTF:PEP 1 0.197 0.1967 0.8664 0.35940
TM:PEP 1 0.000 0.0001 0.0005 0.98183
POPM:TM:PEP 1 1.621 1.6206 7.1373 0.01208 *
PTF:TM:PEP 1 0.131 0.1306 0.5751 0.45417
POPM:PTF:TM:PEP 1 0.004 0.0043 0.0191 0.89096
RESIDUALS 30 6.812 0.2271
CORRECTED TOTAL 47 72.193
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1







[1] 0.1384528
-- gpr: Power Analysis for F-tests -----------------------------
Test: anova.fixed.special
Analysis: Post Hoc: Compute achieved power
------------------------------------------------------------------
Effect size (f): 0.1385
Alpha (α): 0.050000
Power (1-β): 0.1555782
Beta (β): 0.8444
Noncentrality (λ): 0.9201199
Critical F: 4.0517487
Numerator df: 1
Denominator df: 46
Sample size per group: 24
Total sample size: 48
------------------------------------------------------------------


Power
Calculate the post-hoc power for this design. Use the effect size
from your output.
The four-way interaction effect size is eta2=0.1384528.
Degrees of freedom for the power calculation is df=1.
With a Cohen’s F of 0.1385 the achived power for this experiment is
only 0.1557. This mean WE achieved a power of 15.57%. This design was
extremely underpowered for detecting the four-way interaction.This means
that even if the four-way interaction truly exists, this design would
fail to detect it approximately 84% of the time. Future designs should
conduct an a priori power analysis to determine the required sample size
before data collection
Residual Analysis
Are your assumptions met? Use the plots to support your argument.
The residual histogram shows a relatively normal distribution, albeit
with a slight left skew. However, the skew is not enough to violate
assumptions of normality.
Residuals across all three health blocks appear randomly scattered
around zero with no systematic trends across run order, suggesting the
independence and constant variance assumptions are reasonably met. The
slightly greater spread in the Poor Health block is consistent with the
clinical expectation that patients in poor baseline health exhibit more
variable recovery trajectories.


Factorial
Regularities
Do the results of your factorial experiment display sparsity,
heredity, and hierarchy? Support your answer with your results.
Of the total 15 effects, only 6 show a significant result, indicating
sparsity. These significant effects are from POPM, PTF, and PEP for main
effects, and POPM:PTF, POPM:TM, POMP:TM:PEP for interaction effects. Of
the main effects, POMP and PTF are significant with p < .001 , while
PEP is significant at the p = .05 level. The POPM:PTF interaction is
significant with p < .001, POPM:TM is significant at the p = 0.1
level, and POPM:TM:PEP is significant at the p = .05 level. Here we see
hierarchy at play, as main effects are larger overall than interaction
effects are. Finally, within the interaction effects, all have at least
one significant parent term included, indicating heredity.
Limitations & What
You’d Do Next
Discuss issues you see with this design. Do you have issues with
Confounding effects? Are there design weaknesses? Give follow up
experiment ideas.
Patient education was reduced to pamphlets versus audiovisual
instruction, omitting potentially important delivery factors such as
health literacy, language barriers, family involvement, and patient
engagement. Second, the design does not account for patient compliance a
patient assigned to daily physical therapy may not attend all sessions,
and a patient receiving audiovisual education may not engage with it
meaningfully. This creats a gap between assigned and received treatment
that could bias results toward the null. Third, mobilization timing
failed to reach significance despite strong clinical evidence from
Enhanced Recovery After Surgery (ERAS) protocols supporting early
mobilization as one of the most impactful post-surgical interventions.
This may reflect insufficient power with only 16 observations per block
to detect its effect at the chosen effect size.
For follow-up work, a response surface methodology (RSM) design could
optimize the significant factors beyond binary levels identifying the
ideal PT frequency and analgesia dosing combination that minimizes
recovery time. Future studies should also consider a split-plot design
if analgesia protocols are set at the ward level rather than
individually assigned, as this would better reflect real clinical
workflow. Expanding the blocking structure to include additional patient
characteristics such as age group or surgical complexity would further
strengthen internal validity and generalizability
LS0tCnRpdGxlOiAiU1RBMzIwIEZpbmFsIEV4YW0gVGVhbSAyIgphdXRob3I6ICJTdGV2ZSBKZWFuLUJhcHRpc3RlLCBKYW1lcyBTYW5kZXJzLCBHYWxlZSBHcmVpc2xlciIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHllcwogICAgdGhlbWU6IGx1bWVuCiAgcGRmX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfd2lkdGg6IDMKICAgIGZpZ19oZWlnaHQ6IDMKICB3b3JkX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KI1RPQzo6YmVmb3JlIHsKICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IG5hdnk7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwp9CgpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogc3lzdGVtLXVpOwogIGNvbG9yOiBuYXZ5OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE0cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLwouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7CiAgY29udGVudDogIi4iOwoKYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9CgpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKfQpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEYsIGNvbW1lbnQ9TkEsIHdhcm5pbmc9RikKCiMgU2V0dXAgYW5kIERlc2lnbiBEZWZpbml0aW9uCmlmKCFyZXF1aXJlKGdwcikpIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1Yigic3RldmVqYjEvZ3ByIikKIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShlZmZlY3RzKSAgICAjIEZvciBpbnRlcmFjdGlvbiBwbG90cwpsaWJyYXJ5KHNhc0xNKQpsaWJyYXJ5KEZyRjIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZWZmZWN0c2l6ZSkKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGdwcikKCmBgYAoKIyBSZXNlYXJjaCBRdWVzdGlvbiAmIFJlc3BvbnNlIFZhcmlhYmxlCgpXaGF0IGlzIHlvdXIgcmVzZWFyY2ggcXVlc3Rpb24gYW5kIHlvdXIgcmVzcG9uc2UgdmFyaWFibGU/IEdpdmUgYSBkZXRhaWxlZCBhbnN3ZXIuCgpJbiB0aGlzIGNhc2UsIG91ciByZXNlYXJjaCBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgaW5kaXZpZHVhbCBhbmQgaW50ZXJhY3RpdmUgZWZmZWN0cyBvZiBwb3N0LW9wZXJhdGl2ZSBhbmFsZ2VzaWEgKFBPUE0pLCBwaHlzaWNhbCB0aGVyYXB5IGZyZXF1ZW5jeSAoUFRGKSwgbW9iaWxpemF0aW9uIHRpbWluZyAoVE0pLCBhbmQgcGF0aWVudCBlZHVjYXRpb24gKFBFUCkgb24gdGhlIHJlY292ZXJ5IHRpbWUgb2Ygc3VyZ2ljYWwgcGF0aWVudHMuIEFzIHN1Y2gsIG91ciByZXNwb25zZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgZGF5cyByZXF1aXJlZCBmb3IgYSBwYXRpZW50IHRvIHJldHVybiB0byBjbGluaWNhbCBiYXNlbGluZSBmb2xsb3dpbmcgYSBjb21tb24gb3BlcmF0aXZlIHByb2NlZHVyZS4KCiMgRmFjdG9ycywgTGV2ZWxzLCBhbmQgRGVzaWduIENob2ljZQoKTGlzdCB5b3VyIGZhY3RvcnMgYW5kIHRoZWlyIGxldmVscy4gV2hhdCBpcyB5b3VyIGRlc2lnbiBjaG9pY2U/IERpc2N1c3MgYW55IGNvbnN0cmFpbnRzIG9yIHJlc3RyaWN0aW9ucyBvbiByYW5kb21pemF0aW9uLiBSZXBvcnQgeW91ciBkZXNpZ24gdGFibGUgd2hpY2ggaW5jbHVkZXMgcnVuIHJhbmRvbWl6YXRpb24uIERpc2N1c3MgaG93IHlvdSBzaG91bGQgZW1wbG95IHJhbmRvbWl6YXRpb24gYW5kIGJsb2NraW5nIGluIHRoaXMgZXhwZXJpbWVudC4KClRoZSBmYWN0b3JzIGluIHRoaXMgZXhwZXJpbWVudCBhcmUgaW50ZW5kZWQgdG8gZXhhbWluZSBkaWZmZXJlbmNlcyBpbiB0d28gYXBwcm9hY2hlcyBmb3IgZm91ciBjb21tb24gY2xpbmljYWwgc2l0dWF0aW9ucyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGNvdXJzZSBvZiBzdXJnaWNhbCByZWhhYmlsaXRhdGlvbi4gRm9yIHBvc3Qtb3BlcmF0aXZlIGFuYWxnZXNpYSAoUE9QTSksIHBhdGllbnRzIHdlcmUgYXNzaWduZWQgdG8gcmVjZWl2ZSBub24tb3Bpb2lkIChOU0FJRCAmIGFjZXRhbWlub3BoZW4gY3ljbGluZykgb3Igb3Bpb2lkIGFuYWxnZXNpYSAob3h5Y29kb25lKS4gRm9yIHBoeXNpY2FsIHRoZXJhcHkgZnJlcXVlbmN5IChQVEYpLCBwYXRpZW50cyB3ZXJlIGVucm9sbGVkIGluIGVpdGhlciBkYWlseSBvciBhbHRlcm5hdGluZyAoZXZlcnkgb3RoZXIgZGF5KSBwaHlzaWNhbCB0aGVyYXB5IHNlc3Npb25zLiBBZGRpdGlvbmFsbHksIGZvciBtb2JpbGl6YXRpb24gdGltaW5nIChUTSksIHBhdGllbnRzIHdlcmUgaW5zdHJ1Y3RlZCB0byBiZWdpbiBwaHlzaWNhbCB0aGVyYXB5IHNlc3Npb25zIGVpdGhlciAyNCAocmFwaWQpIG9yIDcyIGhvdXJzIChkZWxheWVkKSBwb3N0LXByb2NlZHVyZS4gTGFzdGx5LCBmb3IgcGF0aWVudCBlZHVjYXRpb24gKFBFUCksIHBhdGllbnRzIHdlcmUgcHJvdmlkZWQgd2l0aCB0d28gY29tbW9uIGZvcm1zIG9mIGNsaW5pY2FsIGVkdWNhdGlvbjogcGFtcGhsZXRzIG9yIGF1ZGlvdmlzdWFsIGluc3RydWN0aW9uLgoKIApGb3IgdGhpcyB0cmlhbCwgYSBjb21wbGV0ZSAyXjQgZmFjdG9yaWFsIHdhcyBlbXBsb3llZC4gTm90YWJseSwgYmFzZWxpbmUgcGh5c2ljYWwgaGVhbHRoIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBwcm9mb3VuZCBpbXBhY3Qgb24gc3VyZ2ljYWwgcmVjb3ZlcnkgdGltZS4gVG8gbWl0aWdhdGUgdGhpcyB2YXJpYWJpbGl0eSB3ZSBlbXBsb3llZCBhIHJhbmRvbWl6ZWQgY29tcGxldGUgYmxvY2sgZGVzaWduLCBncm91cGluZyBwYXJ0aWNpcGFudHMgaW50byB0aHJlZSBibG9ja3M6IHBvb3IsIGZhaXIsIGFuZCBnb29kIHBoeXNpY2FsIGhlYWx0aC4gVGhpcyBjb25zdHJhaW50IHdhcyBuZWNlc3NhcnkgYmVjYXVzZSBiYXNlbGluZSBoZWFsdGggY29uZGl0aW9uIGNvdWxkIG5vdCBiZSByYW5kb21seSBhc3NpZ25lZCwgYXMgaXQgY291bGQgbGVhZCB0byBjb25mb3VuZGVkIHJlc3VsdHMuIENvbnNlcXVlbnRseSwgYWxsIDE2IHRyZWF0bWVudCBjb25kaXRpb25zIHdlcmUgcGVyZm9ybWVkIGFjcm9zcyBlYWNoIG9mIHRoZSB0aHJlZSBibG9ja3MsIHJlc3VsdGluZyBpbiA0OCB0b3RhbCBleHBlcmltZW50YWwgcnVucy4gUGF0aWVudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCB0byBlYWNoIG9mIHRoZSAxNiBjb25kaXRpb25zIHdpdGhpbiBlYWNoIGJsb2NrLCBlbnN1cmluZyB0aGF0IGFueSBleHRlcm5hbCBmYWN0b3JzIHdlcmUgYmFsYW5jZWQgYWNyb3NzIGFsbCB0cmVhdG1lbnQgbGV2ZWxzLgoKYGBge3IgZGVzaWduLCBpbmNsdWRlPUZ9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZWZpbmUgRmFjdG9ycyBhbmQgTGV2ZWxzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXQuc2VlZCgxMjMpICMgUmVwcm9kdWNpYmlsaXR5CiMgRXhhbXBsZTogMl40IGZhY3RvcmlhbCB3aXRoIG9wdGlvbmFsIGJsb2NraW5nCgpiYXNlX2Rlc2lnbiA8LSBleHBhbmQuZ3JpZCgKICBQT1BNID0gYygiTG93IiwgIkhpZ2giKSwKICBQVEYgPSBjKCJMb3ciLCAiSGlnaCIpLAogIFRNID0gYygiTG93IiwgIkhpZ2giKSwKICBQRVAgPSBjKCJMb3ciLCAiSGlnaCIpCikKCiNDcmVhdGUgYmxvY2tpbmcgdmFyaWFibGUgb24gcmVwbGljYXRpb24KCmRlc2lnbiA8LSBiYXNlX2Rlc2lnbltyZXAoMTpucm93KGJhc2VfZGVzaWduKSwgdGltZXMgPSAzKSwgXQoKZGVzaWduJEJsb2NrIDwtIHJlcChjKCJQb29yIEhlYWx0aCIsICJGYWlyIEhlYWx0aCIsICJHb29kIEhlYWx0aCIpLCAKICAgICAgICAgICAgICAgICAgICBlYWNoID0gbnJvdyhiYXNlX2Rlc2lnbikpCgojcmFuZG9taXphdGlvbiB3aXRoaW4gYmxvY2sKCmRlc2lnbiA8LSBkZXNpZ24gJT4lCiAgZ3JvdXBfYnkoQmxvY2spICU+JQogIG11dGF0ZShSdW5PcmRlciA9IHNhbXBsZSgxOm4oKSkpICU+JQogIHVuZ3JvdXAoKQoKZGVzaWduIDwtIGRlc2lnbiAlPiUKICBhcnJhbmdlKEJsb2NrLCBSdW5PcmRlcikgJT4lCiAgbXV0YXRlKEdsb2JhbFJ1biA9IHJvd19udW1iZXIoKSkKCgpkZXNpZ24gJT4lCiAga2JsKGNhcHRpb249IjJeNCBVbnJlcGxpY2F0ZWQgRmFjdG9yaWFsLVJhbmRvbWl6YXRpb24gU2NoZWR1bGUiLCBhbGlnbj0iYyIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aD1GKSAlPiUKICBjb2x1bW5fc3BlYyg1LCB3aWR0aD0iM2NtIikKYGBgCgpgYGB7ciBzaW11bGF0aW9uIGRhdGEsIGluY2x1ZGU9Rn0Kc2V0LnNlZWQoMTIzKSAjIFJlcHJvZHVjaWJpbGl0eQojIFNpbXVsYXRlIFJlc3BvbnNlIERhdGEKIyBEZWZpbmUgdHJ1ZSBlZmZlY3RzCm11ID0gNi40CmVmZmVjdF9BID0gLjUKZWZmZWN0X0IgPSAtLjMKZWZmZWN0X0MgPSAwCmVmZmVjdF9EID0gLS4xCmludGVyYWN0aW9uX0FCID0gLjYKaW50ZXJhY3Rpb25fQUNEID0gLS4yCgojIENvbnZlcnQgZmFjdG9ycyB0byBpbmRpY2F0b3JzCnNpbSA9IGRlc2lnbiAlPiUKICBtdXRhdGUoCiAgICBBID0gaWZlbHNlKFBPUE0gPT0gIkhpZ2giLCAxLCAtMSksCiAgICBCID0gaWZlbHNlKFBURiA9PSAiSGlnaCIsIDEsIC0xKSwKICAgIEMgPSBpZmVsc2UoVE0gPT0gIkhpZ2giLCAxLCAtMSksCiAgICBEID0gaWZlbHNlKFBFUCA9PSAiSGlnaCIsIDEsIC0xKSAgIAogICkKCiMgQmxvY2sgZWZmZWN0cyAoLjcgRGF5cyBSZW1vdmVkICBmb3IgR29vZCBhbmQgMSBEYXlzIGFkZGVkIGZvciBQb29yIEZyb20gbXUpCmJsb2NrX2VmZmVjdCA8LSBjKCJQb29yIEhlYWx0aCIgPSAxLCAiRmFpciBIZWFsdGgiID0gMCwgIkdvb2QgSGVhbHRoIiA9IC0wLjcpCgoKIyBHZW5lcmF0ZSByZXNwb25zZQpzaW0kcmVzcG9uc2UgPSBtdSArCiAgYmxvY2tfZWZmZWN0W2FzLmNoYXJhY3RlcihzaW0kQmxvY2spXSArCiAgZWZmZWN0X0EgKiBzaW0kQSArCiAgZWZmZWN0X0IgKiBzaW0kQiArCiAgZWZmZWN0X0MgKiBzaW0kQyArCiAgZWZmZWN0X0QgKiBzaW0kRCArIAogIGludGVyYWN0aW9uX0FCICogc2ltJEEgKiBzaW0kQiArCiAgaW50ZXJhY3Rpb25fQUNEICogc2ltJEEgKiBzaW0kQyAqIHNpbSREICsKICBybm9ybShucm93KHNpbSksIG1lYW4gPSAwLCBzZCA9IC41KQoKYGBgCgojIEFuYWx5c2lzIFJlc3VsdHMKCldyaXRlIGEgY29tcHJlaGVuc2l2ZSBwYXJhZ3JhcGggb24gdGhlIHJlc3VsdHMgb2YgeW91ciBzdGF0aXN0aWNhbCBhbmFseXNpcy4gVXNlIEFQQSBzdHlsZS4gUmVmZXIgdG8gdGhlIGludGVyYWN0aW9uIHBsb3RzIGlmIG5lY2Vzc2FyeS4KCgpBIDLigbQgZmFjdG9yaWFsIEFOT1ZBIHdpdGggYmxvY2tpbmcgd2FzIGNvbmR1Y3RlZCB0byBleGFtaW5lIHRoZSBlZmZlY3RzIG9mIHBvc3Qtb3BlcmF0aXZlIHBhaW4gbWFuYWdlbWVudCBwcm90b2NvbCAoUE9QTSksIHBoeXNpY2FsIHRoZXJhcHkgZnJlcXVlbmN5IChQVEYpLCB0aW1pbmcgb2YgbW9iaWxpemF0aW9uIChUTSksIGFuZCB0eXBlIG9mIHBhdGllbnQgZWR1Y2F0aW9uIChQRVApIG9uIHBhdGllbnQgcmVjb3ZlcnkgdGltZSAoZGF5cyksIGNvbnRyb2xsaW5nIGZvciBiYXNlbGluZSBoZWFsdGggc3RhdHVzIChCbG9jaykuIFRoZSBvdmVyYWxsIG1vZGVsIHdhcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LCBGKDE3LCAzMCkgPSAxNi45NCwgcCA8IC4wMDEuIEJsb2NraW5nIG9uIGJhc2VsaW5lIGhlYWx0aCB3YXMgaGlnaGx5IHNpZ25pZmljYW50LCBGKDIsIDMwKSA9IDY2LjI3LCBwIDwgLjAwMSwgY29uZmlybWluZyB0aGF0IHBhdGllbnRzJyBwcmUtc3VyZ2ljYWwgaGVhbHRoIHN0YXR1cyBzdWJzdGFudGlhbGx5IGluZmx1ZW5jZWQgcmVjb3ZlcnkgdGltZSBhbmQgdGhhdCBibG9ja2luZyB3YXMgYSBuZWNlc3NhcnkgYW5kIGVmZmVjdGl2ZSBkZXNpZ24gY2hvaWNlLiBUaGUgbWFpbiBlZmZlY3Qgb2YgcGFpbiBtYW5hZ2VtZW50IHByb3RvY29sIHdhcyBzaWduaWZpY2FudCwgRigxLCAzMCkgPSAzNy4xNywgcCA8IC4wMDEsIGFzIHdhcyBwaHlzaWNhbCB0aGVyYXB5IGZyZXF1ZW5jeSwgRigxLCAzMCkgPSAyMC4xNCwgcCA8IC4wMDEsIGFuZCBwYXRpZW50IGVkdWNhdGlvbiwgRigxLCAzMCkgPSA2LjY5LCBwID0gLjAxNS4gVGhlIG1vc3Qgbm90YWJsZSBmaW5kaW5nIHdhcyB0aGUgaGlnaGx5IHNpZ25pZmljYW50IFBhaW4gTWFuYWdlbWVudCDDlyBQVCBGcmVxdWVuY3kgaW50ZXJhY3Rpb24sIEYoMSwgMzApID0gNzQuODUsIHAgPCAuMDAxLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGVmZmVjdCBvZiBwYWluIG1hbmFnZW1lbnQgb24gcmVjb3ZlcnkgdGltZSBkZXBlbmRzIG9uIHRoZSBmcmVxdWVuY3kgb2YgcGh5c2ljYWwgdGhlcmFweSByZWNlaXZlZC4gQXMgc2hvd24gaW4gdGhlIHN0cmF0aWZpZWQgaW50ZXJhY3Rpb24gcGxvdHMsIHRoaXMgY3Jvc3NpbmcgcGF0dGVybiB3YXMgY29uc2lzdGVudCBhY3Jvc3MgYWxsIHRocmVlIGJhc2VsaW5lIGhlYWx0aCBncm91cHMsIHN1Z2dlc3RpbmcgdGhlIGludGVyYWN0aW9uIGlzIHJvYnVzdCBhbmQgbm90IGRyaXZlbiBieSBhbnkgcGFydGljdWxhciBwYXRpZW50IHN1Ymdyb3VwLiBBZGRpdGlvbmFsbHksIGEgc2lnbmlmaWNhbnQgdGhyZWUtd2F5IGludGVyYWN0aW9uIGFtb25nIHBhaW4gbWFuYWdlbWVudCwgbW9iaWxpemF0aW9uIHRpbWluZywgYW5kIHBhdGllbnQgZWR1Y2F0aW9uIHdhcyBvYnNlcnZlZCwgRigxLCAzMCkgPSA3LjE0LCBwID0gLjAxMi4gVGltaW5nIG9mIG1vYmlsaXphdGlvbiBhbG9uZSBkaWQgbm90IHJlYWNoIHNpZ25pZmljYW5jZSwgRigxLCAzMCkgPSAxLjE0LCBwID0gLjI5NS4KU2luY2UgVGltaW5nIG9mIE1vYmlsaXphdGlvbiBhbmQgUGF0aWVudCBFZHVjYXRpb24gaGFkIHRoZSB3ZWFrZXN0IGludGVyYWN0aW9uIEFuIGludGVyYWN0aW9uIHBsb3Qgd2FzIHNwbGl0IGludG8gaGVhbHRoIGJsb2Nrcy4gVGhpcyBzaG93ZWQgdGhhdCBQb29yIEhlYWx0aCBibG9jayBoYWQgYSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiBiZXR3ZWVuIE1vYmlsaXphdGlvbiBhbmQgUGF0aWVudCBFZHVhY2F0aW9uIHdoZXJlIGFzIGdvb2QgaGVhbHRoIHRoZSBsaW5lcyBhcmUgcGFyYWxsZWwuCgpgYGB7ciBBTk9WQSwgaW5jbHVkZT1UfQoKIyBGYWN0b3JpYWwgQU5PVkEgCmFvdjEocmVzcG9uc2UgfiBCbG9jayArIFBPUE0gKiBQVEYgKiBUTSAqIFBFUCwgc2ltKQoKCm1vZGVsID0gbG0ocmVzcG9uc2UgfiBCbG9jayArIFBPUE0gKiBQVEYgKiBUTSAqIFBFUCwgZGF0YSA9IHNpbSkKYW92ID0gYW92KG1vZGVsKQoKCgpgYGAKCmBgYHtyIHBsb3RzLCBpbmNsdWRlPVR9CgojIEludGVyYWN0aW9uIFBsb3RzCgpwYXIobWZyb3cgPSBjKDEsIDEpKQoKIyBCYXNlIFIgaW50ZXJhY3Rpb24gcGxvdAojQUIKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQVEYsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQYWluIE1hbmFnZW1lbnQgw5cgUFQgRnJlcXVlbmN5IiwKICB4bGFiID0gIlBhaW4gTWFuYWdlbWVudCBQcm90b2NvbCIsCiAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICB0cmFjZS5sYWJlbCA9ICJQVCBGcmVxdWVuY3kiLAogIHR5cGUgPSAiYiIsCiAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICBwY2ggPSBjKDE5LCAxNykKKQojQUMKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRUTSwKICByZXNwb25zZSA9IHNpbSRyZXNwb25zZSwKICBtYWluID0gIlBhaW4gTWFuYWdlbWVudCDDlyBUaW1pbmcgb2YgTW9iaWxpemF0aW9uIiwKICB4bGFiID0gIlBhaW4gTWFuYWdlbWVudCBQcm90b2NvbCIsCiAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICB0cmFjZS5sYWJlbCA9ICJNb2JpbGl6YXRpb24iLAogIHR5cGUgPSAiYiIsCiAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICBwY2ggPSBjKDE5LCAxNykKKQojQUQKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQYWluIE1hbmFnZW1lbnQgw5cgUGF0aWVudCBFZHVjYXRpb24iLAogIHhsYWIgPSAiUGFpbiBNYW5hZ2VtZW50IFByb3RvY29sIiwKICB5bGFiID0gIk1lYW4gUmVjb3ZlcnkgVGltZSAoZGF5cykiLAogIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgdHlwZSA9ICJiIiwKICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLAogIHBjaCA9IGMoMTksIDE3KQopCiNCQwppbnRlcmFjdGlvbi5wbG90KAogIHguZmFjdG9yID0gc2ltJFBURiwKICB0cmFjZS5mYWN0b3IgPSBzaW0kVE0sCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQVCBGcmVxdWVuY3kgw5cgVGltaW5nIG9mIE1vYmlsaXphdGlvbiIsCiAgeGxhYiA9ICJQVCBGcmVxdWVuY3kiLAogIHlsYWIgPSAiTWVhbiBSZWNvdmVyeSBUaW1lIChkYXlzKSIsCiAgdHJhY2UubGFiZWwgPSAiTW9iaWxpemF0aW9uIiwKICB0eXBlID0gImIiLAogIGNvbCA9IGMoImJsdWUiLCAicmVkIiksCiAgcGNoID0gYygxOSwgMTcpCikKI0JECmludGVyYWN0aW9uLnBsb3QoCiAgeC5mYWN0b3IgPSBzaW0kUFRGLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQVCBGcmVxdWVuY3kgw5cgUGF0aWVudCBFZHVjYXRpb24iLAogIHhsYWIgPSAiUFQgRnJlcXVlbmN5IiwKICB5bGFiID0gIk1lYW4gUmVjb3ZlcnkgVGltZSAoZGF5cykiLAogIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgdHlwZSA9ICJiIiwKICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLAogIHBjaCA9IGMoMTksIDE3KQopCiNDRAppbnRlcmFjdGlvbi5wbG90KAogIHguZmFjdG9yID0gc2ltJFRNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJUaW1pbmcgb2YgTW9iaWxpemF0aW9uIMOXIFBhdGllbnQgRWR1Y2F0aW9uIiwKICB4bGFiID0gIlRpbWluZyBvZiBNb2JpbGl6YXRpb24iLAogIHlsYWIgPSAiTWVhbiBSZWNvdmVyeSBUaW1lIChkYXlzKSIsCiAgdHJhY2UubGFiZWwgPSAiRWR1Y2F0aW9uIiwKICB0eXBlID0gImIiLAogIGNvbCA9IGMoImJsdWUiLCAicmVkIiksCiAgcGNoID0gYygxOSwgMTcpCikKCnBhcihtYXIgPSBjKDUsIDQsIDQsIDYpKQojIEFCIGludGVyYWN0aW9uIGJ5IGJsb2NrCnBhcihtZnJvdyA9IGMoMSwgMykpCgpmb3IoYmxvY2sgaW4gYygiUG9vciBIZWFsdGgiLCAiRmFpciBIZWFsdGgiLCAiR29vZCBIZWFsdGgiKSl7CiAgaW50ZXJhY3Rpb24ucGxvdCgKICAgIHguZmFjdG9yID0gc2ltJFRNW3NpbSRCbG9jayA9PSBibG9ja10sCiAgICB0cmFjZS5mYWN0b3IgPSBzaW0kUEVQW3NpbSRCbG9jayA9PSBibG9ja10sCiAgICByZXNwb25zZSA9IHNpbSRyZXNwb25zZVtzaW0kQmxvY2sgPT0gYmxvY2tdLAogICAgbWFpbiA9IHBhc3RlKCJNb2JpbGl6YXRpb24gw5cgUGF0aWVudCBFZHVjYXRpb25cbiIsIGJsb2NrKSwKICAgIHhsYWIgPSAiVGltZSBvZiBNb2JpbGl6YXRpb24iLAogICAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICAgIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgICB0eXBlID0gImIiLAogICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICAgIHBjaCA9IGMoMTksIDE3KQogICkKfQoKCmBgYAoKYGBge3IgcG93ZXJ9CiNFZmZlY3Qgc2l6ZSBmcm9tIEFOT1ZBIG5lZWRlZCBmb3IgcG93ZXIKZWZmc2l6ZT1ldGFfc3F1YXJlZChhb3YpCiNmb3VyLndheS5pbnRlcmFjdGlvbi5lZmZlY3Q9ZWZmc2l6ZVsxNSwyXQojQ29udmVydCBldGEgc3F1YXJlZCB0byBDb2hlbidzIGYgZm9yIHBvc3QgaG9jIHBvd2VyIGNhbGMKRT1ldGEyX3RvX2YoZWZmc2l6ZVsxNSwyXSkKCnByaW50KEUpCgpncHJfZnRlc3QoCiAgdGVzdCA9ICJhbm92YS5maXhlZC5zcGVjaWFsIiwKICBhbmFseXNpcyA9ICJwb3N0X2hvYyIsCiAgZWZmZWN0X3NpemUgPSBFLAogIG4gPSA0OCwKICBhbHBoYSA9IDAuMDUsCiAgbnVtX2RmID0gMSwKICBncm91cHMgPSAzCikKCmBgYAoKIyBQb3dlcgoKQ2FsY3VsYXRlIHRoZSBwb3N0LWhvYyBwb3dlciBmb3IgdGhpcyBkZXNpZ24uIFVzZSB0aGUgZWZmZWN0IHNpemUgZnJvbSB5b3VyIG91dHB1dC4KClRoZSBmb3VyLXdheSBpbnRlcmFjdGlvbiBlZmZlY3Qgc2l6ZSBpcyBldGFeMl49YHIgRWAuIERlZ3JlZXMgb2YgZnJlZWRvbSBmb3IgdGhlIHBvd2VyIGNhbGN1bGF0aW9uIGlzIGRmPTEuCgpXaXRoIGEgQ29oZW4ncyBGIG9mIDAuMTM4NSB0aGUgYWNoaXZlZCBwb3dlciBmb3IgdGhpcyBleHBlcmltZW50IGlzIG9ubHkgMC4xNTU3LiBUaGlzIG1lYW4gV0UgYWNoaWV2ZWQgYSBwb3dlciBvZiAxNS41NyUuIFRoaXMgZGVzaWduIHdhcyBleHRyZW1lbHkgdW5kZXJwb3dlcmVkIGZvciBkZXRlY3RpbmcgdGhlIGZvdXItd2F5IGludGVyYWN0aW9uLlRoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZSBmb3VyLXdheSBpbnRlcmFjdGlvbiB0cnVseSBleGlzdHMsIHRoaXMgZGVzaWduIHdvdWxkIGZhaWwgdG8gZGV0ZWN0IGl0IGFwcHJveGltYXRlbHkgODQlIG9mIHRoZSB0aW1lLiBGdXR1cmUgZGVzaWducyBzaG91bGQgY29uZHVjdCBhbiBhIHByaW9yaSBwb3dlciBhbmFseXNpcyB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHNhbXBsZSBzaXplIGJlZm9yZSBkYXRhIGNvbGxlY3Rpb24KCiMgUmVzaWR1YWwgQW5hbHlzaXMKCkFyZSB5b3VyIGFzc3VtcHRpb25zIG1ldD8gVXNlIHRoZSBwbG90cyB0byBzdXBwb3J0IHlvdXIgYXJndW1lbnQuCgpUaGUgcmVzaWR1YWwgaGlzdG9ncmFtIHNob3dzIGEgcmVsYXRpdmVseSBub3JtYWwgZGlzdHJpYnV0aW9uLCBhbGJlaXQgd2l0aCBhIHNsaWdodCBsZWZ0IHNrZXcuIEhvd2V2ZXIsIHRoZSBza2V3IGlzIG5vdCBlbm91Z2ggdG8gdmlvbGF0ZSBhc3N1bXB0aW9ucyBvZiBub3JtYWxpdHkuCgpSZXNpZHVhbHMgYWNyb3NzIGFsbCB0aHJlZSBoZWFsdGggYmxvY2tzIGFwcGVhciByYW5kb21seSBzY2F0dGVyZWQgYXJvdW5kIHplcm8gd2l0aCBubyBzeXN0ZW1hdGljIHRyZW5kcyBhY3Jvc3MgcnVuIG9yZGVyLCBzdWdnZXN0aW5nIHRoZSBpbmRlcGVuZGVuY2UgYW5kIGNvbnN0YW50IHZhcmlhbmNlIGFzc3VtcHRpb25zIGFyZSByZWFzb25hYmx5IG1ldC4gVGhlIHNsaWdodGx5IGdyZWF0ZXIgc3ByZWFkIGluIHRoZSBQb29yIEhlYWx0aCBibG9jayBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNsaW5pY2FsIGV4cGVjdGF0aW9uIHRoYXQgcGF0aWVudHMgaW4gcG9vciBiYXNlbGluZSBoZWFsdGggZXhoaWJpdCBtb3JlIHZhcmlhYmxlIHJlY292ZXJ5IHRyYWplY3Rvcmllcy4KCmBgYHtyIGFzc3VtcHRpb25zfQoKaGlzdChtb2RlbCRyZXNpZHVhbHMsIAogICAgIG1haW49IlJlc2lkdWFsIEhpc3RvZ3JhbSIsIAogICAgIHhsYWI9IlJlc2lkdWFscyIpCgpzaW0kQmxvY2sgPC0gZmFjdG9yKHNpbSRCbG9jaywgbGV2ZWxzID0gCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJQb29yIEhlYWx0aCIsICJGYWlyIEhlYWx0aCIsICJHb29kIEhlYWx0aCIpKQoKYmxvY2tfbGV2ZWxzIDwtIGxldmVscyhzaW0kQmxvY2spCnBsb3QoCiAgc2ltJEdsb2JhbFJ1biwKICBtb2RlbCRyZXNpZHVhbHMsCiAgY29sID0gYXMubnVtZXJpYyhzaW0kQmxvY2spLAogIHBjaCA9IDE5LAogIHlsYWIgPSAiUmVzaWR1YWxzIiwKICBtYWluID0gIlJlc2lkdWFscyB2cyBSdW4gT3JkZXIgKEJ5IEJsb2NrcykiLAogIHhheHQgPSAibiIKKQphYmxpbmUoaCA9IDAsIGx0eSA9IDIpCgpsZWdlbmQoCiAgeCA9ICJib3R0b20iLAogIGluc2V0ID0gYygwLCAtMC4zNSksCiAgbGVnZW5kID0gYmxvY2tfbGV2ZWxzLAogIGNvbCA9IDE6bGVuZ3RoKGJsb2NrX2xldmVscyksCiAgcGNoID0gMTksCiAgdGl0bGUgPSAiQmFzZWxpbmUgSGVhbHRoIiwKICBob3JpeiA9IFRSVUUsCiAgeHBkID0gVFJVRQopCmBgYAoKIyBGYWN0b3JpYWwgUmVndWxhcml0aWVzCgpEbyB0aGUgcmVzdWx0cyBvZiB5b3VyIGZhY3RvcmlhbCBleHBlcmltZW50IGRpc3BsYXkgc3BhcnNpdHksIGhlcmVkaXR5LCBhbmQgaGllcmFyY2h5PyBTdXBwb3J0IHlvdXIgYW5zd2VyIHdpdGggeW91ciByZXN1bHRzLgoKT2YgdGhlIHRvdGFsIDE1IGVmZmVjdHMsIG9ubHkgNiBzaG93IGEgc2lnbmlmaWNhbnQgcmVzdWx0LCBpbmRpY2F0aW5nIHNwYXJzaXR5LiBUaGVzZSBzaWduaWZpY2FudCBlZmZlY3RzIGFyZSBmcm9tIFBPUE0sIFBURiwgYW5kIFBFUCBmb3IgbWFpbiBlZmZlY3RzLCBhbmQgUE9QTTpQVEYsIFBPUE06VE0sIFBPTVA6VE06UEVQIGZvciBpbnRlcmFjdGlvbiBlZmZlY3RzLiBPZiB0aGUgbWFpbiBlZmZlY3RzLCBQT01QIGFuZCBQVEYgYXJlIHNpZ25pZmljYW50IHdpdGggcCA8IC4wMDEgLCB3aGlsZSBQRVAgaXMgc2lnbmlmaWNhbnQgYXQgdGhlIHAgPSAuMDUgbGV2ZWwuIFRoZSBQT1BNOlBURiBpbnRlcmFjdGlvbiBpcyBzaWduaWZpY2FudCB3aXRoIHAgPCAuMDAxLCBQT1BNOlRNIGlzIHNpZ25pZmljYW50IGF0IHRoZSBwID0gMC4xIGxldmVsLCBhbmQgUE9QTTpUTTpQRVAgaXMgc2lnbmlmaWNhbnQgYXQgdGhlIHAgPSAuMDUgbGV2ZWwuIEhlcmUgd2Ugc2VlIGhpZXJhcmNoeSBhdCBwbGF5LCBhcyBtYWluIGVmZmVjdHMgYXJlIGxhcmdlciBvdmVyYWxsIHRoYW4gaW50ZXJhY3Rpb24gZWZmZWN0cyBhcmUuIEZpbmFsbHksIHdpdGhpbiB0aGUgaW50ZXJhY3Rpb24gZWZmZWN0cywgYWxsIGhhdmUgYXQgbGVhc3Qgb25lIHNpZ25pZmljYW50IHBhcmVudCB0ZXJtIGluY2x1ZGVkLCBpbmRpY2F0aW5nIGhlcmVkaXR5LgoKIyBMaW1pdGF0aW9ucyAmIFdoYXQgWW914oCZZCBEbyBOZXh0CgpEaXNjdXNzIGlzc3VlcyB5b3Ugc2VlIHdpdGggdGhpcyBkZXNpZ24uIERvIHlvdSBoYXZlIGlzc3VlcyB3aXRoIENvbmZvdW5kaW5nIGVmZmVjdHM/IEFyZSB0aGVyZSBkZXNpZ24gd2Vha25lc3Nlcz8gR2l2ZSBmb2xsb3cgdXAgZXhwZXJpbWVudCBpZGVhcy4KCgoKUGF0aWVudCBlZHVjYXRpb24gd2FzIHJlZHVjZWQgdG8gcGFtcGhsZXRzIHZlcnN1cyBhdWRpb3Zpc3VhbCBpbnN0cnVjdGlvbiwgb21pdHRpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50IGRlbGl2ZXJ5IGZhY3RvcnMgc3VjaCBhcyBoZWFsdGggbGl0ZXJhY3ksIGxhbmd1YWdlIGJhcnJpZXJzLCBmYW1pbHkgaW52b2x2ZW1lbnQsIGFuZCBwYXRpZW50IGVuZ2FnZW1lbnQuIFNlY29uZCwgdGhlIGRlc2lnbiBkb2VzIG5vdCBhY2NvdW50IGZvciBwYXRpZW50IGNvbXBsaWFuY2UgYSBwYXRpZW50IGFzc2lnbmVkIHRvIGRhaWx5IHBoeXNpY2FsIHRoZXJhcHkgbWF5IG5vdCBhdHRlbmQgYWxsIHNlc3Npb25zLCBhbmQgYSBwYXRpZW50IHJlY2VpdmluZyBhdWRpb3Zpc3VhbCBlZHVjYXRpb24gbWF5IG5vdCBlbmdhZ2Ugd2l0aCBpdCBtZWFuaW5nZnVsbHkuIFRoaXMgY3JlYXRzIGEgZ2FwIGJldHdlZW4gYXNzaWduZWQgYW5kIHJlY2VpdmVkIHRyZWF0bWVudCB0aGF0IGNvdWxkIGJpYXMgcmVzdWx0cyB0b3dhcmQgdGhlIG51bGwuIFRoaXJkLCBtb2JpbGl6YXRpb24gdGltaW5nIGZhaWxlZCB0byByZWFjaCBzaWduaWZpY2FuY2UgZGVzcGl0ZSBzdHJvbmcgY2xpbmljYWwgZXZpZGVuY2UgZnJvbSBFbmhhbmNlZCBSZWNvdmVyeSBBZnRlciBTdXJnZXJ5IChFUkFTKSBwcm90b2NvbHMgc3VwcG9ydGluZyBlYXJseSBtb2JpbGl6YXRpb24gYXMgb25lIG9mIHRoZSBtb3N0IGltcGFjdGZ1bCBwb3N0LXN1cmdpY2FsIGludGVydmVudGlvbnMuIFRoaXMgbWF5IHJlZmxlY3QgaW5zdWZmaWNpZW50IHBvd2VyIHdpdGggb25seSAxNiBvYnNlcnZhdGlvbnMgcGVyIGJsb2NrIHRvIGRldGVjdCBpdHMgZWZmZWN0IGF0IHRoZSBjaG9zZW4gZWZmZWN0IHNpemUuCgpGb3IgZm9sbG93LXVwIHdvcmssIGEgcmVzcG9uc2Ugc3VyZmFjZSBtZXRob2RvbG9neSAoUlNNKSBkZXNpZ24gY291bGQgb3B0aW1pemUgdGhlIHNpZ25pZmljYW50IGZhY3RvcnMgYmV5b25kIGJpbmFyeSBsZXZlbHMgaWRlbnRpZnlpbmcgdGhlIGlkZWFsIFBUIGZyZXF1ZW5jeSBhbmQgYW5hbGdlc2lhIGRvc2luZyBjb21iaW5hdGlvbiB0aGF0IG1pbmltaXplcyByZWNvdmVyeSB0aW1lLiBGdXR1cmUgc3R1ZGllcyBzaG91bGQgYWxzbyBjb25zaWRlciBhIHNwbGl0LXBsb3QgZGVzaWduIGlmIGFuYWxnZXNpYSBwcm90b2NvbHMgYXJlIHNldCBhdCB0aGUgd2FyZCBsZXZlbCByYXRoZXIgdGhhbiBpbmRpdmlkdWFsbHkgYXNzaWduZWQsIGFzIHRoaXMgd291bGQgYmV0dGVyIHJlZmxlY3QgcmVhbCBjbGluaWNhbCB3b3JrZmxvdy4gRXhwYW5kaW5nIHRoZSBibG9ja2luZyBzdHJ1Y3R1cmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIHBhdGllbnQgY2hhcmFjdGVyaXN0aWNzIHN1Y2ggYXMgYWdlIGdyb3VwIG9yIHN1cmdpY2FsIGNvbXBsZXhpdHkgd291bGQgZnVydGhlciBzdHJlbmd0aGVuIGludGVybmFsIHZhbGlkaXR5IGFuZCBnZW5lcmFsaXphYmlsaXR5Cg==